misc/158206: /bin/sh doesn't properly return IO errors to
conditionals in a script
Chris Ulrich
culrich at csnstores.com
Thu Jun 23 16:10:14 UTC 2011
>Number: 158206
>Category: misc
>Synopsis: /bin/sh doesn't properly return IO errors to conditionals in a script
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Thu Jun 23 16:10:14 UTC 2011
>Closed-Date:
>Last-Modified:
>Originator: Chris Ulrich
>Release: amd64 freebsd 8.2-RELEASE
>Organization:
CSN Stores
>Environment:
FreeBSD svn.csnzoo.com 8.2-RELEASE FreeBSD 8.2-RELEASE #0: Thu Feb 17 02:41:51 UTC 2011 root at mason.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC amd64
>Description:
a /bin/sh script writing to a closed file descriptor doesn't pass the IO error it receives from the write to the script itself.
>How-To-Repeat:
write these two scripts:
#!/bin/sh
while echo -n . ; do : ; done
and
#!/bin/sh
while printf . ; do : ; done
now run each script with std-out closed, ie (assuming your interactive shell is bourne shell or similar):
$ sh ./bomb-echo.sh >&-
or
$ sh ./bomb-printf.sh >&-
both should exit instantly because echo *should* get an error from writing to a closed file descriptor. Instead both spin madly until they get a kill signal or you truss them (the last bit of stuff you see when you truss them is:
72238: sigprocmask(SIG_SETMASK,0x0,0x0) = 0 (0x0)
72238: write(1,".",1) ERR#9 'Bad file descriptor'
72238: process exit, rval = 0
which itself is another
>Fix:
sorry. don't know C.
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-bugs
mailing list