[Bug 3280] New: stdout resource unavailable error when used with a pipe

bugzilla-daemon at mindrot.org bugzilla-daemon at mindrot.org
Mon Mar 15 20:29:44 AEDT 2021


https://bugzilla.mindrot.org/show_bug.cgi?id=3280

            Bug ID: 3280
           Summary: stdout resource unavailable error when used with a
                    pipe
           Product: Portable OpenSSH
           Version: 8.5p1
          Hardware: PPC
                OS: AIX
            Status: NEW
          Severity: normal
          Priority: P5
         Component: ssh
          Assignee: unassigned-bugs at mindrot.org
          Reporter: sanumesh at in.ibm.com

Hello

when a script that has ssh and cat is passed onto a pipe command then
there is a error seen as resource unavailable.

Recreation :

# cat tp.sh
#!/usr/bin/ksh93

export LANG=C

{
  ssh localhost hostname
  cat /usr/bin/mksysb
} | sleep 10

execution output :

# ./tp.sh
root at localhost's password:
cat: output error
Resource temporarily unavailable

Possible root cause :

1 ssh calls dup() to copy stdout(fd=1) to fd=5.

2 ssh sets O_NONBLOCK flag to fd=5.

3 ssh calls dup2() to assign /dev/null(fd=7) to fd=1.
then, ssh closes fd=7. so fd=1 -> /dev/null and fd=5 -> ssh's stdout

4- ssh calls unset_nonblock() to try to clear
O_NONBLOCK from fd=1, but it can't because /dev/null has been assigned
to fd=1.

ssh doesn't clear O_NONBLOCK from ssh's stdout which
is fd=5 and ssh closes its stdout(fd=5) without clearing
O_NONBLOCK.

5- The subsequent program "cat", fails to write buffers
to its stdout, because cat's stdout is connected to the
same pipe as ssh, which still has O_NONBLOCK.

When executed in debug mode, we get the following error :
debug3: send packet: type 1
debug1: fd 0 clearing O_NONBLOCK
debug3: fd 1 is not O_NONBLOCK      <<<<<<
debug1: fd 2 clearing O_NONBLOCK
Transferred: sent 1940, received 2424 bytes, in 0.0 seconds
Bytes per second: sent 48522.2, received 60627.8
debug1: Exit status 0
cat: output error
Resource temporarily unavailable


Note: This error is not seen in 7.5p1. If the step 3 mentioned above is
commented, then no issue is seen.

Please advice on how this can be fixed ?

Thanks

-- 
You are receiving this mail because:
You are watching the assignee of the bug.


More information about the openssh-bugs mailing list