diff options
author | Ilya Dryomov <idryomov@gmail.com> | 2013-10-10 21:39:28 +0400 |
---|---|---|
committer | Chris Mason <chris.mason@fusionio.com> | 2013-11-12 07:00:37 +0400 |
commit | adfa97cbdfe376b02bb3e1ea3166958fec35ca6f (patch) | |
tree | 4f22a72f87288cbd0299ea0da0b51b5f796cb666 /fs | |
parent | f747cab7b75ba298df3ac234de9f1655957786cc (diff) | |
download | linux-adfa97cbdfe376b02bb3e1ea3166958fec35ca6f.tar.xz |
Btrfs: don't leak ioctl args in btrfs_ioctl_dev_replace
struct btrfs_ioctl_dev_replace_args memory is leaked if replace is
requested on a read-only filesystem. Fix it.
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/btrfs/ioctl.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index 98d4ffef961e..08ac53c5f78d 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c @@ -3667,9 +3667,10 @@ static long btrfs_ioctl_dev_replace(struct btrfs_root *root, void __user *arg) switch (p->cmd) { case BTRFS_IOCTL_DEV_REPLACE_CMD_START: - if (root->fs_info->sb->s_flags & MS_RDONLY) - return -EROFS; - + if (root->fs_info->sb->s_flags & MS_RDONLY) { + ret = -EROFS; + goto out; + } if (atomic_xchg( &root->fs_info->mutually_exclusive_operation_running, 1)) { @@ -3695,7 +3696,7 @@ static long btrfs_ioctl_dev_replace(struct btrfs_root *root, void __user *arg) if (copy_to_user(arg, p, sizeof(*p))) ret = -EFAULT; - +out: kfree(p); return ret; } |