mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-12-29 17:25:38 +00:00
ext2: Verify bitmap and itable block numbers before using them
commit 322a6aff03
upstream.
Verify bitmap block numbers and inode table blocks are sane before using
them for checking bits in the block bitmap.
CC: stable@vger.kernel.org
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
58d83fc160
commit
7afc061dc1
@ -79,26 +79,33 @@ static int ext2_valid_block_bitmap(struct super_block *sb,
|
||||
ext2_grpblk_t next_zero_bit;
|
||||
ext2_fsblk_t bitmap_blk;
|
||||
ext2_fsblk_t group_first_block;
|
||||
ext2_grpblk_t max_bit;
|
||||
|
||||
group_first_block = ext2_group_first_block_no(sb, block_group);
|
||||
max_bit = ext2_group_last_block_no(sb, block_group) - group_first_block;
|
||||
|
||||
/* check whether block bitmap block number is set */
|
||||
bitmap_blk = le32_to_cpu(desc->bg_block_bitmap);
|
||||
offset = bitmap_blk - group_first_block;
|
||||
if (!ext2_test_bit(offset, bh->b_data))
|
||||
if (offset < 0 || offset > max_bit ||
|
||||
!ext2_test_bit(offset, bh->b_data))
|
||||
/* bad block bitmap */
|
||||
goto err_out;
|
||||
|
||||
/* check whether the inode bitmap block number is set */
|
||||
bitmap_blk = le32_to_cpu(desc->bg_inode_bitmap);
|
||||
offset = bitmap_blk - group_first_block;
|
||||
if (!ext2_test_bit(offset, bh->b_data))
|
||||
if (offset < 0 || offset > max_bit ||
|
||||
!ext2_test_bit(offset, bh->b_data))
|
||||
/* bad block bitmap */
|
||||
goto err_out;
|
||||
|
||||
/* check whether the inode table block number is set */
|
||||
bitmap_blk = le32_to_cpu(desc->bg_inode_table);
|
||||
offset = bitmap_blk - group_first_block;
|
||||
if (offset < 0 || offset > max_bit ||
|
||||
offset + EXT2_SB(sb)->s_itb_per_group - 1 > max_bit)
|
||||
goto err_out;
|
||||
next_zero_bit = ext2_find_next_zero_bit(bh->b_data,
|
||||
offset + EXT2_SB(sb)->s_itb_per_group,
|
||||
offset);
|
||||
|
Loading…
Reference in New Issue
Block a user