Hi Peter Can you let me know how to proceed for forward this to the openssh source code team? Regards Nacho del Rey wrote:>> 6647 1456244042.325310 select(14, [3 9], [], NULL, {900, 0}) = 1 (in[3],>> left {892, 12016}) <<-- where id fd#13 ?>Can you map this back to the OpenSSH source code?>//Peter
Nacho del Rey wrote:> Can you let me know how to proceed for forward this to the openssh > source code team?Map your strace syscalls to the source code and point out where the problem is. Do debugging on your own. Send a patch. //Peter
Hi again Finally I recompiled the ssh to include several 'traps' within the code (channels.c mainly) channel_pre_open(Channel *c, fd_set *readset, fd_set *writeset) { u_int limit = compat20 ? c->remote_window : packet_get_maxsize(); int aux = buffer_len(&c->input); debugnacho("En pre_open c-istate: %d limit %d buffer_len %d c_ostate %d ctl_fd %d\n",c->istate,limit,aux,c->ostate,c->ctl_fd); /* the rest of the function code */ } In normal conditions the buffer_len(&c->input) is adjusting its window size En pre_open c-istate: 0 limit 1048576 buffer_len 0 c_ostate 0 ctl_fd -1 En pre_open c-istate: 0 limit 1048576 buffer_len 0 c_ostate 0 ctl_fd -1 En pre_open c-istate: 0 limit 1048495 buffer_len 0 c_ostate 0 ctl_fd -1 En pre_open c-istate: 0 limit 1048495 buffer_len 0 c_ostate 0 ctl_fd -1 En pre_open c-istate: 0 limit 1048415 buffer_len 0 c_ostate 0 ctl_fd -1 ...... time later En pre_open c-istate: 0 limit 1002267 buffer_len 0 c_ostate 0 ctl_fd -1 En pre_open c-istate: 0 limit 1002267 buffer_len 0 c_ostate 0 ctl_fd -1 En pre_open c-istate: 0 limit 1002267 buffer_len 0 c_ostate 0 ctl_fd -1 En pre_open c-istate: 0 limit 998560 buffer_len 0 c_ostate 0 ctl_fd -1 En pre_open c-istate: 0 limit 998560 buffer_len 0 c_ostate 0 ctl_fd -1 En pre_open c-istate: 0 limit 1048576 buffer_len 0 c_ostate 0 ctl_fd -1 En pre_open c-istate: 0 limit 1048576 buffer_len 0 c_ostate 0 ctl_fd -1 But, If I compare the same trace when the the hand-terminal connects to the application... En pre_open c-istate: 0 limit 1048576 buffer_len 0 c_ostate 0 ctl_fd -1 En pre_open c-istate: 0 limit 1048576 buffer_len 0 c_ostate 0 ctl_fd -1 En pre_open c-istate: 0 limit 1048476 buffer_len 0 c_ostate 0 ctl_fd -1 ...... En pre_open c-istate: 0 limit 985 buffer_len 0 c_ostate 0 ctl_fd -1 En pre_open c-istate: 0 limit 647 buffer_len 0 c_ostate 0 ctl_fd -1 En pre_open c-istate: 0 limit 647 buffer_len 0 c_ostate 0 ctl_fd -1 En pre_open c-istate: 0 limit 647 buffer_len 0 c_ostate 0 ctl_fd -1 En pre_open c-istate: 0 limit 647 buffer_len 0 c_ostate 0 ctl_fd -1 En pre_open c-istate: 0 limit 632 buffer_len 0 c_ostate 0 ctl_fd -1 En pre_open c-istate: 0 limit 322 buffer_len 0 c_ostate 0 ctl_fd -1 En pre_open c-istate: 0 limit 322 buffer_len 0 c_ostate 0 ctl_fd -1 En pre_open c-istate: 0 limit 0 buffer_len 16 c_ostate 0 ctl_fd -1 En pre_open c-istate: 0 limit 0 buffer_len 16 c_ostate 0 ctl_fd -1 En pre_open c-istate: 0 limit 0 buffer_len 16 c_ostate 0 ctl_fd -1 En pre_open c-istate: 0 limit 0 buffer_len 16 c_ostate 0 ctl_fd -1 En pre_open c-istate: 0 limit 0 buffer_len 16 c_ostate 0 ctl_fd -1 En pre_open c-istate: 0 limit 0 buffer_len 16 c_ostate 0 ctl_fd -1 En pre_open c-istate: 0 limit 0 buffer_len 16 c_ostate 0 ctl_fd -1 En pre_open c-istate: 0 limit 0 buffer_len 16 c_ostate 0 ctl_fd -1 It seems the channel_input_window_adjust function is not adjusting rwindow size and it finally comes to zero and it is when the problem appears ( the file-descriptor fd#13 which connects to the application dissapear) So the question is.. who is the responsible in adjusting "channel_input_window_adjust" function? the binary application which runs in the server or on the contrary the ssh client? I ask this question because when I'm connected thru ssh (putty), although I am not sending a keystroke to the server if I'm changing the size of the putty window (using the mouse), I can see the buffer_len(c->input) changes , and I don't have clear in which side (client/server) the rwindow is adjusted Thanks in advance Nacho. 2016-04-20 16:52 GMT+02:00 Nacho del Rey <odelreym at gmail.com>:> Hi Peter > > Can you let me know how to proceed for forward this to the openssh source > code team? > > Regards > > > Nacho del Rey wrote: > >> 6647 1456244042.325310 select(14, [3 9], [], NULL, {900, 0}) = 1 (in > [3], > >> left {892, 12016}) <<-- where id fd#13 ? > > >Can you map this back to the OpenSSH source code? > > > >//Peter >
Hi again Finally I found out what it was going on The problem lays on the Honeywell ssh client (a fork of OpenSSH) The client doesn't negotiate SSH_MSG_CHANNEL_WINDOW_ADJUST/SSH2_MSG_CHANNEL_WINDOW_ADJUST parameters This issue it's not happening using putty ssh client (for instance) Hope this information helps anyone [SOLVED] Nacho. 2016-06-18 20:50 GMT+02:00 Nacho del Rey <odelreym at gmail.com>:> Hi again > > Finally I recompiled the ssh to include several 'traps' within the code > (channels.c mainly) > > channel_pre_open(Channel *c, fd_set *readset, fd_set *writeset) > { > u_int limit = compat20 ? c->remote_window : packet_get_maxsize(); > > int aux = buffer_len(&c->input); > debugnacho("En pre_open c-istate: %d limit %d buffer_len %d c_ostate %d > ctl_fd %d\n",c->istate,limit,aux,c->ostate,c->ctl_fd); > > /* the rest of the function code */ > } > > In normal conditions the buffer_len(&c->input) is adjusting its window > size > > En pre_open c-istate: 0 limit 1048576 buffer_len 0 c_ostate 0 ctl_fd -1 > En pre_open c-istate: 0 limit 1048576 buffer_len 0 c_ostate 0 ctl_fd -1 > En pre_open c-istate: 0 limit 1048495 buffer_len 0 c_ostate 0 ctl_fd -1 > En pre_open c-istate: 0 limit 1048495 buffer_len 0 c_ostate 0 ctl_fd -1 > En pre_open c-istate: 0 limit 1048415 buffer_len 0 c_ostate 0 ctl_fd -1 > ...... time later > En pre_open c-istate: 0 limit 1002267 buffer_len 0 c_ostate 0 ctl_fd -1 > En pre_open c-istate: 0 limit 1002267 buffer_len 0 c_ostate 0 ctl_fd -1 > En pre_open c-istate: 0 limit 1002267 buffer_len 0 c_ostate 0 ctl_fd -1 > En pre_open c-istate: 0 limit 998560 buffer_len 0 c_ostate 0 ctl_fd > -1 > En pre_open c-istate: 0 limit 998560 buffer_len 0 c_ostate 0 ctl_fd -1 > En pre_open c-istate: 0 limit 1048576 buffer_len 0 c_ostate 0 ctl_fd -1 > En pre_open c-istate: 0 limit 1048576 buffer_len 0 c_ostate 0 ctl_fd -1 > > But, If I compare the same trace when the the hand-terminal connects to > the application... > > En pre_open c-istate: 0 limit 1048576 buffer_len 0 c_ostate 0 ctl_fd -1 > En pre_open c-istate: 0 limit 1048576 buffer_len 0 c_ostate 0 ctl_fd -1 > En pre_open c-istate: 0 limit 1048476 buffer_len 0 c_ostate 0 ctl_fd -1 > ...... > En pre_open c-istate: 0 limit 985 buffer_len 0 c_ostate 0 ctl_fd -1 > En pre_open c-istate: 0 limit 647 buffer_len 0 c_ostate 0 ctl_fd -1 > En pre_open c-istate: 0 limit 647 buffer_len 0 c_ostate 0 ctl_fd -1 > En pre_open c-istate: 0 limit 647 buffer_len 0 c_ostate 0 ctl_fd -1 > En pre_open c-istate: 0 limit 647 buffer_len 0 c_ostate 0 ctl_fd -1 > En pre_open c-istate: 0 limit 632 buffer_len 0 c_ostate 0 ctl_fd -1 > En pre_open c-istate: 0 limit 322 buffer_len 0 c_ostate 0 ctl_fd -1 > En pre_open c-istate: 0 limit 322 buffer_len 0 c_ostate 0 ctl_fd -1 > En pre_open c-istate: 0 limit 0 buffer_len 16 c_ostate 0 ctl_fd -1 > En pre_open c-istate: 0 limit 0 buffer_len 16 c_ostate 0 ctl_fd -1 > En pre_open c-istate: 0 limit 0 buffer_len 16 c_ostate 0 ctl_fd -1 > En pre_open c-istate: 0 limit 0 buffer_len 16 c_ostate 0 ctl_fd -1 > En pre_open c-istate: 0 limit 0 buffer_len 16 c_ostate 0 ctl_fd -1 > En pre_open c-istate: 0 limit 0 buffer_len 16 c_ostate 0 ctl_fd -1 > En pre_open c-istate: 0 limit 0 buffer_len 16 c_ostate 0 ctl_fd -1 > En pre_open c-istate: 0 limit 0 buffer_len 16 c_ostate 0 ctl_fd -1 > > It seems the channel_input_window_adjust function is not adjusting rwindow > size and it finally comes to zero and it is when the problem appears ( the > file-descriptor fd#13 which connects to the application dissapear) > > So the question is.. who is the responsible in adjusting > "channel_input_window_adjust" function? the binary application which runs > in the server or on the contrary the ssh client? > > I ask this question because when I'm connected thru ssh (putty), although > I am not sending a keystroke to the server if I'm changing the size of the > putty window (using the mouse), I can see the buffer_len(c->input) changes > , and I don't have clear in which side (client/server) the rwindow is > adjusted > > Thanks in advance > > Nacho. > > > > > > > > > 2016-04-20 16:52 GMT+02:00 Nacho del Rey <odelreym at gmail.com>: > >> Hi Peter >> >> Can you let me know how to proceed for forward this to the openssh source >> code team? >> >> Regards >> >> >> Nacho del Rey wrote: >> >> 6647 1456244042.325310 select(14, [3 9], [], NULL, {900, 0}) = 1 (in >> [3], >> >> left {892, 12016}) <<-- where id fd#13 ? >> >> >Can you map this back to the OpenSSH source code? >> >> >> >//Peter >> > >