We're reading block address (next_block + b) so the bounds check should
make sure that address is valid.

Add some tests that now pass (and some commented-out ones that don't).

Signed-off-by: Andrew Price <[email protected]>
---
 gfs2/fsck/rgrepair.c |  2 +-
 tests/fsck.at        | 20 ++++++++++++++++++++
 2 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/gfs2/fsck/rgrepair.c b/gfs2/fsck/rgrepair.c
index 2bddd91f..637e5271 100644
--- a/gfs2/fsck/rgrepair.c
+++ b/gfs2/fsck/rgrepair.c
@@ -392,7 +392,7 @@ static uint64_t find_next_rgrp_dist(struct gfs2_sbd *sdp, 
uint64_t blk,
                next_block = prevrgd->ri.ri_addr + rgrp_dist;
                /* Now we account for block rounding done by mkfs.gfs2 */
                for (b = 0; b <= length + GFS2_NBBY; b++) {
-                       if (next_block >= sdp->device.length)
+                       if (next_block + b >= sdp->device.length)
                                break;
                        bh = bread(sdp, next_block + b);
                        gfs2_meta_header_in(&mh, bh->b_data);
diff --git a/tests/fsck.at b/tests/fsck.at
index 727108f4..3b1c5af3 100644
--- a/tests/fsck.at
+++ b/tests/fsck.at
@@ -46,6 +46,26 @@ AT_KEYWORDS(fsck.gfs2 fsck)
 GFS_NUKERG_CHECK([mkfs.gfs2 -O -p lock_nolock $GFS_TGT], [-i 1])
 AT_CLEANUP
 
+AT_SETUP([2G RGs: Fix bad resource group #0])
+AT_KEYWORDS(fsck.gfs2 fsck)
+GFS_NUKERG_CHECK([mkfs.gfs2 -O -p lock_nolock -r 2048 $GFS_TGT], [-r 0])
+AT_CLEANUP
+
+AT_SETUP([2G RGs: Fix bad resource group #1])
+AT_KEYWORDS(fsck.gfs2 fsck)
+GFS_NUKERG_CHECK([mkfs.gfs2 -O -p lock_nolock -r 2048 $GFS_TGT], [-r 1])
+AT_CLEANUP
+
+#AT_SETUP([2G RGs: Fix bad rindex entry #0])
+#AT_KEYWORDS(fsck.gfs2 fsck)
+#GFS_NUKERG_CHECK([mkfs.gfs2 -O -p lock_nolock -r 2048 $GFS_TGT], [-i 0])
+#AT_CLEANUP
+
+#AT_SETUP([2G RGs: Fix bad rindex entry #1])
+#AT_KEYWORDS(fsck.gfs2 fsck)
+#GFS_NUKERG_CHECK([mkfs.gfs2 -O -p lock_nolock -r 2048 $GFS_TGT], [-i 1])
+#AT_CLEANUP
+
 AT_SETUP([Rebuild bad journal])
 AT_KEYWORDS(fsck.gfs2 fsck)
 GFS_TGT_REGEN
-- 
2.30.2

Reply via email to