This is an automated email from the git hooks/post-receive script.
andyp pushed a commit to branch RHEL7
in repository gfs2-utils.
commit aee013ddaec1aaa396a894107241e9372a7e6bb2
Author: Bob Peterson <rpeterso(a)redhat.com>
Date: Fri Jan 13 14:30:13 2017 -0500
fsck.gfs2: Prevent rgrp segment overflow
Patch 0103dc0 (fsck.gfs2: Detect multiple rgrp grow segments) allowed
fsck to detect multiple gfs2_grow segments that may have placed
resource groups on unexpected boundaries. However, it failed to check
or take appropriate action when too many segments were found.
Instead, it would write past the arrays and corrupt memory. This
patch adds some sanity checks to prevent this from happening.
Signed-off-by: Bob Peterson <rpeterso(a)redhat.com>
---
gfs2/fsck/rgrepair.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/gfs2/fsck/rgrepair.c b/gfs2/fsck/rgrepair.c
index 55057ce..7479458 100644
--- a/gfs2/fsck/rgrepair.c
+++ b/gfs2/fsck/rgrepair.c
@@ -164,6 +164,8 @@ static int find_shortest_rgdist(struct gfs2_sbd *sdp, uint64_t
*dist_array,
/* That last one didn't pan out, so: */
dist_cnt[gsegment]--;
gsegment++;
+ if (gsegment >= MAX_RGSEGMENTS)
+ break;
}
if ((blk - block_last_rg) > (524288 * 2)) {
log_info(_("No rgrps were found within 4GB "
@@ -217,6 +219,8 @@ static int find_shortest_rgdist(struct gfs2_sbd *sdp, uint64_t
*dist_array,
}
} else {
gsegment++;
+ if (gsegment >= MAX_RGSEGMENTS)
+ break;
}
block_last_rg = blk;
if (rgs_sampled < 6)
@@ -224,7 +228,7 @@ static int find_shortest_rgdist(struct gfs2_sbd *sdp, uint64_t
*dist_array,
else
blk += shortest_dist_btwn_rgs - 1;
}
- if (gsegment > MAX_RGSEGMENTS) {
+ if (gsegment >= MAX_RGSEGMENTS) {
log_err(_("Maximum number of rgrp grow segments reached.\n"));
log_err(_("This file system cannot be repaired with fsck.\n"));
gsegment = 0;
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
Show replies by date