[erlang-bugs] ssh2_msg_channel_failure

Fyodor Ustinov ufm@REDACTED
Fri May 4 12:33:57 CEST 2012


On 04.05.2012 13:00, Ingela Anderton Andin wrote:
> Hello again!
>
> After some more testing I found my first patch attempt was faulty but 
> the following patch makes the problem
> go away. Maybe that is why putty described their bug as "semi"-bug 
> ("if handled correctly it will not matter").Well never mind, if  it 
> ends up making our
> ssh implementation better it was, at leas in some way, a good bug ;)

Yes! You catch it! :)
Big thanx!

>
> diff --git a/lib/ssh/src/ssh_connection.erl 
> b/lib/ssh/src/ssh_connection.erl
> index 46f0c7e..c46f799 100644
> --- a/lib/ssh/src/ssh_connection.erl
> +++ b/lib/ssh/src/ssh_connection.erl
> @@ -720,12 +720,17 @@ handle_msg(#ssh_msg_channel_request{request_type 
> = "env"},
>
> handle_msg(#ssh_msg_channel_request{recipient_channel = ChannelId,
>                                    request_type = _Other,
> -                                   want_reply = WantReply}, Connection,
> +                                   want_reply = WantReply},  
> #connection{channel_cache = Cache} = Connection,
>           ConnectionPid, _) ->
>     if WantReply == true ->
> -           FailMsg = channel_failure_msg(ChannelId),
> -           {{replies, [{connection_reply, ConnectionPid, FailMsg}]},
> -            Connection};
> +               case ssh_channel:cache_lookup(Cache, ChannelId) of
> +                   #channel{remote_id = RemoteId}  ->
> +                       FailMsg = channel_failure_msg(RemoteId),
> +                       {{replies, [{connection_reply, ConnectionPid, 
> FailMsg}]},
> +                        Connection};
> +                   undefined -> %% Chanel has been closed
> +                       {noreply, Connection}
> +               end;
>        true ->
>            {noreply, Connection}
>     end;
> diff --git a/lib/ssh/src/ssh_connection_manager.erl 
> b/lib/ssh/src/ssh_connection_manager.erl
> index 8c1f88e..a0ea04a 100644
> --- a/lib/ssh/src/ssh_connection_manager.erl
> +++ b/lib/ssh/src/ssh_connection_manager.erl
> @@ -267,7 +267,7 @@ handle_call({ssh_msg, Pid, Msg}, From,
>            disconnect_fun(Reason, SSHOpts),
>            {stop, {shutdown, normal}, State#state{connection_state = 
> Connection}}
>        catch
> -           _:Reason ->
> +           _:Error ->
>                {disconnect, Reason, {{replies, Replies}, Connection}} =
>                    ssh_connection:handle_msg(
>                      #ssh_msg_disconnect{code = 
> ?SSH_DISCONNECT_BY_APPLICATION,
> @@ -277,7 +277,7 @@ handle_call({ssh_msg, Pid, Msg}, From,
>                lists:foreach(fun send_msg/1, Replies),
>                SSHOpts = proplists:get_value(ssh_opts, Opts),
>                disconnect_fun(Reason, SSHOpts),
> -               {stop, {shutdown, Reason}, 
> State#state{connection_state = Connection}}
> +               {stop, {shutdown, Error}, State#state{connection_state 
> = Connection}}
>        end;
>
>
>
> Regards Ingela Erlang/OTP team Ericsson AB
>
>
>
> Ingela Anderton Andin wrote:
>> Hello again!
>>
>> I tested this some more and found that adding a sleep in 
>> start_local_sshd would let the session be up longer before it crashed.
>> I also traced the erlang code and I recive this message
>>
>> 6> (<0.61.0>) call 
>> ssh_connection:handle_msg({ssh_msg_channel_request,0,"winadj@REDACTED",true,<<>>},{connection,[],20497,[],1, 
>>
>>            {ssh_cli,[#Fun<foo.0.70052927>]},
>>            "dain",2222,
>>            [{role,server},
>>             {pwdfun,#Fun<foo.pwdcheck.2>},
>>             {system_dir,"."},
>>             {shell,#Fun<foo.0.70052927>}],
>>            undefined,<0.58.0>,undefined},<0.62.0>,server)
>>
>> which seems to be related to this putty bug:  
>> http://www.chiark.greenend.org.uk/~sgtatham/putty/wishlist/winadj-success.html 
>>
>>
>> So maybe we can do something to make erlang server more graceful, but 
>> it looks like the root of the problem is putty.
>>
>> Regards Ingela Erlang/OTP team - Ericsson AB
>>
>>
>> Fyodor Ustinov wrote:
>>> On 27.04.2012 11:54, Ingela Anderton Andin wrote:
>>>> Hi!
>>>>
>>>> Fyodor Ustinov wrote:
>>>>> Hi!
>>>>>
>>>>> putty say "Server send disconnect message type 11 (by 
>>>>> application): "Internal error"
>>>>>
>>>>> Erlang say:
>>>>>
>>>> Interesting! It seems like the server is trying to handle a request 
>>>> for a channel that has for some reason been closed.
>>>> If i modify the patch like this ...
>>>>
>>>> diff --git a/lib/ssh/src/ssh_connection.erl 
>>>> b/lib/ssh/src/ssh_connection.erl
>>>> index 8574e08..fbd4967 100644
>>>> --- a/lib/ssh/src/ssh_connection.erl
>>>> +++ b/lib/ssh/src/ssh_connection.erl
>>>> @@ -723,11 +723,14 @@ 
>>>> handle_msg(#ssh_msg_channel_request{recipient_channel = ChannelId,
>>>>                                    want_reply = WantReply},  
>>>> #connection{channel_cache = Cache} = Connection,
>>>>           ConnectionPid, _) ->
>>>>     if WantReply == true ->
>>>> -           #channel{remote_id = RemoteId} = ChannelId =
>>>> -               ssh_channel:cache_lookup(Cache, ChannelId),
>>>> -           FailMsg = channel_failure_msg(RemoteId),
>>>> -           {{replies, [{connection_reply, ConnectionPid, FailMsg}]},
>>>> -            Connection};
>>>> +               case ssh_channel:cache_lookup(Cache, ChannelId) of
>>>> +                   #channel{remote_id = RemoteId} = ChannelId ->
>>>> +                       FailMsg = channel_failure_msg(RemoteId),
>>>> +                       {{replies, [{connection_reply, 
>>>> ConnectionPid, FailMsg}]},
>>>> +                        Connection};
>>>> +                   undefined -> %% Chanel has been closed
>>>> +                       {noreply, Connection}
>>>> +               end;
>>>>        true ->
>>>>            {noreply, Connection}
>>>>     end;
>>>>
>>>> ... you should not get the below crash. But I am wondering if your 
>>>> application will
>>>> now behave as you expect?  Can you give me any more information on 
>>>> the senario
>>>> of your application. It would like to be able to write a minimal 
>>>> test case that provokes
>>>> the problem.
>>> Hmm. I'll wait for the final patch. :)
>>>
>>> minimal test case is very simple:
>>> %%%-------------------------------------------------------------------
>>>
>>> -module(sshd).
>>> -export([start/0]).
>>>
>>> -export([start_local_sshd/2, pwdcheck/2]).
>>>
>>>
>>> start() ->
>>>     crypto:start(),
>>>     ssh:start(),
>>>     ssh:daemon(
>>>         {172,28,3,22},
>>>         2222,
>>>         [{shell, fun (U,A) -> spawn(?MODULE, start_local_sshd, [U, 
>>> A]) end},
>>>         {pwdfun, fun sshd:pwdcheck/2}
>>>         ]
>>>     )
>>> .
>>>
>>> pwdcheck(_Usr, _Pwd) ->
>>>     true
>>> .
>>>
>>> start_local_sshd(U, Address) ->
>>>     
>>> io:format("------------------------------------------------------------------------------------------------------------------------------------------------ 
>>>
>>> ----~n"),
>>>     start_local_sshd(U, Address)
>>> .
>>>>
>>>>
>>>>> =ERROR REPORT==== 25-Apr-2012::20:03:09 ===
>>>>> ** Generic server <0.156.0> terminating
>>>>> ** Last message in was {ssh_msg,<0.157.0>,
>>>>> <<98,0,0,0,0,0,0,0,34,119,105,110,97,100,106,
>>>>>                                   
>>>>> 64,112,117,116,116,121,46,112,114,111,106,
>>>>>                                   
>>>>> 101,99,116,115,46,116,97,114,116,97,114,117,
>>>>>                                   115,46,111,114,103,1>>}
>>>>> ** When Server state == {state,server,undefined,undefined,<0.157.0>,
>>>>>                             {connection,[],315439,[],1,
>>>>>                                 {ssh_cli,[#Fun<sshd.0.34972026>]},
>>>>>                                 {10,128,0,10},
>>>>>                                 2222,
>>>>>                                 [{role,server},
>>>>>                                  {pwdfun,#Fun<sshd.pwcheck.2>},
>>>>>                                  {shell,#Fun<sshd.0.34972026>}],
>>>>>                                 undefined,<0.153.0>,undefined},
>>>>>                             0,
>>>>>                             [{address,{10,128,0,10}},
>>>>>                              {port,2222},
>>>>>                              {role,server},
>>>>>                              {socket_opts,[inet,{ip,{10,128,0,10}}]},
>>>>>                              {ssh_opts,
>>>>>                                  [{role,server},
>>>>>                                   {pwdfun,#Fun<sshd.pwcheck.2>},
>>>>>                                   {shell,#Fun<sshd.0.34972026>}]}],
>>>>>                             undefined,true}
>>>>> ** Reason for termination ==
>>>>> ** {{badmatch,
>>>>>         {disconnect,
>>>>>             {11,"Internal error"},
>>>>>             {{replies,[{channel_data,<0.159.0>,{closed,0}}]},
>>>>>              {connection,[],315439,[],1,
>>>>>                  {ssh_cli,[#Fun<sshd.0.34972026>]},
>>>>>                  {10,128,0,10},
>>>>>                  2222,
>>>>>                  [{role,server},
>>>>>                   {pwdfun,#Fun<sshd.pwcheck.2>},
>>>>>                   {shell,#Fun<sshd.0.34972026>}],
>>>>>                  undefined,<0.153.0>,undefined}}}},
>>>>>     [{ssh_connection_manager,handle_call,3,
>>>>>          [{file,"../src/ssh_connection_manager.erl"},{line,271}]},
>>>>>      {gen_server,handle_msg,5,[{file,"gen_server.erl"},{line,588}]},
>>>>>      
>>>>> {proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,227}]}]}
>>>>>
>>>>> =ERROR REPORT==== 25-Apr-2012::20:03:09 ===
>>>>> Erlang ssh connection handler failed with reason: {{{badmatch,
>>>>>                                                      {disconnect,
>>>>>                                                       
>>>>> {11,"Internal error"},
>>>>>                                                       {{replies,
>>>>>                                                         
>>>>> [{channel_data,
>>>>> <0.159.0>,
>>>>>                                                           
>>>>> {closed,0}}]},
>>>>>                                                        
>>>>> {connection,[],315439,
>>>>>                                                         [],1,
>>>>>                                                         {ssh_cli,
>>>>>                                                          
>>>>> [#Fun<sshd.0.34972026>]},
>>>>>                                                         
>>>>> {10,128,0,10},
>>>>>                                                         2222,
>>>>>                                                         
>>>>> [{role,server},
>>>>>                                                          {pwdfun,
>>>>>                                                           
>>>>> #Fun<sshd.pwcheck.2>},
>>>>>                                                          {shell,
>>>>>                                                           
>>>>> #Fun<sshd.0.34972026>}],
>>>>>                                                         
>>>>> undefined,<0.153.0>,
>>>>>                                                         
>>>>> undefined}}}},
>>>>>                                                     
>>>>> [{ssh_connection_manager,
>>>>>                                                       handle_call,3,
>>>>>                                                       [{file,
>>>>>                                                         
>>>>> "../src/ssh_connection_manager.erl"},
>>>>>                                                        {line,271}]},
>>>>>                                                      
>>>>> {gen_server,handle_msg,
>>>>>                                                       5,
>>>>>                                                       
>>>>> [{file,"gen_server.erl"},
>>>>>                                                        {line,588}]},
>>>>>                                                      {proc_lib,
>>>>>                                                       
>>>>> init_p_do_apply,3,
>>>>>                                                       
>>>>> [{file,"proc_lib.erl"},
>>>>>                                                        
>>>>> {line,227}]}]},
>>>>>                                                    {gen_server,call,
>>>>>                                                     [<0.156.0>,
>>>>>                                                      
>>>>> {ssh_msg,<0.157.0>,
>>>>> <<93,0,0,0,0,0,0,32,106>>},
>>>>>                                                      infinity]}}
>>>>> , Stacktace: 
>>>>> [{gen_server,call,3,[{file,"gen_server.erl"},{line,188}]},
>>>>>               {ssh_connection_manager,call,3,
>>>>>                   
>>>>> [{file,"../src/ssh_connection_manager.erl"},{line,583}]},
>>>>>               {ssh_connection_handler,generate_event,4,
>>>>>                   [{file,"ssh_connection_handler.erl"},{line,804}]},
>>>>>               
>>>>> {gen_fsm,handle_msg,7,[{file,"gen_fsm.erl"},{line,494}]},
>>>>>               
>>>>> {proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,227}]}]
>>>>> please report this to erlang-bugs@REDACTED
>>>>> =ERROR REPORT==== 25-Apr-2012::20:03:09 ===
>>>>> ** State machine <0.157.0> terminating
>>>>> ** Last message in was {tcp,#Port<0.1845>,<<>>}
>>>>> ** When State == connected
>>>>> **      Data  == {state,tcp,gen_tcp,tcp_closed,
>>>>>                      {ssh,server,
>>>>>                          {undefined,{{10,128,0,1},1076}},
>>>>>                          {2,0},
>>>>>                          {2,0},
>>>>>                          
>>>>> "SSH-2.0-PuTTY_Release_0.62","SSH-2.0-Erlang",
>>>>> <<20,231,36,36,12,195,57,51,47,209,229,164,97,204,116,
>>>>>                            
>>>>> 116,90,0,0,0,154,100,105,102,102,105,101,45,104,101,
>>>>>                            
>>>>> 108,108,109,97,110,45,103,114,111,117,112,45,101,
>>>>>                            
>>>>> 120,99,104,97,110,103,101,45,115,104,97,50,53,54,44,
>>>>>                            
>>>>> 100,105,102,102,105,101,45,104,101,108,108,109,97,
>>>>>                            
>>>>> 110,45,103,114,111,117,112,45,101,120,99,104,97,110,
>>>>>                            
>>>>> 103,101,45,115,104,97,49,44,100,105,102,102,105,101,
>>>>>                            
>>>>> 45,104,101,108,108,109,97,110,45,103,114,111,117,
>>>>>                            
>>>>> 112,49,52,45,115,104,97,49,44,100,105,102,102,105,
>>>>>                            
>>>>> 101,45,104,101,108,108,109,97,110,45,103,114,111,
>>>>>                            
>>>>> 117,112,49,45,115,104,97,49,44,114,115,97,50,48,52,
>>>>>                            
>>>>> 56,45,115,104,97,50,53,54,44,114,115,97,49,48,50,52,
>>>>>                            
>>>>> 45,115,104,97,49,0,0,0,15,115,115,104,45,114,115,97,
>>>>>                            
>>>>> 44,115,115,104,45,100,115,115,0,0,0,159,97,101,115,
>>>>>                            
>>>>> 50,53,54,45,99,116,114,44,97,101,115,50,53,54,45,99,
>>>>>                            
>>>>> 98,99,44,114,105,106,110,100,97,101,108,45,99,98,99,
>>>>>                            
>>>>> 64,108,121,115,97,116,111,114,46,108,105,117,46,115,
>>>>>                            
>>>>> 101,44,97,101,115,49,57,50,45,99,116,114,44,97,101,
>>>>>                            
>>>>> 115,49,57,50,45,99,98,99,44,97,101,115,49,50,56,45,
>>>>>                            
>>>>> 99,116,114,44,97,101,115,49,50,56,45,99,98,99,44,98,
>>>>>                            
>>>>> 108,111,119,102,105,115,104,45,99,116,114,44,98,108,
>>>>>                            
>>>>> 111,119,102,105,115,104,45,99,98,99,44,51,100,101,
>>>>>                            
>>>>> 115,45,99,116,114,44,51,100,101,115,45,99,98,99,44,
>>>>>                            
>>>>> 97,114,99,102,111,117,114,50,53,54,44,97,114,99,102,
>>>>>                            
>>>>> 111,117,114,49,50,56,0,0,0,159,97,101,115,50,53,54,
>>>>>                            
>>>>> 45,99,116,114,44,97,101,115,50,53,54,45,99,98,99,44,
>>>>>                            
>>>>> 114,105,106,110,100,97,101,108,45,99,98,99,64,108,
>>>>>                            
>>>>> 121,115,97,116,111,114,46,108,105,117,46,115,101,44,
>>>>>                            
>>>>> 97,101,115,49,57,50,45,99,116,114,44,97,101,115,49,
>>>>>                            
>>>>> 57,50,45,99,98,99,44,97,101,115,49,50,56,45,99,116,
>>>>>                            
>>>>> 114,44,97,101,115,49,50,56,45,99,98,99,44,98,108,
>>>>>                            
>>>>> 111,119,102,105,115,104,45,99,116,114,44,98,108,111,
>>>>>                            
>>>>> 119,102,105,115,104,45,99,98,99,44,51,100,101,115,
>>>>>                            
>>>>> 45,99,116,114,44,51,100,101,115,45,99,98,99,44,97,
>>>>>                            
>>>>> 114,99,102,111,117,114,50,53,54,44,97,114,99,102,
>>>>>                            
>>>>> 111,117,114,49,50,56,0,0,0,31,104,109,97,99,45,115,
>>>>>                            
>>>>> 104,97,49,44,104,109,97,99,45,115,104,97,49,45,57,
>>>>>                            
>>>>> 54,44,104,109,97,99,45,109,100,53,0,0,0,31,104,109,
>>>>>                            
>>>>> 97,99,45,115,104,97,49,44,104,109,97,99,45,115,104,
>>>>>                            
>>>>> 97,49,45,57,54,44,104,109,97,99,45,109,100,53,0,0,0,
>>>>>                            
>>>>> 9,110,111,110,101,44,122,108,105,98,0,0,0,9,110,111,
>>>>>                            
>>>>> 110,101,44,122,108,105,98,0,0,0,0,0,0,0,0,0,0,0,0,0>>,
>>>>> <<20,68,106,202,126,189,248,249,152,175,237,102,43,
>>>>>                            
>>>>> 239,21,11,93,0,0,0,26,100,105,102,102,105,101,45,
>>>>>                            
>>>>> 104,101,108,108,109,97,110,45,103,114,111,117,112,
>>>>>                            
>>>>> 49,45,115,104,97,49,0,0,0,15,115,115,104,45,114,115,
>>>>>                            
>>>>> 97,44,115,115,104,45,100,115,115,0,0,0,19,97,101,
>>>>>                            
>>>>> 115,49,50,56,45,99,98,99,44,51,100,101,115,45,99,98,
>>>>>                            
>>>>> 99,0,0,0,19,97,101,115,49,50,56,45,99,98,99,44,51,
>>>>>                            
>>>>> 100,101,115,45,99,98,99,0,0,0,9,104,109,97,99,45,
>>>>>                            
>>>>> 115,104,97,49,0,0,0,9,104,109,97,99,45,115,104,97,
>>>>>                            
>>>>> 49,0,0,0,9,110,111,110,101,44,122,108,105,98,0,0,0,
>>>>>                            
>>>>> 9,110,111,110,101,44,122,108,105,98,0,0,0,0,0,0,0,0,
>>>>>                            0,0,0,0,0>>,
>>>>>                          
>>>>> undefined,'diffie-hellman-group1-sha1','ssh-rsa',
>>>>>                          ssh_file,ssh_io,'hmac-sha1',
>>>>> <<92,89,171,169,113,136,6,188,156,238,58,144,38,214,
>>>>>                            101,198,247,166,205,208>>,
>>>>>                          20,'hmac-sha1',
>>>>> <<24,206,173,99,5,252,206,70,166,228,30,17,101,89,36,
>>>>>                            241,175,116,238,86>>,
>>>>>                          20,'aes128-cbc',
>>>>> <<45,208,196,236,205,82,244,222,24,132,67,151,22,62,
>>>>>                            250,150>>,
>>>>>                          16,
>>>>> <<219,113,112,85,250,220,170,249,194,198,230,158,76,
>>>>>                            122,39,155>>,
>>>>>                          'aes128-cbc',
>>>>> <<44,157,215,194,90,86,202,31,228,49,188,97,227,97,
>>>>>                            233,144>>,
>>>>>                          16,
>>>>> <<196,110,206,199,93,111,201,100,74,194,231,242,179,
>>>>>                            201,15,112>>,
>>>>>                          
>>>>> none,undefined,none,undefined,none,none,true,
>>>>>                          infinity,
>>>>>                          
>>>>> 132151717501655075704740428602371821313660310182519774905429178494543592682738802201444120687073445805819575914576401425536104160589136387731343596760889931670361900328999551747697001054684538185039596790225261438983095509229017954492065022996307622720613396529860286665422597229362632923823896919144441708303, 
>>>>>
>>>>> <<163,238,219,114,10,240,95,30,207,178,78,138,146,58,
>>>>>                            87,102,43,69,173,214>>,
>>>>> <<163,238,219,114,10,240,95,30,207,178,78,138,146,58,
>>>>>                            87,102,43,69,173,214>>,
>>>>>                          [{address,{10,128,0,10}},
>>>>>                           {port,2222},
>>>>>                           {role,server},
>>>>>                           {pwdfun,#Fun<sshd.pwcheck.2>},
>>>>>                           {shell,#Fun<sshd.0.34972026>}],
>>>>>                          114,49,
>>>>>                          
>>>>> {{49985839305237737688589908016292087537304670681285167039328910635484947391794443232164854289884214947929742793900078775832939310627327467626874637085242037758449972175725827907772272533385534014381436171929411436926043326068534386929776710296045274502307637113679098707841881585433086106245829282665980090815, 
>>>>>
>>>>>                            
>>>>> 8395950144135694221446766804944646771011612746974327140375413192360614631043395924085970461957169944119762874929925969231067866506208529309578676567265288403413833138477256106374779295193693244061192404399083583730265790053008130870886892278024924477046645863115470835406736499812828883753405586277633495326}, 
>>>>>
>>>>>                           {2,
>>>>>                            
>>>>> 179769313486231590770839156793787453197860296048756011706444423684197180216158519368947833795864925541502180565485980503646440548199239100050792877003355816639229553136239076508735759914822574862575007425302077447712589550957937778424442426617334727629299387668709205606050270810842907692932019128194467627007}}, 
>>>>>
>>>>>                          
>>>>> undefined,undefined,"ssh-connection",undefined,
>>>>>                          
>>>>> "publickey,keyboard_interactive,password",undefined,
>>>>>                          undefined,
>>>>>                          ["ssh-rsa","ssh-dss"]},
>>>>>                      #Port<0.1845>,<<>>,
>>>>> <<107,0,185,229,147,59,116,109,92,16,81,210,0,243,152,220,
>>>>>                        
>>>>> 153,112,133,2,156,113,5,213,202,236,150,200,184,190,61,
>>>>>                        
>>>>> 227,37,31,157,1,53,98,136,245,199,18,165,166,214,36,210,
>>>>>                        12,92,130,17,174>>,
>>>>>                      undefined,
>>>>>                      {ssh_msg_kexinit,
>>>>> <<126,96,184,235,216,208,69,175,215,35,94,180,214,20,
>>>>>                            246,141>>,
>>>>>                          ["diffie-hellman-group1-sha1"],
>>>>>                          ["ssh-rsa","ssh-dss"],
>>>>>                          ["aes128-cbc","3des-cbc"],
>>>>>                          ["aes128-cbc","3des-cbc"],
>>>>>                          ["hmac-sha1"],
>>>>>                          ["hmac-sha1"],
>>>>>                          ["none","zlib"],
>>>>>                          ["none","zlib"],
>>>>>                          [],[],false,0},
>>>>>                      false,<0.156.0>,undefined,undefined,undefined,
>>>>>                      [{address,{10,128,0,10}},
>>>>>                       {port,2222},
>>>>>                       {role,server},
>>>>>                       {pwdfun,#Fun<sshd.pwcheck.2>},
>>>>>                       {shell,#Fun<sshd.0.34972026>}]}
>>>>> ** Reason for termination =
>>>>> ** {{{badmatch,
>>>>>          {disconnect,
>>>>>              {11,"Internal error"},
>>>>>              {{replies,[{channel_data,<0.159.0>,{closed,0}}]},
>>>>>               {connection,[],315439,[],1,
>>>>>                   {ssh_cli,[#Fun<sshd.0.34972026>]},
>>>>>                   {10,128,0,10},
>>>>>                   2222,
>>>>>                   [{role,server},
>>>>>                    {pwdfun,#Fun<sshd.pwcheck.2>},
>>>>>                    {shell,#Fun<sshd.0.34972026>}],
>>>>>                   undefined,<0.153.0>,undefined}}}},
>>>>>      [{ssh_connection_manager,handle_call,3,
>>>>>           [{file,"../src/ssh_connection_manager.erl"},{line,271}]},
>>>>>       {gen_server,handle_msg,5,[{file,"gen_server.erl"},{line,588}]},
>>>>>       
>>>>> {proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,227}]}]},
>>>>>     {gen_server,call,
>>>>>         
>>>>> [<0.156.0>,{ssh_msg,<0.157.0>,<<93,0,0,0,0,0,0,32,106>>},infinity]}}
>>>>>
>>>>>
>>>>>
>>>>>> Hi!
>>>>>>
>>>>>> Daniel Goertzen wrote:
>>>>>>> The channel number on the putty side is 0x100, and on the Erlang 
>>>>>>> side it is 0x0.  Erlang is responding to SSH_MSG_CHANNEL_REQUEST 
>>>>>>> using 0x0, however RFC4254 says the responses should be...
>>>>>>>
>>>>>>>
>>>>>>>       byte      SSH_MSG_CHANNEL_SUCCESS
>>>>>>>       uint32    recipient channel
>>>>>>>
>>>>>>>
>>>>>>>       byte      SSH_MSG_CHANNEL_FAILURE
>>>>>>>       uint32    recipient channel
>>>>>>>
>>>>>>>
>>>>>>> ...and I interpret "recipient channel" as being the Putty side, 
>>>>>>> which is 0x100.  Putty seems to cope when Erlang returns 
>>>>>>> SUCCESS, but blows up when Erlang returns a FAILURE.
>>>>>>>
>>>>>>
>>>>>> Yes that is correct I remember correcting such a bug a long time 
>>>>>> ago, checking the code however there seems to be one error 
>>>>>> handling case that I missed.  Could you check if
>>>>>> the following patch resolves your issue Fyodor?
>>>>>>
>>>>>> diff --git a/lib/ssh/src/ssh_connection.erl 
>>>>>> b/lib/ssh/src/ssh_connection.erl
>>>>>> index 46f0c7e..8574e08 100644
>>>>>> --- a/lib/ssh/src/ssh_connection.erl
>>>>>> +++ b/lib/ssh/src/ssh_connection.erl
>>>>>> @@ -720,10 +720,12 @@ 
>>>>>> handle_msg(#ssh_msg_channel_request{request_type = "env"},
>>>>>>
>>>>>> handle_msg(#ssh_msg_channel_request{recipient_channel = ChannelId,
>>>>>>                                    request_type = _Other,
>>>>>> -                                   want_reply = WantReply}, 
>>>>>> Connection,
>>>>>> +                                   want_reply = WantReply},  
>>>>>> #connection{channel_cache = Cache} = Connection,
>>>>>>           ConnectionPid, _) ->
>>>>>>     if WantReply == true ->
>>>>>> -           FailMsg = channel_failure_msg(ChannelId),
>>>>>> +           #channel{remote_id = RemoteId} = ChannelId =
>>>>>> +               ssh_channel:cache_lookup(Cache, ChannelId),
>>>>>> +           FailMsg = channel_failure_msg(RemoteId),
>>>>>>            {{replies, [{connection_reply, ConnectionPid, FailMsg}]},
>>>>>>             Connection};
>>>>>>        true ->
>>>>>>
>>>>>>
>>>>>>> I could imagine this passing automated tests when both ends 
>>>>>>> number their channels starting from 0.  I bet randomizing the 
>>>>>>> channel numbers would reveal this and maybe other issues.
>>>>>>>
>>>>>>> Dan.
>>>>>>>
>>>>>> I think you have a valid point however we have to change the 
>>>>>> implementation in one way or an other to do that and that has not 
>>>>>> been prioritized.
>>>>>>
>>>>>>
>>>>>> Regards Ingela Erlang/OTP team -Ericsson AB
>>>>>>
>>>>>>>
>>>>>>> On Tue, Apr 24, 2012 at 11:22 AM, Fyodor Ustinov <ufm@REDACTED 
>>>>>>> <mailto:ufm@REDACTED>> wrote:
>>>>>>>
>>>>>>>     Hi!
>>>>>>>
>>>>>>>     I added this patch - did not help.
>>>>>>>
>>>>>>>     http://blog.ufm.su/putty.log - this putty log.
>>>>>>>
>>>>>>>
>>>>>>>         Hi!
>>>>>>>
>>>>>>>         This might be a symptom of the "close race-condition"-bug
>>>>>>>          reported by Daniel. The patch for that bug is
>>>>>>>
>>>>>>>         diff --git a/lib/ssh/src/ssh_channel.erl
>>>>>>>         b/lib/ssh/src/ssh_channel.erl
>>>>>>>         index 7b600ed..1938858 100644
>>>>>>>         --- a/lib/ssh/src/ssh_channel.erl
>>>>>>>         +++ b/lib/ssh/src/ssh_channel.erl
>>>>>>>         @@ -1,7 +1,7 @@
>>>>>>>         %%
>>>>>>>         %% %CopyrightBegin%
>>>>>>>         %%
>>>>>>>         -%% Copyright Ericsson AB 2008-2011. All Rights Reserved.
>>>>>>>         +%% Copyright Ericsson AB 2008-2012. All Rights Reserved.
>>>>>>>         %%
>>>>>>>         %% The contents of this file are subject to the Erlang 
>>>>>>> Public
>>>>>>>         License,
>>>>>>>         %% Version 1.1, (the "License"); you may not use this file
>>>>>>>         except in
>>>>>>>         @@ -215,7 +215,7 @@ handle_info({ssh_cm, ConnectionManager,
>>>>>>>         {closed, ChannelId}},
>>>>>>>                          close_sent = false} = State) ->
>>>>>>>            %% To be on the safe side, i.e. the manager has already
>>>>>>>         been terminated.
>>>>>>>            (catch ssh_connection:close(ConnectionManager, 
>>>>>>> ChannelId)),
>>>>>>>         -    {stop, normal, State};
>>>>>>>         +    {stop, normal, State#state{close_sent = true}};
>>>>>>>
>>>>>>>         handle_info({ssh_cm, _, _} = Msg, #state{cm = 
>>>>>>> ConnectionManager,
>>>>>>>                               channel_cb = Module,
>>>>>>>         diff --git a/lib/ssh/src/ssh_connection_manager.erl
>>>>>>>         b/lib/ssh/src/ssh_connection_manager.erl
>>>>>>>         index e993f59..8c1f88e 100644
>>>>>>>         --- a/lib/ssh/src/ssh_connection_manager.erl
>>>>>>>         +++ b/lib/ssh/src/ssh_connection_manager.erl
>>>>>>>         @@ -384,9 +384,10 @@ handle_call({close, ChannelId}, _,
>>>>>>>                   #state{connection = Pid, connection_state =
>>>>>>>                          #connection{channel_cache = Cache}} = 
>>>>>>> State) ->
>>>>>>>            case ssh_channel:cache_lookup(Cache, ChannelId) of
>>>>>>>         -       #channel{remote_id = Id} ->
>>>>>>>         +       #channel{remote_id = Id} = Channel ->
>>>>>>>                   send_msg({connection_reply, Pid,
>>>>>>>                             ssh_connection:channel_close_msg(Id)}),
>>>>>>>         +           ssh_channel:cache_update(Cache,
>>>>>>>         Channel#channel{sent_close = true}),
>>>>>>>                   {reply, ok, State};
>>>>>>>               undefined ->
>>>>>>>                   {reply, ok, State}
>>>>>>>
>>>>>>>
>>>>>>>         Regards Ingela Erlang/OTP  team - Ericsson AB
>>>>>>>
>>>>>>>         Daniel Goertzen wrote:
>>>>>>>
>>>>>>>             Under Putty Session->Logging can you turn on "SSH 
>>>>>>> Packets"
>>>>>>>             and post the log showing the error?
>>>>>>>
>>>>>>>             Dan.
>>>>>>>
>>>>>>>             On Sun, Apr 22, 2012 at 3:58 AM, Fyodor Ustinov
>>>>>>> <ufm@REDACTED <mailto:ufm@REDACTED> <mailto:ufm@REDACTED
>>>>>>> <mailto:ufm@REDACTED>>> wrote:
>>>>>>>
>>>>>>>                Hi!
>>>>>>>
>>>>>>>                Windows ssh client PuTTY show message  
>>>>>>> "Disconnected:
>>>>>>>             Received
>>>>>>>                SSH2_MSG_CHANNEL_FAILURE for nonexistent channel 0"
>>>>>>>             while working
>>>>>>>                with erlang ssh daemon.
>>>>>>>
>>>>>>>                Erlang R15B01 (erts-5.9.1) [source] [64-bit] 
>>>>>>> [smp:8:8]
>>>>>>>                [async-threads:0] [kernel-poll:false]
>>>>>>>
>>>>>>>                WBR,
>>>>>>>                   Fyodor.
>>>>>>>
>>>>>>>                _______________________________________________
>>>>>>>                erlang-bugs mailing list
>>>>>>>                erlang-bugs@REDACTED 
>>>>>>> <mailto:erlang-bugs@REDACTED>
>>>>>>> <mailto:erlang-bugs@REDACTED
>>>>>>> <mailto:erlang-bugs@REDACTED>>
>>>>>>>                http://erlang.org/mailman/listinfo/erlang-bugs
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>             --             *Daniel Goertzen | Senior Software 
>>>>>>> Engineer*
>>>>>>>             Office: 828.610.4596 <tel:828.610.4596> | Fax:
>>>>>>>             828.322.5294 <tel:828.322.5294> |
>>>>>>>             dang@REDACTED
>>>>>>> <mailto:dang@REDACTED>
>>>>>>> <mailto:dang@REDACTED
>>>>>>> <mailto:dang@REDACTED>>
>>>>>>>             *Network Integrity Systems | We Bring Security To 
>>>>>>> Light™*
>>>>>>>
>>>>>>>             1937 Tate Blvd. SE
>>>>>>>
>>>>>>>             Hickory, North Carolina, USA 28602
>>>>>>>
>>>>>>>             /Network Integrity Systems’ INTERCEPTOR™ Optical 
>>>>>>> Network
>>>>>>>             Security System is a Smart-PDS™ that ensures superior
>>>>>>>             protection and cost effectiveness of classified 
>>>>>>> networks.
>>>>>>>              For more information, visit our website
>>>>>>>             at:www.networkintegritysystems.com
>>>>>>> <http://www.networkintegritysystems.com>
>>>>>>> <http://www.networkintegritysystems.com/>./
>>>>>>>
>>>>>>>
>>>>>>>             __________________________________________
>>>>>>>             INTERCEPTOR™ Optical Network Security System is made in
>>>>>>>             the USA for the USA. Although not an export controlled
>>>>>>>             item, because of the role it plays in the assurance 
>>>>>>> of the
>>>>>>>             safety and integrity of National Security Information,
>>>>>>>             Network Integrity Systems (NIS) is committed to 
>>>>>>> compliance
>>>>>>>             with the U.S. Export Administration Act. 
>>>>>>> Accordingly, NIS
>>>>>>>             will not ship INTERCEPTOR products to certain foreign
>>>>>>>             government end users without U.S. government 
>>>>>>> approval and
>>>>>>>             will refuse transactions with individuals or 
>>>>>>> entities that
>>>>>>>             have been denied export privileges.
>>>>>>>
>>>>>>>
>>>>>>>             
>>>>>>> ------------------------------------------------------------------------ 
>>>>>>>
>>>>>>>
>>>>>>>             _______________________________________________
>>>>>>>             erlang-bugs mailing list
>>>>>>>             erlang-bugs@REDACTED <mailto:erlang-bugs@REDACTED>
>>>>>>>             http://erlang.org/mailman/listinfo/erlang-bugs
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>     _______________________________________________
>>>>>>>     erlang-bugs mailing list
>>>>>>>     erlang-bugs@REDACTED <mailto:erlang-bugs@REDACTED>
>>>>>>>     http://erlang.org/mailman/listinfo/erlang-bugs
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> -- 
>>>>>>> *Daniel Goertzen | Senior Software Engineer*
>>>>>>> Office: 828.610.4596 | Fax: 828.322.5294 | 
>>>>>>> dang@REDACTED 
>>>>>>> <mailto:dang@REDACTED>
>>>>>>> *Network Integrity Systems | We Bring Security To Light™*
>>>>>>>
>>>>>>> 1937 Tate Blvd. SE
>>>>>>>
>>>>>>> Hickory, North Carolina, USA 28602
>>>>>>>
>>>>>>> /Network Integrity Systems’ INTERCEPTOR™ Optical Network 
>>>>>>> Security System is a Smart-PDS™ that ensures superior protection 
>>>>>>> and cost effectiveness of classified networks.  For more 
>>>>>>> information, visit our website 
>>>>>>> at:www.networkintegritysystems.com 
>>>>>>> <http://www.networkintegritysystems.com/>./
>>>>>>>
>>>>>>>
>>>>>>> __________________________________________
>>>>>>> INTERCEPTOR™ Optical Network Security System is made in the USA 
>>>>>>> for the USA. Although not an export controlled item, because of 
>>>>>>> the role it plays in the assurance of the safety and integrity 
>>>>>>> of National Security Information, Network Integrity Systems 
>>>>>>> (NIS) is committed to compliance with the U.S. Export 
>>>>>>> Administration Act. Accordingly, NIS will not ship INTERCEPTOR 
>>>>>>> products to certain foreign government end users without U.S. 
>>>>>>> government approval and will refuse transactions with 
>>>>>>> individuals or entities that have been denied export privileges.
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>> _______________________________________________
>> erlang-bugs mailing list
>> erlang-bugs@REDACTED
>> http://erlang.org/mailman/listinfo/erlang-bugs
>>
>




More information about the erlang-bugs mailing list