diff options
author | Christian Brauner <brauner@kernel.org> | 2024-06-07 16:55:36 +0200 |
---|---|---|
committer | Christian Brauner <brauner@kernel.org> | 2024-06-28 09:53:29 +0200 |
commit | 17e70161281bb66316e94e63a15d1a8498bf6f01 (patch) | |
tree | 20774dc6ebca2e6fd298ee39dea28868413e45bb | |
parent | fs: don't copy to userspace under namespace semaphore (diff) | |
download | linux-17e70161281bb66316e94e63a15d1a8498bf6f01.tar.xz linux-17e70161281bb66316e94e63a15d1a8498bf6f01.zip |
fs: simplify error handling
Rely on cleanup helper and simplify error handling
Link: https://lore.kernel.org/r/20240607-vfs-listmount-reverse-v1-3-7877a2bfa5e5@kernel.org
Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: Christian Brauner <brauner@kernel.org>
-rw-r--r-- | fs/namespace.c | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/fs/namespace.c b/fs/namespace.c index 57311ecbdf5a..98671cd89511 100644 --- a/fs/namespace.c +++ b/fs/namespace.c @@ -5050,7 +5050,7 @@ static struct mount *listmnt_next(struct mount *curr) static ssize_t do_listmount(u64 mnt_parent_id, u64 last_mnt_id, u64 *mnt_ids, size_t nr_mnt_ids) { - struct path root; + struct path root __free(path_put) = {}; struct mnt_namespace *ns = current->nsproxy->mnt_ns; struct path orig; struct mount *r, *first; @@ -5063,10 +5063,8 @@ static ssize_t do_listmount(u64 mnt_parent_id, u64 last_mnt_id, u64 *mnt_ids, orig = root; } else { orig.mnt = lookup_mnt_in_ns(mnt_parent_id, ns); - if (!orig.mnt) { - ret = -ENOENT; - goto err; - } + if (!orig.mnt) + return -ENOENT; orig.dentry = orig.mnt->mnt_root; } @@ -5075,14 +5073,12 @@ static ssize_t do_listmount(u64 mnt_parent_id, u64 last_mnt_id, u64 *mnt_ids, * mounts to show users. */ if (!is_path_reachable(real_mount(orig.mnt), orig.dentry, &root) && - !ns_capable_noaudit(&init_user_ns, CAP_SYS_ADMIN)) { - ret = -EPERM; - goto err; - } + !ns_capable_noaudit(&init_user_ns, CAP_SYS_ADMIN)) + return -EPERM; ret = security_sb_statfs(orig.dentry); if (ret) - goto err; + return ret; if (!last_mnt_id) first = node_to_mount(rb_first(&ns->mounts)); @@ -5099,8 +5095,6 @@ static ssize_t do_listmount(u64 mnt_parent_id, u64 last_mnt_id, u64 *mnt_ids, nr_mnt_ids--; ret++; } -err: - path_put(&root); return ret; } |