Skip to content

Commit

Permalink
fuse_dev_ioctl(): switch to fdget()
Browse files Browse the repository at this point in the history
Reviewed-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
  • Loading branch information
Al Viro committed Apr 21, 2023
1 parent 2f31fa0 commit 4a892c0
Showing 1 changed file with 21 additions and 20 deletions.
41 changes: 21 additions & 20 deletions fs/fuse/dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -2257,30 +2257,31 @@ static long fuse_dev_ioctl(struct file *file, unsigned int cmd,
int res;
int oldfd;
struct fuse_dev *fud = NULL;
struct fd f;

switch (cmd) {
case FUSE_DEV_IOC_CLONE:
res = -EFAULT;
if (!get_user(oldfd, (__u32 __user *)arg)) {
struct file *old = fget(oldfd);

res = -EINVAL;
if (old) {
/*
* Check against file->f_op because CUSE
* uses the same ioctl handler.
*/
if (old->f_op == file->f_op)
fud = fuse_get_dev(old);

if (fud) {
mutex_lock(&fuse_mutex);
res = fuse_device_clone(fud->fc, file);
mutex_unlock(&fuse_mutex);
}
fput(old);
}
if (get_user(oldfd, (__u32 __user *)arg))
return -EFAULT;

f = fdget(oldfd);
if (!f.file)
return -EINVAL;

/*
* Check against file->f_op because CUSE
* uses the same ioctl handler.
*/
if (f.file->f_op == file->f_op)
fud = fuse_get_dev(f.file);

res = -EINVAL;
if (fud) {
mutex_lock(&fuse_mutex);
res = fuse_device_clone(fud->fc, file);
mutex_unlock(&fuse_mutex);
}
fdput(f);
break;
default:
res = -ENOTTY;
Expand Down

0 comments on commit 4a892c0

Please sign in to comment.