diff options
author | Lukas Czerner <lczerner@redhat.com> | 2012-10-16 09:34:36 +0000 |
---|---|---|
committer | Chris Mason <chris.mason@fusionio.com> | 2012-10-25 15:46:22 -0400 |
commit | e515c18bfef718a7900924d50198d968565dd60e (patch) | |
tree | 0ea52f8adab494952efc725384394b212142461f /fs | |
parent | 5b7ff5b3c4468780b15c6b20cd0567cd9f2aa626 (diff) | |
download | lwn-e515c18bfef718a7900924d50198d968565dd60e.tar.gz lwn-e515c18bfef718a7900924d50198d968565dd60e.zip |
btrfs: Return EINVAL when length to trim is less than FSB
Currently if len argument in btrfs_ioctl_fitrim() is smaller than
one FSB we will continue and finally return 0 bytes discarded.
However if the length to discard is smaller then file system block
we should really return EINVAL.
Signed-off-by: Lukas Czerner <lczerner@redhat.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/btrfs/ioctl.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index f5a2e6c4320a..da518ded34bd 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c @@ -343,7 +343,8 @@ static noinline int btrfs_ioctl_fitrim(struct file *file, void __user *arg) return -EOPNOTSUPP; if (copy_from_user(&range, arg, sizeof(range))) return -EFAULT; - if (range.start > total_bytes) + if (range.start > total_bytes || + range.len < fs_info->sb->s_blocksize) return -EINVAL; range.len = min(range.len, total_bytes - range.start); |