diff options
author | Lukas Czerner <lczerner@redhat.com> | 2012-10-11 12:28:38 +0200 |
---|---|---|
committer | Jan Kara <jack@suse.cz> | 2012-11-19 21:36:12 +0100 |
commit | ae49eeec785025373e28dc24c8351c6bba688d99 (patch) | |
tree | 26d391bf3656e1db4e8e0d97017185c7cc968bff /fs/ext3 | |
parent | 7af11686933726e99af22901d622f9e161404e6b (diff) | |
download | linux-stable-ae49eeec785025373e28dc24c8351c6bba688d99.tar.gz linux-stable-ae49eeec785025373e28dc24c8351c6bba688d99.tar.bz2 linux-stable-ae49eeec785025373e28dc24c8351c6bba688d99.zip |
ext3: Avoid underflow of in ext3_trim_fs()
Currently if len argument in ext3_trim_fs() is smaller than one block,
the 'end' variable underflow. Avoid that by returning EINVAL if len is
smaller than file system block.
Also remove useless unlikely().
Signed-off-by: Lukas Czerner <lczerner@redhat.com>
Signed-off-by: Jan Kara <jack@suse.cz>
Diffstat (limited to 'fs/ext3')
-rw-r--r-- | fs/ext3/balloc.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/fs/ext3/balloc.c b/fs/ext3/balloc.c index 7320a66e958f..22548f56197b 100644 --- a/fs/ext3/balloc.c +++ b/fs/ext3/balloc.c @@ -2101,8 +2101,9 @@ int ext3_trim_fs(struct super_block *sb, struct fstrim_range *range) end = start + (range->len >> sb->s_blocksize_bits) - 1; minlen = range->minlen >> sb->s_blocksize_bits; - if (unlikely(minlen > EXT3_BLOCKS_PER_GROUP(sb)) || - unlikely(start >= max_blks)) + if (minlen > EXT3_BLOCKS_PER_GROUP(sb) || + start >= max_blks || + range->len < sb->s_blocksize) return -EINVAL; if (end >= max_blks) end = max_blks - 1; |