From: Jim Meyering Date: Fri, 28 Mar 2008 21:37:19 +0000 (+0100) Subject: mknod, mkfifo: don't segfault when diagnosing invalid SELinux context X-Git-Tag: v6.11~47 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=eb8fa94f2cf030d625c12ad68bb8883de204c196;p=thirdparty%2Fcoreutils.git mknod, mkfifo: don't segfault when diagnosing invalid SELinux context Identical to the bug fixed by 72d052896a9092b811961a8f3e6ca5d151a59be5. * src/mkfifo.c (main): Use "scontext", not NULL optarg in diagnostic. * src/mknod.c (main): Likewise. Reported by Cristian Cadar, Daniel Dunbar and Dawson Engler. * tests/mkdir/selinux: Test for the above fixes. * NEWS: Mention the fixes. --- diff --git a/NEWS b/NEWS index 808061c696..e1349066a5 100644 --- a/NEWS +++ b/NEWS @@ -13,6 +13,7 @@ GNU coreutils NEWS -*- outline -*- of libselinux. E.g., ls -l /proc/sys would dereference a NULL pointer. "mkdir -Z x dir" no longer segfaults when diagnosing invalid context "x" + mkfifo and mknod would fail similarly. Now they're fixed. mv would mistakenly unlink a destination file before calling rename, when the destination had two or more hard links. It no longer does that. diff --git a/src/mkfifo.c b/src/mkfifo.c index 95ae214595..6abd1bea9f 100644 --- a/src/mkfifo.c +++ b/src/mkfifo.c @@ -1,5 +1,5 @@ /* mkfifo -- make fifo's (named pipes) - Copyright (C) 90, 91, 1995-2007 Free Software Foundation, Inc. + Copyright (C) 90, 91, 1995-2008 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -116,7 +116,7 @@ main (int argc, char **argv) if (scontext && setfscreatecon (scontext) < 0) error (EXIT_FAILURE, errno, _("failed to set default file creation context to %s"), - quote (optarg)); + quote (scontext)); newmode = (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); if (specified_mode) diff --git a/src/mknod.c b/src/mknod.c index 3b85ae3fe9..8a1718d6b6 100644 --- a/src/mknod.c +++ b/src/mknod.c @@ -1,5 +1,5 @@ /* mknod -- make special files - Copyright (C) 90, 91, 1995-2007 Free Software Foundation, Inc. + Copyright (C) 90, 91, 1995-2008 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -168,7 +168,7 @@ main (int argc, char **argv) if (scontext && setfscreatecon (scontext) < 0) error (EXIT_FAILURE, errno, _("failed to set default file creation context to %s"), - quote (optarg)); + quote (scontext)); /* Only check the first character, to allow mnemonic usage like `mknod /dev/rst0 character 18 0'. */ diff --git a/tests/mkdir/selinux b/tests/mkdir/selinux index 9bfd0909d4..15651ad30d 100755 --- a/tests/mkdir/selinux +++ b/tests/mkdir/selinux @@ -19,6 +19,8 @@ if test "$VERBOSE" = yes; then set -x mkdir --version + mkfifo --version + mknod --version fi . $srcdir/../envvar-check @@ -32,7 +34,20 @@ mkdir -Z $c dir-arg 2> out && fail=1 cat < exp || fail=1 mkdir: failed to set default file creation context to \`$c': Invalid argument EOF +compare out exp || fail=1 + +# Until coreutils-6.10.150, mknod and mkfifo had the same problem: + +mknod -Z $c b p 2> out && fail=1 +cat < exp || fail=1 +mknod: failed to set default file creation context to \`$c': Invalid argument +EOF +compare out exp || fail=1 +mkfifo -Z $c f 2> out && fail=1 +cat < exp || fail=1 +mkfifo: failed to set default file creation context to \`$c': Invalid argument +EOF compare out exp || fail=1 (exit $fail); exit $fail