From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20175 invoked by alias); 24 Sep 2008 17:00:49 -0000 Received: (qmail 20157 invoked by alias); 24 Sep 2008 17:00:48 -0000 X-Spam-Status: No, hits=-1.6 required=5.0 tests=AWL,BAYES_00,KAM_MX,SPF_HELO_PASS X-Spam-Check-By: sourceware.org X-Spam-Checker-Version: SpamAssassin 3.2.4 (2008-01-01) on bastion.fedora.phx.redhat.com X-Spam-Level: Subject: master - GFS2: gfs2_fsck: fix segfault while running special block lists. To: cluster-cvs-relay@redhat.com X-Project: Cluster Project X-Git-Module: cluster.git X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 21204977fb4c3f711fab112fd27c18fea41f1c21 X-Git-Newrev: 24b6bb1ac02ad81507e291161298a4293303ddfb From: Bob Peterson Message-Id: <20080924165942.3D64612042B@lists.fedorahosted.org> Date: Wed, 24 Sep 2008 17:03:00 -0000 X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 Mailing-List: contact cluster-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: cluster-cvs-owner@sourceware.org X-SW-Source: 2008-q3/txt/msg00510.txt.bz2 Gitweb: http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=24b6bb1ac02ad81507e291161298a4293303ddfb Commit: 24b6bb1ac02ad81507e291161298a4293303ddfb Parent: 21204977fb4c3f711fab112fd27c18fea41f1c21 Author: Bob Peterson AuthorDate: Wed Sep 24 11:50:22 2008 -0500 Committer: Bob Peterson CommitterDate: Wed Sep 24 11:59:31 2008 -0500 GFS2: gfs2_fsck: fix segfault while running special block lists. bz 463588 - GFS2: gfs2_fsck segfaults when extended attributes are on the file system The gfs2_fsck tool was running special block lists with osi_list_foreach but then it was sometimes deleting the entries from the lists. Therefore it should have been using osi_list_foreach_safe instead. --- gfs2/fsck/pass1b.c | 4 ++-- gfs2/fsck/pass1c.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/gfs2/fsck/pass1b.c b/gfs2/fsck/pass1b.c index bfe0456..60ccf39 100644 --- a/gfs2/fsck/pass1b.c +++ b/gfs2/fsck/pass1b.c @@ -457,7 +457,7 @@ int pass1b(struct gfs2_sbd *sbp) struct blocks *b; uint64_t i; struct gfs2_block_query q; - osi_list_t *tmp = NULL; + osi_list_t *tmp = NULL, *x; struct metawalk_fxns find_dirents = {0}; find_dirents.check_dentry = &find_dentry; int rc = 0; @@ -493,7 +493,7 @@ int pass1b(struct gfs2_sbd *sbp) (q.block_type == gfs2_inode_chr) || (q.block_type == gfs2_inode_fifo) || (q.block_type == gfs2_inode_sock)) { - osi_list_foreach(tmp, &sbp->dup_blocks.list) { + osi_list_foreach_safe(tmp, &sbp->dup_blocks.list, x) { b = osi_list_entry(tmp, struct blocks, list); if(find_block_ref(sbp, i, b)) { stack; diff --git a/gfs2/fsck/pass1c.c b/gfs2/fsck/pass1c.c index 45d3dec..ec097ad 100644 --- a/gfs2/fsck/pass1c.c +++ b/gfs2/fsck/pass1c.c @@ -226,7 +226,7 @@ int pass1c(struct gfs2_sbd *sbp) struct gfs2_inode *ip = NULL; struct metawalk_fxns pass1c_fxns = { 0 }; int error = 0; - osi_list_t *tmp; + osi_list_t *tmp, *x; struct special_blocks *ea_block; enum update_flags want_updated = not_updated; @@ -237,7 +237,7 @@ int pass1c(struct gfs2_sbd *sbp) pass1c_fxns.private = NULL; log_info("Looking for inodes containing ea blocks...\n"); - osi_list_foreach(tmp, &sbp->eattr_blocks.list) { + osi_list_foreach_safe(tmp, &sbp->eattr_blocks.list, x) { ea_block = osi_list_entry(tmp, struct special_blocks, list); block_no = ea_block->block;