| Submitter | Lukas Czerner |
|---|---|
| Date | Oct. 11, 2012, 10:28 a.m. |
| Message ID | <1349951318-25190-1-git-send-email-lczerner@redhat.com> |
| Download | mbox | patch |
| Permalink | /patch/190865/ |
| State | Not Applicable |
| Headers | show |
Comments
On Thu 11-10-12 12:28:38, Lukas Czerner wrote: > 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(). Thanks. I've added the patch to my tree. Honza > > Signed-off-by: Lukas Czerner <lczerner@redhat.com> > --- > 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 7320a66..22548f5 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; > -- > 1.7.7.6 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-ext4" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html
Patch
diff --git a/fs/ext3/balloc.c b/fs/ext3/balloc.c index 7320a66..22548f5 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;
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> --- fs/ext3/balloc.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-)