| .. | .. |
|---|
| 91 | 91 | |
|---|
| 92 | 92 | if (buffer_verified(bh)) |
|---|
| 93 | 93 | return 0; |
|---|
| 94 | | - if (EXT4_MB_GRP_IBITMAP_CORRUPT(grp)) |
|---|
| 94 | + if (!grp || EXT4_MB_GRP_IBITMAP_CORRUPT(grp)) |
|---|
| 95 | 95 | return -EFSCORRUPTED; |
|---|
| 96 | 96 | |
|---|
| 97 | 97 | ext4_lock_group(sb, block_group); |
|---|
| .. | .. |
|---|
| 293 | 293 | } |
|---|
| 294 | 294 | if (!(sbi->s_mount_state & EXT4_FC_REPLAY)) { |
|---|
| 295 | 295 | grp = ext4_get_group_info(sb, block_group); |
|---|
| 296 | | - if (unlikely(EXT4_MB_GRP_IBITMAP_CORRUPT(grp))) { |
|---|
| 296 | + if (!grp || unlikely(EXT4_MB_GRP_IBITMAP_CORRUPT(grp))) { |
|---|
| 297 | 297 | fatal = -EFSCORRUPTED; |
|---|
| 298 | 298 | goto error_return; |
|---|
| 299 | 299 | } |
|---|
| .. | .. |
|---|
| 1048 | 1048 | * Skip groups with already-known suspicious inode |
|---|
| 1049 | 1049 | * tables |
|---|
| 1050 | 1050 | */ |
|---|
| 1051 | | - if (EXT4_MB_GRP_IBITMAP_CORRUPT(grp)) |
|---|
| 1051 | + if (!grp || EXT4_MB_GRP_IBITMAP_CORRUPT(grp)) |
|---|
| 1052 | 1052 | goto next_group; |
|---|
| 1053 | 1053 | } |
|---|
| 1054 | 1054 | |
|---|
| .. | .. |
|---|
| 1183 | 1183 | |
|---|
| 1184 | 1184 | if (!(sbi->s_mount_state & EXT4_FC_REPLAY)) { |
|---|
| 1185 | 1185 | grp = ext4_get_group_info(sb, group); |
|---|
| 1186 | + if (!grp) { |
|---|
| 1187 | + err = -EFSCORRUPTED; |
|---|
| 1188 | + goto out; |
|---|
| 1189 | + } |
|---|
| 1186 | 1190 | down_read(&grp->alloc_sem); /* |
|---|
| 1187 | 1191 | * protect vs itable |
|---|
| 1188 | 1192 | * lazyinit |
|---|
| .. | .. |
|---|
| 1526 | 1530 | } |
|---|
| 1527 | 1531 | |
|---|
| 1528 | 1532 | gdp = ext4_get_group_desc(sb, group, &group_desc_bh); |
|---|
| 1529 | | - if (!gdp) |
|---|
| 1533 | + if (!gdp || !grp) |
|---|
| 1530 | 1534 | goto out; |
|---|
| 1531 | 1535 | |
|---|
| 1532 | 1536 | /* |
|---|