More information appended... > Hi, > > We are running the Dropbear 0.50 SSH server on an ARM9 platform. We are > connecting to it from a fast quad-core intel server over 100-Base-T. > > We found this problem when trying to build Perl for the target. The > cross-compile process uploads and runs programs on the target and checks > the exit code from the SSH client to check the target program's exit code. > > The ARM9 platform is running a stock Linux 2.6.18 kernel compiled with the > GCC CodeSourcery 2006q3-26 v4.1.1. > > The host Intel platform is running CentOS5 with OpenSSH_4.3p2. > > A sample shell script on the target is: > > #!/bin/bash > echo "ARG: $1" > exit $1 > > When we run dropbear 0.50 server on the target without debug enabled, we > get exit code 255 from SSH. e.g. > > # ssh [EMAIL PROTECTED] /tmp/test.sh 1 > ARG: 1 > # echo $? > 255 > # > > # ssh [EMAIL PROTECTED] /tmp/test.sh 100 > ARG: 1 > # echo $? > 255 > # > > If we recompile dropbear with debug enabled, but don't pass the -v option > when starting dropbear, the behavior is the same. If we run dropbear with > the "-F -E -v" options, we get the correct exit codes. > > # ssh [EMAIL PROTECTED] /tmp/test.sh 1 > TRACE: enter sign_key_free > TRACE: enter dsa_key_free > TRACE: enter dsa_key_free: key == NULL > TRACE: enter rsa_key_free > TRACE: leave rsa_key_free > TRACE: leave sign_key_free > ARG: 1 > # echo $? > 1 > # > > # ssh [EMAIL PROTECTED] /tmp/test.sh 100 > TRACE: enter sign_key_free > TRACE: enter dsa_key_free > TRACE: enter dsa_key_free: key == NULL > TRACE: enter rsa_key_free > TRACE: leave rsa_key_free > TRACE: leave sign_key_free > ARG: 1 > # echo $? > 100 > # > > Does anyone have any ideas what could be causing this? > > Has anyone seen this on other platforms or is happy that dropbear does > return the correct exit codes in their tests? > > Thanks, > > Roger >
I have upgraded the host to OpenSSH 4.7 and the problem persists. Turning on full logging on the host provides the following end trace on a failing connection (when dropbear is not generating logging output to the serial terminal): debug2: channel 0: open confirm rwindow 8000 rmax 8000 ARG: 100 debug2: channel 0: rcvd eof debug2: channel 0: output open -> drain debug2: channel 0: obuf empty debug2: channel 0: close_write debug2: channel 0: output drain -> closed debug2: channel 0: rcvd close debug2: channel 0: close_read debug2: channel 0: input open -> closed debug3: channel 0: will not send data after close debug2: channel 0: almost dead debug2: channel 0: gc: notify user debug2: channel 0: gc: user detached debug2: channel 0: send close debug2: channel 0: is dead debug2: channel 0: garbage collecting debug1: channel 0: free: client-session, nchannels 1 debug3: channel 0: status: The following connections are open: #0 client-session (t4 r0 i3/0 o3/0 fd -1/-1 cfd -1) debug3: channel 0: close_fds r -1 w -1 e 7 c -1 debug1: Transferred: stdin 0, stdout 0, stderr 0 bytes in 0.1 seconds debug1: Bytes per second: stdin 0.0, stdout 0.0, stderr 0.0 debug1: Exit status -1 On a working connection, when dropbear is not generating logging output to the serial terminal, following end trace is gathered: debug2: channel 0: written 106 to efd 7 ARG: 100 debug2: channel 0: rcvd eof debug2: channel 0: output open -> drain debug2: channel 0: obuf empty debug2: channel 0: close_write debug2: channel 0: output drain -> closed debug1: client_input_channel_req: channel 0 rtype exit-status reply 0 debug2: channel 0: rcvd close debug2: channel 0: close_read debug2: channel 0: input open -> closed debug3: channel 0: will not send data after close debug2: channel 0: almost dead debug2: channel 0: gc: notify user debug2: channel 0: gc: user detached debug2: channel 0: send close debug2: channel 0: is dead debug2: channel 0: garbage collecting debug1: channel 0: free: client-session, nchannels 1 debug3: channel 0: status: The following connections are open: #0 client-session (t4 r0 i3/0 o3/0 fd -1/-1 cfd -1) debug3: channel 0: close_fds r -1 w -1 e 7 c -1 debug1: Transferred: stdin 0, stdout 0, stderr 0 bytes in 0.5 seconds debug1: Bytes per second: stdin 0.0, stdout 0.0, stderr 0.0 debug1: Exit status 100 With the working connection, we get the "client_input_channel_req" event coming in whereas in the failing connection, it doesn't occur. Does this information give anyone a clue/suggestion as to what may be failing? Thanks.