Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bc6155d1 authored by Eric W. Biederman's avatar Eric W. Biederman
Browse files

fs: Allow superblock owner to access do_remount_sb()



Superblock level remounts are currently restricted to global
CAP_SYS_ADMIN, as is the path for changing the root mount to
read only on umount. Loosen both of these permission checks to
also allow CAP_SYS_ADMIN in any namespace which is privileged
towards the userns which originally mounted the filesystem.

Signed-off-by: default avatarSeth Forshee <seth.forshee@canonical.com>
Acked-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
Acked-by: default avatarSerge Hallyn <serge@hallyn.com>
Acked-by: default avatarChristian Brauner <christian@brauner.io>
Signed-off-by: default avatarEric W. Biederman <ebiederm@xmission.com>
parent 0031181c
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1590,7 +1590,7 @@ 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))
		if (!ns_capable(sb->s_user_ns, CAP_SYS_ADMIN))
			return -EPERM;
		down_write(&sb->s_umount);
		if (!sb_rdonly(sb))
@@ -2333,7 +2333,7 @@ static int do_remount(struct path *path, int ms_flags, int sb_flags,
	down_write(&sb->s_umount);
	if (ms_flags & MS_BIND)
		err = change_mount_flags(path->mnt, ms_flags);
	else if (!capable(CAP_SYS_ADMIN))
	else if (!ns_capable(sb->s_user_ns, CAP_SYS_ADMIN))
		err = -EPERM;
	else
		err = do_remount_sb(sb, sb_flags, data, 0);