btrfs: fix error pointer dereference in btrfs_ioctl_rm_dev_v2()
authorDan Carpenter <dan.carpenter@oracle.com>
Tue, 16 Nov 2021 11:50:25 +0000 (14:50 +0300)
committerDavid Sterba <dsterba@suse.com>
Wed, 8 Dec 2021 14:40:19 +0000 (15:40 +0100)
If memdup_user() fails the error handing will crash when it tries
to kfree() an error pointer.  Just return directly because there is
no cleanup required.

Fixes: 1a15eb724aae ("btrfs: use btrfs_get_dev_args_from_path in dev removal ioctls")
Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/ioctl.c

index 012fbfdfbebf29ff91e3dee2d9863e1e7e1d31e8..1b85d98df66be1bc63273b707852abce1777ce53 100644 (file)
@@ -3188,10 +3188,8 @@ static long btrfs_ioctl_rm_dev_v2(struct file *file, void __user *arg)
                return -EPERM;
 
        vol_args = memdup_user(arg, sizeof(*vol_args));
-       if (IS_ERR(vol_args)) {
-               ret = PTR_ERR(vol_args);
-               goto out;
-       }
+       if (IS_ERR(vol_args))
+               return PTR_ERR(vol_args);
 
        if (vol_args->flags & ~BTRFS_DEVICE_REMOVE_ARGS_MASK) {
                ret = -EOPNOTSUPP;