diff options
| author | Al Viro <viro@zeniv.linux.org.uk> | 2025-08-20 20:16:46 -0400 |
|---|---|---|
| committer | Al Viro <viro@zeniv.linux.org.uk> | 2025-09-02 19:35:56 -0400 |
| commit | 12cdd1af7a6d123fc4690bae1807d8c90c5c5580 (patch) | |
| tree | c61088fb90d6444c1e47876e3ecbcb0e8ca316ea /fs/namespace.c | |
| parent | 4151c3cc58698584e8b0427c40eeda671c3e08c6 (diff) | |
| download | random-12cdd1af7a6d123fc4690bae1807d8c90c5c5580.tar.gz | |
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>
Diffstat (limited to 'fs/namespace.c')
| -rw-r--r-- | fs/namespace.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/fs/namespace.c b/fs/namespace.c index f1460ddd1486ec..a6a7b068770a43 100644 --- a/fs/namespace.c +++ b/fs/namespace.c @@ -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 |
