Gitweb: http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=dbb... Commit: dbbb859091a700db2fc4dcd4e4df4a0dfdaa84b1 Parent: f09ef2ba0c4f4e6fb7a28138c36e2c4c38816bf5 Author: Bob Peterson rpeterso@redhat.com AuthorDate: Thu Feb 3 09:52:32 2011 -0600 Committer: Bob Peterson rpeterso@redhat.com CommitterDate: Thu Feb 3 09:52:32 2011 -0600
gfs2_edit: Fix bitmap editing function
The bitmap editing function wasn't reading in the rgrp, so that it would fail with a NULL pointer dereference.
rhbz#656371 --- gfs2/edit/hexedit.c | 33 +++++++++++++++++++-------------- 1 files changed, 19 insertions(+), 14 deletions(-)
diff --git a/gfs2/edit/hexedit.c b/gfs2/edit/hexedit.c index c4249e1..6604376 100644 --- a/gfs2/edit/hexedit.c +++ b/gfs2/edit/hexedit.c @@ -2572,23 +2572,28 @@ static void find_change_block_alloc(int *newval) if (ablock == sbd.sb_addr) printf("3 (the superblock is not in the bitmap)\n"); else { - if (newval) { - if (gfs2_set_bitmap(&sbd, ablock, *newval)) - printf("-1 (block invalid or part of an rgrp).\n"); - else - printf("%d\n", *newval); - } else { - rgd = gfs2_blk2rgrpd(&sbd, ablock); - if (rgd) { - gfs2_rgrp_read(&sbd, rgd); + rgd = gfs2_blk2rgrpd(&sbd, ablock); + if (rgd) { + gfs2_rgrp_read(&sbd, rgd); + if (newval) { + if (gfs2_set_bitmap(&sbd, ablock, *newval)) + printf("-1 (block invalid or part of an rgrp).\n"); + else + printf("%d\n", *newval); + } else { type = gfs2_get_bitmap(&sbd, ablock, rgd); - gfs2_rgrp_relse(rgd); + if (type < 0) { + printf("-1 (block invalid or part of " + "an rgrp).\n"); + exit(-1); + } printf("%d (%s)\n", type, allocdesc[gfs1][type]); - } else { - gfs2_rgrp_free(&sbd.rglist); - printf("-1 (block invalid or part of an rgrp).\n"); - exit(-1); } + gfs2_rgrp_relse(rgd); + } else { + gfs2_rgrp_free(&sbd.rglist); + printf("-1 (block invalid or part of an rgrp).\n"); + exit(-1); } } gfs2_rgrp_free(&sbd.rglist);
cluster-commits@lists.fedorahosted.org