Skip to content

Commit

Permalink
fs/fuse: fix ioctl type confusion
Browse files Browse the repository at this point in the history
fuse_dev_ioctl() performed fuse_get_dev() on a user-supplied fd,
leading to a type confusion issue. Fix it by checking file->f_op.

Signed-off-by: Jann Horn <jann@thejh.net>
Acked-by: Miklos Szeredi <miklos@szeredi.hu>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
thejh authored and torvalds committed Aug 16, 2015
1 parent 1efdb5f commit 8ed1f0e
Showing 1 changed file with 9 additions and 1 deletion.
10 changes: 9 additions & 1 deletion fs/fuse/dev.c
Expand Up @@ -2246,7 +2246,15 @@ static long fuse_dev_ioctl(struct file *file, unsigned int cmd,

err = -EINVAL;
if (old) {
struct fuse_dev *fud = fuse_get_dev(old);
struct fuse_dev *fud = NULL;

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

if (fud) {
mutex_lock(&fuse_mutex);
Expand Down

0 comments on commit 8ed1f0e

Please sign in to comment.