[Top][All Lists]
[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
- FYI: mkdir -Z no-such-context DIR segfaults,
Jim Meyering <=