diff options
author | Eric Blake <ebb9@byu.net> | 2009-10-28 14:36:09 -0600 |
---|---|---|
committer | Eric Blake <ebb9@byu.net> | 2009-10-28 21:12:41 -0600 |
commit | 1c59bb3cefff73c532033863e60e9130892a50dd (patch) | |
tree | 42f89ad649d5be625ac200f044c3f7acd5ee5e08 /tests | |
parent | 536a1fbe5ff47078d515a41ea4b45c4e0d794da2 (diff) | |
download | coreutils-1c59bb3cefff73c532033863e60e9130892a50dd.tar.xz |
nice, nohup, su: detect write failure to stderr
These programs can print non-fatal diagnostics to stderr prior to
exec'ing a subsidiary program. However, if we thought the situation
warranted a diagnostic, we insist that the diagnostic be printed
without error, rather than blindly exec, as it may be a security risk.
For an example, try 'nice -n -1 nice 2>/dev/full'. Failure to raise
priority (by lowering niceness) is not fatal, but failure to inform
the user about failure to change priority is dangerous.
* src/nice.c (main): Declare failure if writing advisory message
to stderr fails.
* src/nohup.c (main): Likewise.
* src/su.c (main): Likewise.
* tests/misc/nice: Test this.
* tests/misc/nohup: Likewise.
* NEWS: Document this.
Diffstat (limited to 'tests')
-rwxr-xr-x | tests/misc/nice | 6 | ||||
-rwxr-xr-x | tests/misc/nohup | 15 |
2 files changed, 21 insertions, 0 deletions
diff --git a/tests/misc/nice b/tests/misc/nice index cf4d96b23..f85666e34 100755 --- a/tests/misc/nice +++ b/tests/misc/nice @@ -82,6 +82,12 @@ if test x`nice -n -1 nice 2> /dev/null` = x0 ; then mv err exp || framework_failure nice --1 true 2> err || fail=1 compare exp err || fail=1 + # Failure to write advisory message is fatal. Buggy through coreutils 8.0. + if test -w /dev/full && test -c /dev/full; then + nice -n -1 nice > out 2> /dev/full + test $? = 125 || fail=1 + test -s out && fail=1 + fi else # superuser - change succeeds nice -n -1 nice 2> err || fail=1 diff --git a/tests/misc/nohup b/tests/misc/nohup index ad04a1cb0..96810588e 100755 --- a/tests/misc/nohup +++ b/tests/misc/nohup @@ -64,6 +64,21 @@ test -f nohup.out && fail=1 rm -f nohup.out err # ---------------------- +# Bug present through coreutils 8.0: failure to print advisory message +# to stderr must be fatal. Requires stdout to be terminal. +if test -w /dev/full && test -c /dev/full; then +( + exec >/dev/tty + test -t 1 || exit 0 + nohup echo hi 2> /dev/full + test $? = 125 || fail=1 + test -f nohup.out || fail=1 + test -s nohup.out && fail=1 + rm -f nohup.out + exit $fail +) || fail=1 +fi + nohup no-such-command 2> err errno=$? if test -t 1; then |