- Bug 426401: CVE-2007-6285 autofs default doesn't set nodev in /net

[rawhide]
- use mount option "nodev" for "-hosts" map unless "dev" is explicily
    specified.
This commit is contained in:
Ian Kent 2007-12-21 10:58:55 +00:00
parent 8a14e5403a
commit 41a12c29f1
2 changed files with 84 additions and 1 deletions

View File

@ -0,0 +1,77 @@
diff --git a/man/auto.master.5.in b/man/auto.master.5.in
index 56aaa5d..49a711c 100644
--- a/man/auto.master.5.in
+++ b/man/auto.master.5.in
@@ -196,8 +196,8 @@ For example, with an entry in the master map of
accessing /net/myserver will mount exports from myserver on directories below
/net/myserver.
.P
-NOTE: mounts done from a hosts map will be mounted with the "nosuid" option
-unless the "suid" option is explicitly given in the master map entry.
+NOTE: mounts done from a hosts map will be mounted with the "nosuid" and "nodev" options
+unless the options "suid" and "dev" are explicitly given in the master map entry.
.SH LDAP MAPS
If the map type \fBldap\fP is specified the mapname is of the form
\fB[//servername/]dn\fP, where the optional \fBservername\fP is
diff --git a/modules/parse_sun.c b/modules/parse_sun.c
index a97a7aa..4241f16 100644
--- a/modules/parse_sun.c
+++ b/modules/parse_sun.c
@@ -589,8 +589,12 @@ static int sun_mount(struct autofs_point *ap, const char *root,
type = ap->entry->maps->type;
if (type && !strcmp(type, "hosts")) {
if (options) {
- if (!strstr(options, "suid")) {
- char *tmp = alloca(strlen(options) + 8);
+ int len = strlen(options);
+ int suid = strstr(options, "suid") ? 0 : 7;
+ int dev = strstr(options, "dev") ? 0 : 6;
+
+ if (suid || dev) {
+ char *tmp = alloca(len + suid + dev + 1);
if (!tmp) {
error(ap->logopt, MODPREFIX
"alloca failed for options");
@@ -598,12 +602,16 @@ static int sun_mount(struct autofs_point *ap, const char *root,
return -1;
return 1;
}
+
strcpy(tmp, options);
- strcat(tmp, ",nosuid");
+ if (suid)
+ strcat(tmp, ",nosuid");
+ if (dev)
+ strcat(tmp, ",nodev");
options = tmp;
}
} else {
- char *tmp = alloca(7);
+ char *tmp = alloca(13);
if (!tmp) {
error(ap->logopt,
MODPREFIX "alloca failed for options");
@@ -611,7 +619,7 @@ static int sun_mount(struct autofs_point *ap, const char *root,
return -1;
return 1;
}
- strcpy(tmp, "nosuid");
+ strcpy(tmp, "nosuid,nodev");
options = tmp;
}
}
diff --git a/samples/auto.master b/samples/auto.master
index 4995976..9fe5609 100644
--- a/samples/auto.master
+++ b/samples/auto.master
@@ -7,8 +7,8 @@
/misc /etc/auto.misc
#
# NOTE: mounts done from a hosts map will be mounted with the
-# "nosuid" option unless the "suid" option is explicitly
-# given.
+# "nosuid" and "nodev" options unless the "suid" and "dev"
+# options are explicitly given.
#
/net -hosts
#

View File

@ -4,7 +4,7 @@
Summary: A tool for automatically mounting and unmounting filesystems
Name: autofs
Version: 5.0.2
Release: 23
Release: 25
Epoch: 1
License: GPL
Group: System Environment/Daemons
@ -57,6 +57,7 @@ Patch43: autofs-5.0.2-dynamic-logging-non-sasl.patch
Patch44: autofs-5.0.2-singleton-host-list.patch
Patch45: autofs-5.0.2-hosts-nosuid-default.patch
Patch46: autofs-5.0.2-fd-close-on-exec-mutex.patch
Patch47: autofs-5.0.2-hosts-nodev-default.patch
Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: autoconf, hesiod-devel, openldap-devel, bison, flex, libxml2-devel, cyrus-sasl-devel, openssl-devel module-init-tools util-linux nfs-utils e2fsprogs
Conflicts: kernel < 2.6.17
@ -145,6 +146,7 @@ echo %{version}-%{release} > .version
%patch44 -p1
%patch45 -p1
%patch46 -p1
%patch47 -p1
%build
#CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=/usr --libdir=%{_libdir}
@ -197,6 +199,10 @@ fi
%{_libdir}/autofs/
%changelog
* Fri Dec 21 2007 Ian Kent <ikent@redhat.com> - 5.0.2-25
- Bug 426401: CVE-2007-6285 autofs default doesn't set nodev in /net [rawhide]
- use mount option "nodev" for "-hosts" map unless "dev" is explicily specified.
* Tue Dec 18 2007 Ian Kent <ikent@redhat.com> - 5.0.2-23
- Bug 397591 SELinux is preventing /sbin/rpc.statd (rpcd_t) "search" to <Unknown> (sysctl_fs_t).
- prevent fork between fd open and setting of FD_CLOEXEC.