bug-coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

FYI: mkdir -Z no-such-context DIR segfaults


From: Jim Meyering
Subject: FYI: mkdir -Z no-such-context DIR segfaults
Date: Wed, 26 Mar 2008 01:15:31 +0100

FYI, Daniel Dunbar, Cristian Cadar and Dawson Engler
discovered that "mkdir -Z no-such-context DIR" segfaults.
Here's the fix and a new test:

>From 72d052896a9092b811961a8f3e6ca5d151a59be5 Mon Sep 17 00:00:00 2001
From: Daniel Dunbar <address@hidden>
Date: Wed, 26 Mar 2008 00:51:47 +0100
Subject: [PATCH] mkdir -Z x d: don't segfault when diagnosing invalid context 
"x" (tiny change)

* src/mkdir.c (main): Use "scontext", not NULL optarg in diagnostic.
Reported by Cristian Cadar, Daniel Dunbar and Dawson Engler.
* NEWS: Mention the bug fix.

Signed-off-by: Jim Meyering <address@hidden>
---
 NEWS        |    2 ++
 src/mkdir.c |    2 +-
 2 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/NEWS b/NEWS
index 43d80ca..5250ed8 100644
--- a/NEWS
+++ b/NEWS
@@ -12,6 +12,8 @@ GNU coreutils NEWS                                    -*- 
outline -*-
   ls no longer segfaults on files in /proc when linked with an older version
   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"
+
   mv would mistakenly unlink a destination file before calling rename,
   when the destination had two or more hard links.  It no longer does that.
   [bug introduced in coreutils-5.3.0]
diff --git a/src/mkdir.c b/src/mkdir.c
index 3952594..d3d76ad 100644
--- a/src/mkdir.c
+++ b/src/mkdir.c
@@ -192,7 +192,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));

   if (options.make_ancestor_function || specified_mode)
     {
--
1.5.5.rc0.22.g467c


>From 0e5381fe9357d89806dded3e8538dcb932ae3cac Mon Sep 17 00:00:00 2001
From: Jim Meyering <address@hidden>
Date: Wed, 26 Mar 2008 01:11:16 +0100
Subject: [PATCH] Test for mkdir bug fix.

* tests/mkdir/selinux: New file: test for today's fix.
* tests/mkdir/Makefile.am (TESTS): Add selinux.

Signed-off-by: Jim Meyering <address@hidden>
---
 tests/mkdir/Makefile.am |    1 +
 tests/mkdir/selinux     |   38 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 39 insertions(+), 0 deletions(-)
 create mode 100755 tests/mkdir/selinux

diff --git a/tests/mkdir/Makefile.am b/tests/mkdir/Makefile.am
index 617abcf..ee8bfb8 100644
--- a/tests/mkdir/Makefile.am
+++ b/tests/mkdir/Makefile.am
@@ -1,5 +1,6 @@
 ## Process this file with automake to produce Makefile.in -*-Makefile-*-.
 TESTS = \
+  selinux \
   p-1 \
   p-2 \
   p-3 \
diff --git a/tests/mkdir/selinux b/tests/mkdir/selinux
new file mode 100755
index 0000000..9bfd090
--- /dev/null
+++ b/tests/mkdir/selinux
@@ -0,0 +1,38 @@
+#!/bin/sh
+# ensure that an invalid context doesn't cause a segfault
+
+# Copyright (C) 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
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+if test "$VERBOSE" = yes; then
+  set -x
+  mkdir --version
+fi
+
+. $srcdir/../envvar-check
+. $srcdir/../lang-default
+. $srcdir/../test-lib.sh
+
+c=invalid-selinux-context
+
+fail=0
+mkdir -Z $c dir-arg 2> out && fail=1
+cat <<EOF > exp || fail=1
+mkdir: failed to set default file creation context to \`$c': Invalid argument
+EOF
+
+compare out exp || fail=1
+
+(exit $fail); exit $fail
--
1.5.5.rc0.22.g467c




reply via email to

[Prev in Thread] Current Thread [Next in Thread]