mirror of https://github.com/vitalif/e2fsprogs
resize2fs: fix 32-bit overflow issue which can corrupt 64-bit file systems
Fix a 32-bit overflow bug caused by a missing blk64_t cast which can cause the block bitmap to get corrupted when doing an off-line resize of a 64-bit file system. This problem can be reproduced as follows: rm -f foo.img; touch foo.img truncate -s 8T foo.img mke2fs -F -t ext4 -O 64bit foo.img e2fsck -f foo.img truncate -s 21T foo.img resize2fs foo.img e2fsck -fy foo.img Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>debian-1.42.9
parent
ccfedb17b1
commit
5d3a88fbe9
|
@ -197,8 +197,7 @@ static void fix_uninit_block_bitmaps(ext2_filsys fs)
|
|||
if (!(ext2fs_bg_flags_test(fs, g, EXT2_BG_BLOCK_UNINIT)))
|
||||
continue;
|
||||
|
||||
blk = (g * fs->super->s_blocks_per_group) +
|
||||
fs->super->s_first_data_block;
|
||||
blk = ext2fs_group_first_block2(fs, g);
|
||||
|
||||
ext2fs_super_and_bgd_loc2(fs, g, &super_blk,
|
||||
&old_desc_blk, &new_desc_blk, 0);
|
||||
|
@ -846,8 +845,7 @@ static errcode_t blocks_to_move(ext2_resize_t rfs)
|
|||
* The block bitmap is uninitialized, so skip
|
||||
* to the next block group.
|
||||
*/
|
||||
blk = ((g+1) * fs->super->s_blocks_per_group) +
|
||||
fs->super->s_first_data_block - 1;
|
||||
blk = ext2fs_group_first_block2(fs, g+1) - 1;
|
||||
continue;
|
||||
}
|
||||
if (ext2fs_test_block_bitmap2(old_fs->block_map, blk) &&
|
||||
|
|
Loading…
Reference in New Issue