]> git.ipfire.org Git - thirdparty/util-linux.git/blobdiff - libblkid/src/superblocks/drbd.c
libblkid: (drbd) reduce false-positive
[thirdparty/util-linux.git] / libblkid / src / superblocks / drbd.c
index 811098a5d2d23d409259eafb2c4eac7ebcfd9b60..96a216839bcd1c3fbd6570fb2a4b1c820b0eb738 100644 (file)
@@ -23,6 +23,12 @@ enum {
        DRBD_VERSION_09,
 };
 
+/*
+ * drbd/drbd_int.h
+ */
+#define BM_BLOCK_SHIFT 12                       /* 4k per bit */
+#define BM_BLOCK_SIZE   (1<<BM_BLOCK_SHIFT)
+
 /*
  * user/drbdmeta.c
  * We support v08 and v09
@@ -140,6 +146,9 @@ static int probe_drbd_84(blkid_probe pr, const struct blkid_idmag *mag)
        if (!md)
                return errno ? -errno : 1;
 
+       if (be32_to_cpu(read_unaligned_member(md, bm_bytes_per_bit)) != BM_BLOCK_SIZE)
+               return 1;
+
        if (!is_zero_padded(member_ptr(md, padding_start),
                            member_ptr(md, padding_end)))
                return 1;
@@ -165,6 +174,9 @@ static int probe_drbd_90(blkid_probe pr, const struct blkid_idmag *mag)
        if (!md)
                return errno ? -errno : 1;
 
+       if (be32_to_cpu(read_unaligned_member(md, bm_bytes_per_bit)) != BM_BLOCK_SIZE)
+               return 1;
+
        if (!is_zero_padded(member_ptr(md, padding_start),
                            member_ptr(md, padding_end)))
                return 1;