summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@xmission.com>2014-10-04 14:44:03 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2015-01-08 10:27:47 -0800
commite4b249287fbf00f56d5aeae5b8c25e92e58028ef (patch)
tree1cafdc5e7b4639a2bad04d2e7f78dcc5cdfe875e
parent6c5307b22f949f380bfa5ee2660f1a64ddeb1671 (diff)
umount: Disallow unprivileged mount force
commit b2f5d4dc38e034eecb7987e513255265ff9aa1cf upstream. Forced unmount affects not just the mount namespace but the underlying superblock as well. Restrict forced unmount to the global root user for now. Otherwise it becomes possible a user in a less privileged mount namespace to force the shutdown of a superblock of a filesystem in a more privileged mount namespace, allowing a DOS attack on root. Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--fs/namespace.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/namespace.c b/fs/namespace.c
index 743d0f37fb2d..37f4c501fbea 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -1432,6 +1432,9 @@ SYSCALL_DEFINE2(umount, char __user *, name, int, flags)
goto dput_and_out;
if (mnt->mnt.mnt_flags & MNT_LOCKED)
goto dput_and_out;
+ retval = -EPERM;
+ if (flags & MNT_FORCE && !capable(CAP_SYS_ADMIN))
+ goto dput_and_out;
retval = do_umount(mnt, flags);
dput_and_out: