mirror of
https://gitee.com/bianbu-linux/linux-6.6
synced 2025-04-24 14:07:52 -04:00
separate copying and locking mount tree on cross-userns copies
Rather than having propagate_mnt() check doing unprivileged copies, lock them before commit_tree(). Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
6d7fbce7da
commit
3bd045cc9c
3 changed files with 38 additions and 29 deletions
|
@ -214,7 +214,6 @@ static struct mount *next_group(struct mount *m, struct mount *origin)
|
|||
}
|
||||
|
||||
/* all accesses are serialized by namespace_sem */
|
||||
static struct user_namespace *user_ns;
|
||||
static struct mount *last_dest, *first_source, *last_source, *dest_master;
|
||||
static struct mountpoint *mp;
|
||||
static struct hlist_head *list;
|
||||
|
@ -260,9 +259,6 @@ static int propagate_one(struct mount *m)
|
|||
type |= CL_MAKE_SHARED;
|
||||
}
|
||||
|
||||
/* Notice when we are propagating across user namespaces */
|
||||
if (m->mnt_ns->user_ns != user_ns)
|
||||
type |= CL_UNPRIVILEGED;
|
||||
child = copy_tree(last_source, last_source->mnt.mnt_root, type);
|
||||
if (IS_ERR(child))
|
||||
return PTR_ERR(child);
|
||||
|
@ -303,7 +299,6 @@ int propagate_mnt(struct mount *dest_mnt, struct mountpoint *dest_mp,
|
|||
* propagate_one(); everything is serialized by namespace_sem,
|
||||
* so globals will do just fine.
|
||||
*/
|
||||
user_ns = current->nsproxy->mnt_ns->user_ns;
|
||||
last_dest = dest_mnt;
|
||||
first_source = source_mnt;
|
||||
last_source = source_mnt;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue