Hi, I eventually found the offender. do_child sets up the environment and before executing the command (ifconfig) it tries to close the "connection descriptors". In my use case, the effect is that the ssh tun channel 0 file descriptors are all set to -1. The patch below prevents the problem and everything seems to work fine - my tunnel now passes traffic. I have also tested that interactive login and command execution works okay and tidies up FD's when finished. I suspect that this is an issue with uClinux vfork and would be very interested in any uClinux user/developer feedback. Also I would like to do more testing before submitting the patch below. diff --git a/SW/source/user/ssh/session.c b/SW/source/user/ssh/session.c index e0e5555..62ecb7a 100755 --- a/SW/source/user/ssh/session.c +++ b/SW/source/user/ssh/session.c @@ -1725,7 +1725,9 @@ do_child(Session *s, const char *command) * closed before building the environment, as we call * get_remote_ipaddr there. */ +#ifndef __uClinux__ child_close_fds(); +#endif /* * Must take new environment into use so that .ssh/rc, Regards, Fergal On Wed, Oct 22, 2014 at 1:58 PM, Fergal Meath <fergalme@xxxxxxxxx> wrote: > Hi, > > I have sshd (OpenSSH_5.8p1) running on uCLinux (Linux version 2.6.19-uc1) > Interactive sessions are working okay. > Tunnel device seems to be set up but is not passing any traffic to other > end. > Debug output shows that tun channel 0 file descriptors are changed from > 8/8 to -1/-1. > Does anyone know how or what could be causing this? > > Client command is… > ssh –w0:0 root@192.168.1.100 ifconfig tun0 10.0.0.1 pointopoint 10.0.0.2 > netmask 255.255.255.255 > > My sshd debug output is shown below. > > Any help or tips would be appreciated, > Regards, > > Fergal > > ---------- SSHD DEBUG OUTPUT > ---------------------------------------------------- > Jan 1 01:50:09 (none) auth.info sshd[2344]: Accepted password for root > from 192.168.1.200 port 55408 ssh2 > Jan 1 01:50:09 (none) auth.debug sshd[2344]: debug1: Entering interactive > session for SSH2. > Jan 1 01:50:09 (none) auth.debug sshd[2344]: debug2: fd 6 setting > O_NONBLOCK > Jan 1 01:50:09 (none) auth.debug sshd[2344]: debug2: fd 7 setting > O_NONBLOCK > Jan 1 01:50:09 (none) auth.debug sshd[2344]: debug1: > server_init_dispatch_20 > Jan 1 01:50:09 (none) auth.debug sshd[2344]: debug1: > server_input_channel_open: ctype tun@xxxxxxxxxxx rchan 0 win 2097152 max > 32768 > Jan 1 01:50:09 (none) auth.debug sshd[2344]: debug1: sys_tun_open: tun0 > mode 1 fd 8 > Jan 1 01:50:09 (none) auth.debug sshd[2344]: debug2: fd 8 setting > O_NONBLOCK > Jan 1 01:50:09 (none) auth.debug sshd[2344]: debug3: fd 8 is O_NONBLOCK > Jan 1 01:50:09 (none) auth.debug sshd[2344]: debug1: channel 0: new [tun] > Jan 1 01:50:09 (none) auth.debug sshd[2344]: debug1: > server_input_channel_open: confirm tun@xxxxxxxxxxx > Jan 1 01:50:09 (none) auth.debug sshd[2344]: debug1: > server_input_channel_open: ctype session rchan 2 win 2097152 max 32768 > Jan 1 01:50:09 (none) auth.debug sshd[2344]: debug1: input_session_request > Jan 1 01:50:09 (none) auth.debug sshd[2344]: debug1: channel 1: new > [server-session] > Jan 1 01:50:09 (none) auth.debug sshd[2344]: debug2: session_new: > allocate (allocated 0 max 10) > Jan 1 01:50:09 (none) auth.debug sshd[2344]: debug3: session_unused: > session id 0 unused > Jan 1 01:50:09 (none) auth.debug sshd[2344]: debug1: session_new: session > 0 > Jan 1 01:50:09 (none) auth.debug sshd[2344]: debug1: session_open: > channel 1 > Jan 1 01:50:09 (none) auth.debug sshd[2344]: debug1: session_open: > session 0: link with channel 1 > Jan 1 01:50:09 (none) auth.debug sshd[2344]: debug1: > server_input_channel_open: confirm session > Jan 1 01:50:09 (none) auth.debug sshd[2344]: debug1: > server_input_channel_req: channel 1 request env reply 0 > Jan 1 01:50:09 (none) auth.debug sshd[2344]: debug1: session_by_channel: > session 0 channel 1 > Jan 1 01:50:09 (none) auth.debug sshd[2344]: debug1: > session_input_channel_req: session 0 req env > Jan 1 01:50:09 (none) auth.debug sshd[2344]: debug2: Ignoring env request > LANG: disallowed name > Jan 1 01:50:09 (none) auth.debug sshd[2344]: debug1: > server_input_channel_req: channel 1 request exec reply 1 > Jan 1 01:50:09 (none) auth.debug sshd[2344]: debug1: session_by_channel: > session 0 channel 1 > Jan 1 01:50:09 (none) auth.debug sshd[2344]: debug1: > session_input_channel_req: session 0 req exec > Jan 1 01:50:09 (none) auth.debug sshd[2415]: debug1: permanently_set_uid: > 0/0 > Jan 1 01:50:09 (none) auth.debug sshd[2344]: debug2: fd 4 setting > TCP_NODELAY > Jan 1 01:50:09 (none) auth.debug sshd[2344]: debug3: packet_set_tos: set > IP_TOS 0x08 > Jan 1 01:50:09 (none) auth.debug sshd[2344]: debug2: fd 11 setting > O_NONBLOCK > Jan 1 01:50:09 (none) auth.debug sshd[2344]: debug2: fd 10 setting > O_NONBLOCK > Jan 1 01:50:09 (none) auth.debug sshd[2344]: debug2: fd 13 setting > O_NONBLOCK > Jan 1 01:50:09 (none) auth.debug sshd[2344]: debug2: channel 1: rcvd eof > Jan 1 01:50:09 (none) auth.debug sshd[2344]: debug2: channel 1: output > open -> drain > Jan 1 01:50:09 (none) auth.debug sshd[2344]: debug2: channel 1: obuf empty > Jan 1 01:50:09 (none) auth.debug sshd[2344]: debug2: channel 1: > close_write > Jan 1 01:50:09 (none) auth.debug sshd[2344]: debug2: channel 1: output > drain -> closed > Jan 1 01:50:10 (none) auth.debug sshd[2344]: debug1: Received SIGCHLD. > Jan 1 01:50:10 (none) auth.debug sshd[2344]: debug1: session_by_pid: pid > 2415 > Jan 1 01:50:10 (none) auth.debug sshd[2344]: debug1: > session_exit_message: session 0 channel 1 pid 2415 > Jan 1 01:50:10 (none) auth.debug sshd[2344]: debug2: channel 1: request > exit-status confirm 0 > Jan 1 01:50:10 (none) auth.debug sshd[2344]: debug1: > session_exit_message: release channel 1 > Jan 1 01:50:10 (none) auth.debug sshd[2344]: debug2: channel 1: read<=0 > rfd 11 len 0 > Jan 1 01:50:10 (none) auth.debug sshd[2344]: debug2: channel 1: read > failed > Jan 1 01:50:10 (none) auth.debug sshd[2344]: debug2: channel 1: close_read > Jan 1 01:50:10 (none) auth.debug sshd[2344]: debug2: channel 1: input > open -> drain > Jan 1 01:50:10 (none) auth.debug sshd[2344]: debug2: channel 1: read 0 > from efd 13 > Jan 1 01:50:10 (none) auth.debug sshd[2344]: debug2: channel 1: closing > read-efd 13 > Jan 1 01:50:10 (none) auth.debug sshd[2344]: debug2: channel 1: ibuf empty > Jan 1 01:50:10 (none) auth.debug sshd[2344]: debug2: channel 1: send eof > Jan 1 01:50:10 (none) auth.debug sshd[2344]: debug2: channel 1: input > drain -> closed > Jan 1 01:50:10 (none) auth.debug sshd[2344]: debug2: channel 1: send close > Jan 1 01:50:10 (none) auth.debug sshd[2344]: debug2: notify_done: reading > Jan 1 01:50:10 (none) auth.debug sshd[2344]: debug3: channel 1: will not > send data after close > Jan 1 01:50:10 (none) auth.debug sshd[2344]: debug2: channel 1: rcvd close > Jan 1 01:50:10 (none) auth.debug sshd[2344]: debug3: channel 1: will not > send data after close > Jan 1 01:50:10 (none) auth.debug sshd[2344]: debug2: channel 1: is dead > Jan 1 01:50:10 (none) auth.debug sshd[2344]: debug2: channel 1: gc: > notify user > Jan 1 01:50:10 (none) auth.debug sshd[2344]: debug1: session_by_channel: > session 0 channel 1 > Jan 1 01:50:10 (none) auth.debug sshd[2344]: debug1: > session_close_by_channel: channel 1 child 0 > Jan 1 01:50:10 (none) auth.debug sshd[2344]: debug1: session_close: > session 0 pid 0 > Jan 1 01:50:10 (none) auth.debug sshd[2344]: debug3: session_unused: > session id 0 unused > Jan 1 01:50:10 (none) auth.debug sshd[2344]: debug2: channel 1: gc: user > detached > Jan 1 01:50:10 (none) auth.debug sshd[2344]: debug2: channel 1: is dead > Jan 1 01:50:10 (none) auth.debug sshd[2344]: debug2: channel 1: garbage > collecting > Jan 1 01:50:10 (none) auth.debug sshd[2344]: debug1: channel 1: free: > server-session, nchannels 2 > Jan 1 01:50:10 (none) auth.debug sshd[2344]: debug3: channel 1: status: > The following connections are open:\r\n #0 tun (t4 r0 i0/0 o0/0 fd -1/-1 > cc -1)\r\n #1 server-session (t4 r2 i3/0 o3/0 fd -1/-1 cc -1)\r\n > > _______________________________________________ openssh-unix-dev mailing list openssh-unix-dev@xxxxxxxxxxx https://lists.mindrot.org/mailman/listinfo/openssh-unix-dev