do_change_type(): use guards

clean fit; namespace_excl to modify propagation graph

Reviewed-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
Al Viro
2025-09-02 19:35:56 -04:00
parent 4151c3cc58
commit 12cdd1af7a
+6 -7
View File
@@ -2899,7 +2899,7 @@ static int do_change_type(struct path *path, int ms_flags)
struct mount *mnt = real_mount(path->mnt);
int recurse = ms_flags & MS_REC;
int type;
int err = 0;
int err;
if (!path_mounted(path))
return -EINVAL;
@@ -2908,23 +2908,22 @@ static int do_change_type(struct path *path, int ms_flags)
if (!type)
return -EINVAL;
namespace_lock();
guard(namespace_excl)();
err = may_change_propagation(mnt);
if (err)
goto out_unlock;
return err;
if (type == MS_SHARED) {
err = invent_group_ids(mnt, recurse);
if (err)
goto out_unlock;
return err;
}
for (m = mnt; m; m = (recurse ? next_mnt(m, mnt) : NULL))
change_mnt_propagation(m, type);
out_unlock:
namespace_unlock();
return err;
return 0;
}
/* may_copy_tree() - check if a mount tree can be copied