]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
umount: Disallow unprivileged mount force
authorEric W. Biederman <ebiederm@xmission.com>
Sat, 4 Oct 2014 21:44:03 +0000 (14:44 -0700)
committerLuis Henriques <luis.henriques@canonical.com>
Mon, 12 Jan 2015 15:44:14 +0000 (15:44 +0000)
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: Luis Henriques <luis.henriques@canonical.com>
fs/namespace.c

index e718c7a0437ab6b465ea3cead29e990e02bc2d46..67645ea593f2bd672644cffad8cf309196ed763d 100644 (file)
@@ -1448,6 +1448,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: