mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-12-28 09:06:11 -05:00
nsfs: convert ns_ioctl() to FD_PREPARE()
Link: https://patch.msgid.link/20251123-work-fd-prepare-v4-10-b6efa1706cfd@kernel.org Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
35
fs/nsfs.c
35
fs/nsfs.c
@@ -301,7 +301,6 @@ static long ns_ioctl(struct file *filp, unsigned int ioctl,
|
||||
struct mnt_ns_info kinfo = {};
|
||||
struct mnt_ns_info __user *uinfo = (struct mnt_ns_info __user *)arg;
|
||||
struct path path __free(path_put) = {};
|
||||
struct file *f __free(fput) = NULL;
|
||||
size_t usize = _IOC_SIZE(ioctl);
|
||||
|
||||
if (ns->ns_type != CLONE_NEWNS)
|
||||
@@ -320,28 +319,18 @@ static long ns_ioctl(struct file *filp, unsigned int ioctl,
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
CLASS(get_unused_fd, fd)(O_CLOEXEC);
|
||||
if (fd < 0)
|
||||
return fd;
|
||||
|
||||
f = dentry_open(&path, O_RDONLY, current_cred());
|
||||
if (IS_ERR(f))
|
||||
return PTR_ERR(f);
|
||||
|
||||
if (uinfo) {
|
||||
/*
|
||||
* If @uinfo is passed return all information about the
|
||||
* mount namespace as well.
|
||||
*/
|
||||
ret = copy_ns_info_to_user(to_mnt_ns(ns), uinfo, usize, &kinfo);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Transfer reference of @f to caller's fdtable. */
|
||||
fd_install(fd, no_free_ptr(f));
|
||||
/* File descriptor is live so hand it off to the caller. */
|
||||
return take_fd(fd);
|
||||
FD_PREPARE(fdf, O_CLOEXEC, dentry_open(&path, O_RDONLY, current_cred()));
|
||||
if (fdf.err)
|
||||
return fdf.err;
|
||||
/*
|
||||
* If @uinfo is passed return all information about the
|
||||
* mount namespace as well.
|
||||
*/
|
||||
ret = copy_ns_info_to_user(to_mnt_ns(ns), uinfo, usize, &kinfo);
|
||||
if (ret)
|
||||
return ret;
|
||||
ret = fd_publish(fdf);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
ret = -ENOTTY;
|
||||
|
||||
Reference in New Issue
Block a user