aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTheodore Ts'o <tytso@mit.edu>2013-01-02 23:31:04 -0500
committerTheodore Ts'o <tytso@mit.edu>2013-01-03 08:38:45 -0500
commit5d3a88fbe9e0291d7d5baa8391cbd78d9cc29767 (patch)
treea9ba2d6f11c5e28b740692f1f989a979a49223a6
parentccfedb17b110d8eec6343a1c3a6a2437fea4dbc2 (diff)
downloade2fsprogs-5d3a88fbe9e0291d7d5baa8391cbd78d9cc29767.tar.gz
e2fsprogs-5d3a88fbe9e0291d7d5baa8391cbd78d9cc29767.tar.xz
e2fsprogs-5d3a88fbe9e0291d7d5baa8391cbd78d9cc29767.zip
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>
-rw-r--r--resize/resize2fs.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/resize/resize2fs.c b/resize/resize2fs.c
index 092cfbda..0407e41b 100644
--- a/resize/resize2fs.c
+++ b/resize/resize2fs.c
@@ -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) &&