diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2025-05-08 00:09:30 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2025-06-29 18:13:42 -0400 |
commit | ee1ee33ccc1ba0620a77833b2a3e320588701217 (patch) | |
tree | 800216265219171a272833660c4e82567b2a7729 | |
parent | 761de25854424aa23fd1d7b2bef5c7d184690926 (diff) |
do_move_mount(): get rid of 'attached' flag
'attached' serves as a proxy for "source is a subtree of our namespace
and not the entirety of anon namespace"; finish massaging it away.
Reviewed-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
-rw-r--r-- | fs/namespace.c | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/fs/namespace.c b/fs/namespace.c index e5f8fde57c99..7c7cc14da1ee 100644 --- a/fs/namespace.c +++ b/fs/namespace.c @@ -3600,7 +3600,7 @@ static int do_move_mount(struct path *old_path, struct mount *parent; struct mountpoint *mp; int err; - bool attached, beneath = flags & MNT_TREE_BENEATH; + bool beneath = flags & MNT_TREE_BENEATH; mp = do_lock_mount(new_path, beneath); if (IS_ERR(mp)) @@ -3609,7 +3609,6 @@ static int do_move_mount(struct path *old_path, old = real_mount(old_path->mnt); p = real_mount(new_path->mnt); parent = old->mnt_parent; - attached = mnt_has_parent(old); ns = old->mnt_ns; err = -EINVAL; @@ -3622,6 +3621,9 @@ static int do_move_mount(struct path *old_path, /* ... and the target should be in our namespace */ if (!check_mnt(p)) goto out; + /* parent of the source should not be shared */ + if (IS_MNT_SHARED(parent)) + goto out; } else { /* * otherwise the source must be the root of some anon namespace. @@ -3649,11 +3651,6 @@ static int do_move_mount(struct path *old_path, if (d_is_dir(new_path->dentry) != d_is_dir(old_path->dentry)) goto out; - /* - * Don't move a mount residing in a shared parent. - */ - if (attached && IS_MNT_SHARED(parent)) - goto out; if (beneath) { err = can_move_mount_beneath(old_path, new_path, mp); @@ -3686,7 +3683,7 @@ static int do_move_mount(struct path *old_path, out: unlock_mount(mp); if (!err) { - if (attached) { + if (!is_anon_ns(ns)) { mntput_no_expire(parent); } else { /* Make sure we notice when we leak mounts. */ |