From: Gabriel de Perthuis Date: Fri, 6 Sep 2013 17:18:15 +0000 (+0200) Subject: wipefs: Also wipe superblocks with bad checksums X-Git-Tag: v2.24-rc1~279 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=02f3c12a5f71b3e70f8ccbf311b88808756b5d17;p=thirdparty%2Futil-linux.git wipefs: Also wipe superblocks with bad checksums [kzak@redhat.com: - move BLKID_SUBLKS_BADCSUM login to blkid_probe_verify_csum()] Signed-off-by: Gabriel de Perthuis Signed-off-by: Karel Zak --- diff --git a/libblkid/src/blkid.h.in b/libblkid/src/blkid.h.in index 2a7d6b47c3..c140fc6b2c 100644 --- a/libblkid/src/blkid.h.in +++ b/libblkid/src/blkid.h.in @@ -260,6 +260,7 @@ extern int blkid_probe_enable_superblocks(blkid_probe pr, int enable); #define BLKID_SUBLKS_USAGE (1 << 7) /* define USAGE result value */ #define BLKID_SUBLKS_VERSION (1 << 8) /* read FS type from superblock */ #define BLKID_SUBLKS_MAGIC (1 << 9) /* define SBMAGIC and SBMAGIC_OFFSET */ +#define BLKID_SUBLKS_BADCSUM (1 << 10) /* allow a bad checksum */ #define BLKID_SUBLKS_DEFAULT (BLKID_SUBLKS_LABEL | BLKID_SUBLKS_UUID | \ BLKID_SUBLKS_TYPE | BLKID_SUBLKS_SECTYPE) diff --git a/libblkid/src/probe.c b/libblkid/src/probe.c index 6e3ae42dc7..29223a664d 100644 --- a/libblkid/src/probe.c +++ b/libblkid/src/probe.c @@ -1354,15 +1354,19 @@ int blkid_probe_set_magic(blkid_probe pr, blkid_loff_t offset, int blkid_probe_verify_csum(blkid_probe pr, uint64_t csum, uint64_t expected) { if (csum != expected) { + struct blkid_chain *chn = blkid_probe_get_chain(pr); + DBG(LOWPROBE, blkid_debug( "incorrect checksum for type %s," " got %jX, expected %jX", blkid_probe_get_probername(pr), csum, expected)); - return 0; + + if (!(chn->flags & BLKID_SUBLKS_BADCSUM)) + return 0; } - return 1; + return 1; /* checksum accepted */ } /** diff --git a/misc-utils/wipefs.c b/misc-utils/wipefs.c index 2cfad7c1ca..ff2f62fbc5 100644 --- a/misc-utils/wipefs.c +++ b/misc-utils/wipefs.c @@ -248,7 +248,8 @@ new_probe(const char *devname, int mode) blkid_probe_enable_superblocks(pr, 1); blkid_probe_set_superblocks_flags(pr, BLKID_SUBLKS_MAGIC | BLKID_SUBLKS_TYPE | BLKID_SUBLKS_USAGE | - BLKID_SUBLKS_LABEL | BLKID_SUBLKS_UUID); + BLKID_SUBLKS_LABEL | BLKID_SUBLKS_UUID | + BLKID_SUBLKS_BADCSUM); blkid_probe_enable_partitions(pr, 1); blkid_probe_set_partitions_flags(pr, BLKID_PARTS_MAGIC);