| Submitter | Tao Ma |
|---|---|
| Date | July 1, 2011, 3:27 p.m. |
| Message ID | <1309534076-2784-1-git-send-email-tm@tao.ma> |
| Download | mbox | patch |
| Permalink | /patch/102915/ |
| State | Accepted |
| Headers | show |
Comments
On Fri, Jul 01, 2011 at 11:27:52PM +0800, Tao Ma wrote: > From: Tao Ma <boyu.mt@taobao.com> > > In 0f0a25b, we adjust 'len' with s_first_data_block - start, but > it could underflow in case blocksize=1K, fstrim_range.len=512 and > fstrim_range.start = 0. In this case, when we run the code: > len -= first_data_blk - start; len will be underflow to -1ULL. > In the end, although we are safe that last_group check later will limit > the trim to the whole volume, but that isn't what the user really want. > > So this patch fix it. It also adds the check for 'start' like ext3 so that > we can break immediately if the start is invalid. > > Cc: Lukas Czerner <lczerner@redhat.com> > Signed-off-by: Tao Ma <boyu.mt@taobao.com> Added to the ext4 tree, thanks. - Ted -- 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/ext4/mballoc.c b/fs/ext4/mballoc.c index 6ed859d..604b706 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -4904,6 +4904,8 @@ int ext4_trim_fs(struct super_block *sb, struct fstrim_range *range) if (unlikely(minlen > EXT4_BLOCKS_PER_GROUP(sb))) return -EINVAL; + if (start + len <= first_data_blk) + goto out; if (start < first_data_blk) { len -= first_data_blk - start; start = first_data_blk; @@ -4952,5 +4954,6 @@ int ext4_trim_fs(struct super_block *sb, struct fstrim_range *range) } range->len = trimmed * sb->s_blocksize; +out: return ret; }