|
@@ -2348,6 +2348,7 @@ static int ext4_check_descriptors(struct super_block *sb,
|
|
|
struct ext4_sb_info *sbi = EXT4_SB(sb);
|
|
|
ext4_fsblk_t first_block = le32_to_cpu(sbi->s_es->s_first_data_block);
|
|
|
ext4_fsblk_t last_block;
|
|
|
+ ext4_fsblk_t last_bg_block = sb_block + ext4_bg_num_gdb(sb, 0) + 1;
|
|
|
ext4_fsblk_t block_bitmap;
|
|
|
ext4_fsblk_t inode_bitmap;
|
|
|
ext4_fsblk_t inode_table;
|
|
@@ -2380,6 +2381,14 @@ static int ext4_check_descriptors(struct super_block *sb,
|
|
|
if (!sb_rdonly(sb))
|
|
|
return 0;
|
|
|
}
|
|
|
+ if (block_bitmap >= sb_block + 1 &&
|
|
|
+ block_bitmap <= last_bg_block) {
|
|
|
+ ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
|
|
|
+ "Block bitmap for group %u overlaps "
|
|
|
+ "block group descriptors", i);
|
|
|
+ if (!sb_rdonly(sb))
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
if (block_bitmap < first_block || block_bitmap > last_block) {
|
|
|
ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
|
|
|
"Block bitmap for group %u not in group "
|
|
@@ -2394,6 +2403,14 @@ static int ext4_check_descriptors(struct super_block *sb,
|
|
|
if (!sb_rdonly(sb))
|
|
|
return 0;
|
|
|
}
|
|
|
+ if (inode_bitmap >= sb_block + 1 &&
|
|
|
+ inode_bitmap <= last_bg_block) {
|
|
|
+ ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
|
|
|
+ "Inode bitmap for group %u overlaps "
|
|
|
+ "block group descriptors", i);
|
|
|
+ if (!sb_rdonly(sb))
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
if (inode_bitmap < first_block || inode_bitmap > last_block) {
|
|
|
ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
|
|
|
"Inode bitmap for group %u not in group "
|
|
@@ -2408,6 +2425,14 @@ static int ext4_check_descriptors(struct super_block *sb,
|
|
|
if (!sb_rdonly(sb))
|
|
|
return 0;
|
|
|
}
|
|
|
+ if (inode_table >= sb_block + 1 &&
|
|
|
+ inode_table <= last_bg_block) {
|
|
|
+ ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
|
|
|
+ "Inode table for group %u overlaps "
|
|
|
+ "block group descriptors", i);
|
|
|
+ if (!sb_rdonly(sb))
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
if (inode_table < first_block ||
|
|
|
inode_table + sbi->s_itb_per_group - 1 > last_block) {
|
|
|
ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
|