]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
blkid: Add dm-integrity superblock signature
authorMilan Broz <gmazyland@gmail.com>
Tue, 18 Jul 2017 11:08:23 +0000 (13:08 +0200)
committerKarel Zak <kzak@redhat.com>
Tue, 18 Jul 2017 12:43:21 +0000 (14:43 +0200)
Since the kernel version 4.12 there is a new dm-integrity module
that provides an emulated per-sector metadata format for storing data integrity.

This patch adds dm-integrity magic signature to blkid to recognize such
a block device.

Signed-off-by: Milan Broz <gmazyland@gmail.com>
libblkid/src/superblocks/lvm.c
libblkid/src/superblocks/superblocks.c
libblkid/src/superblocks/superblocks.h

index b94d7b5d8b9c95ddbce1a87c983c84843e542c63..17731a8fd8487b6259ca0869248765d3f6f4320d 100644 (file)
@@ -174,6 +174,32 @@ static int probe_verity(blkid_probe pr, const struct blkid_idmag *mag)
        return 0;
 }
 
+struct integrity_sb {
+       uint8_t  magic[8];
+       uint8_t  version;
+       int8_t   log2_interleave_sectors;
+       uint16_t integrity_tag_size;
+       uint32_t journal_sections;
+       uint64_t provided_data_sectors;
+       uint32_t flags;
+       uint8_t  log2_sectors_per_block;
+} __attribute__ ((packed));
+
+static int probe_integrity(blkid_probe pr, const struct blkid_idmag *mag)
+{
+       struct integrity_sb *sb;
+
+       sb = blkid_probe_get_sb(pr, mag, struct integrity_sb);
+       if (sb == NULL)
+               return errno ? -errno : 1;
+
+       if (sb->version != 1)
+               return 1;
+
+       blkid_probe_sprintf_version(pr, "%u", sb->version);
+       return 0;
+}
+
 /* NOTE: the original libblkid uses "lvm2pv" as a name */
 const struct blkid_idinfo lvm2_idinfo =
 {
@@ -224,3 +250,15 @@ const struct blkid_idinfo verity_hash_idinfo =
                { NULL }
        }
 };
+
+const struct blkid_idinfo integrity_idinfo =
+{
+       .name           = "DM_integrity",
+       .usage          = BLKID_USAGE_CRYPTO,
+       .probefunc      = probe_integrity,
+       .magics         =
+       {
+               { .magic = "integrt\0", .len = 8 },
+               { NULL }
+       }
+};
index 341cd8a6f40af5bc10e933bbe65f14b9eaee4d3e..c4ff4a27180cd5cd7486dfc06737c29ff657e9e5 100644 (file)
@@ -109,6 +109,7 @@ static const struct blkid_idinfo *idinfos[] =
        &lvm1_idinfo,
        &snapcow_idinfo,
        &verity_hash_idinfo,
+       &integrity_idinfo,
        &luks_idinfo,
        &vmfs_volume_idinfo,
 
index 79dba1a3cf7b148274369fad258ec6eee18108f1..7e0cec5a7d550c25f893d11b40fb4d7333d8f6bb 100644 (file)
@@ -53,6 +53,7 @@ extern const struct blkid_idinfo lvm2_idinfo;
 extern const struct blkid_idinfo lvm1_idinfo;
 extern const struct blkid_idinfo snapcow_idinfo;
 extern const struct blkid_idinfo verity_hash_idinfo;
+extern const struct blkid_idinfo integrity_idinfo;
 extern const struct blkid_idinfo luks_idinfo;
 extern const struct blkid_idinfo highpoint37x_idinfo;
 extern const struct blkid_idinfo highpoint45x_idinfo;