lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Message-ID: <20070508194927.GG24114@agk.fab.redhat.com>
Date:	Tue, 8 May 2007 20:49:27 +0100
From:	Alasdair G Kergon <agk@...hat.com>
To:	Andrew Morton <akpm@...ux-foundation.org>
Cc:	dm-devel@...hat.com, linux-kernel@...r.kernel.org,
	Jonathan Brassow <jbrassow@...hat.com>
Subject: [2.6.22 PATCH 26/26] dm log: fix resume failed log device

From: Jonathan Brassow <jbrassow@...hat.com>

This patch removes the possibility of having uninitialized
log state if the log device has failed.

When a mirror resumes operation, it calls 'resume' on the
logging module.  If disk based logging is being used, the
log device is read to fill in the log state.  If the log
device has failed, we cannot simply return, because this
would leave the in-memory log state uninitialized.  Instead,
we assume all regions are out-of-sync and reset the log
state.  Failure to do this could result in the logging code
reporting a region as in-sync, even though it isn't; which
could result in a corrupted mirror.

Signed-off-by: Jonathan Brassow <jbrassow@...hat.com>
Signed-off-by: Alasdair G Kergon <agk@...hat.com>

---
 drivers/md/dm-log.c |    9 ++++++++-
 1 files changed, 8 insertions(+), 1 deletion(-)

Index: linux-2.6.21/drivers/md/dm-log.c
===================================================================
--- linux-2.6.21.orig/drivers/md/dm-log.c	2007-05-01 19:20:13.000000000 +0100
+++ linux-2.6.21/drivers/md/dm-log.c	2007-05-01 19:20:21.000000000 +0100
@@ -478,7 +478,14 @@ static int disk_resume(struct dirty_log 
 		DMWARN("%s: Failed to read header on mirror log device",
 		       lc->log_dev->name);
 		fail_log_device(lc);
-		return r;
+		/*
+		 * If the log device cannot be read, we must assume
+		 * all regions are out-of-sync.  If we simply return
+		 * here, the state will be uninitialized and could
+		 * lead us to return 'in-sync' status for regions
+		 * that are actually 'out-of-sync'.
+		 */
+		lc->header.nr_regions = 0;
 	}
 
 	/* set or clear any new bits -- device has grown */
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ