diff options
author | Andy Lutomirski <luto@amacapital.net> | 2014-10-08 12:32:47 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2014-10-30 09:43:05 -0700 |
commit | 28f64f916f0d70e65f6744e41329815c3805f9c5 (patch) | |
tree | dd14c84cac6795559d7af8e7c36e98f23da50b63 | |
parent | 0bd77290116d6bbbeaf173037eddbeea44c66ea1 (diff) | |
download | lwn-28f64f916f0d70e65f6744e41329815c3805f9c5.tar.gz lwn-28f64f916f0d70e65f6744e41329815c3805f9c5.zip |
fs: Add a missing permission check to do_umount
commit a1480dcc3c706e309a88884723446f2e84fedd5b upstream.
Accessing do_remount_sb should require global CAP_SYS_ADMIN, but
only one of the two call sites was appropriately protected.
Fixes CVE-2014-7975.
Signed-off-by: Andy Lutomirski <luto@amacapital.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | fs/namespace.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/namespace.c b/fs/namespace.c index ef42d9bee212..7f67b463a5b4 100644 --- a/fs/namespace.c +++ b/fs/namespace.c @@ -1356,6 +1356,8 @@ static int do_umount(struct mount *mnt, int flags) * Special case for "unmounting" root ... * we just try to remount it readonly. */ + if (!capable(CAP_SYS_ADMIN)) + return -EPERM; down_write(&sb->s_umount); if (!(sb->s_flags & MS_RDONLY)) retval = do_remount_sb(sb, MS_RDONLY, NULL, 0); |