提交 7f78d4cd 编写于 作者: A Al Viro

Push BKL down beyond VFS-only parts of do_mount()

Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
上级 6fac98dd
...@@ -1515,8 +1515,11 @@ static int do_remount(struct path *path, int flags, int mnt_flags, ...@@ -1515,8 +1515,11 @@ static int do_remount(struct path *path, int flags, int mnt_flags,
down_write(&sb->s_umount); down_write(&sb->s_umount);
if (flags & MS_BIND) if (flags & MS_BIND)
err = change_mount_flags(path->mnt, flags); err = change_mount_flags(path->mnt, flags);
else else {
lock_kernel();
err = do_remount_sb(sb, flags, data, 0); err = do_remount_sb(sb, flags, data, 0);
unlock_kernel();
}
if (!err) if (!err)
path->mnt->mnt_flags = mnt_flags; path->mnt->mnt_flags = mnt_flags;
up_write(&sb->s_umount); up_write(&sb->s_umount);
...@@ -1630,7 +1633,9 @@ static int do_new_mount(struct path *path, char *type, int flags, ...@@ -1630,7 +1633,9 @@ static int do_new_mount(struct path *path, char *type, int flags,
if (!capable(CAP_SYS_ADMIN)) if (!capable(CAP_SYS_ADMIN))
return -EPERM; return -EPERM;
lock_kernel();
mnt = do_kern_mount(type, flags, name, data); mnt = do_kern_mount(type, flags, name, data);
unlock_kernel();
if (IS_ERR(mnt)) if (IS_ERR(mnt))
return PTR_ERR(mnt); return PTR_ERR(mnt);
...@@ -1921,7 +1926,6 @@ long do_mount(char *dev_name, char *dir_name, char *type_page, ...@@ -1921,7 +1926,6 @@ long do_mount(char *dev_name, char *dir_name, char *type_page,
if (retval) if (retval)
goto dput_out; goto dput_out;
lock_kernel();
if (flags & MS_REMOUNT) if (flags & MS_REMOUNT)
retval = do_remount(&path, flags & ~MS_REMOUNT, mnt_flags, retval = do_remount(&path, flags & ~MS_REMOUNT, mnt_flags,
data_page); data_page);
...@@ -1934,7 +1938,6 @@ long do_mount(char *dev_name, char *dir_name, char *type_page, ...@@ -1934,7 +1938,6 @@ long do_mount(char *dev_name, char *dir_name, char *type_page,
else else
retval = do_new_mount(&path, type_page, flags, mnt_flags, retval = do_new_mount(&path, type_page, flags, mnt_flags,
dev_name, data_page); dev_name, data_page);
unlock_kernel();
dput_out: dput_out:
path_put(&path); path_put(&path);
return retval; return retval;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册