From: John Baublitz Date: Fri, 4 Jun 2021 11:02:39 +0000 (-0400) Subject: libblkid: Add hyphens to UUID string representation in Stratis superblock parsing X-Git-Tag: v2.38-rc1~473 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0842c842184130d83c2f34b8a87cb11e4e5c2852;p=thirdparty%2Futil-linux.git libblkid: Add hyphens to UUID string representation in Stratis superblock parsing [kzak@redhat.com: - small code cleanup] Signed-off-by: Karel Zak --- diff --git a/libblkid/src/superblocks/stratis.c b/libblkid/src/superblocks/stratis.c index 7a889b2d4c..fe4a452774 100644 --- a/libblkid/src/superblocks/stratis.c +++ b/libblkid/src/superblocks/stratis.c @@ -19,13 +19,18 @@ #include "superblocks.h" #include "crc32c.h" +/* Macro to avoid error in struct declaration. */ +#define STRATIS_UUID_LEN 32 +/* Contains 4 hyphens and trailing null byte. */ +const int STRATIS_UUID_STR_LEN = 37; + struct stratis_sb { uint32_t crc32; uint8_t magic[16]; uint64_t sectors; uint8_t reserved[4]; - uint8_t pool_uuid[32]; - uint8_t dev_uuid[32]; + uint8_t pool_uuid[STRATIS_UUID_LEN]; + uint8_t dev_uuid[STRATIS_UUID_LEN]; uint64_t mda_size; uint64_t reserved_size; uint64_t flags; @@ -57,11 +62,29 @@ static int stratis_valid_sb(uint8_t *p) return crc == le32_to_cpu(stratis->crc32); } +/* + * Format UUID string representation to include hyphens given that Stratis stores + * UUIDs without hyphens in the superblock to keep the UUID length a power of 2. + */ +static void stratis_format_uuid(const unsigned char *src_uuid, + unsigned char *dst_uuid) +{ + int i; + + for (i = 0; i < STRATIS_UUID_LEN; i++) { + *dst_uuid++ = *src_uuid++; + if (i == 7 || i == 11 || i == 15 || i == 19) + *dst_uuid ++ = '-'; + } + *dst_uuid = '\0'; +} + static int probe_stratis(blkid_probe pr, const struct blkid_idmag *mag __attribute__((__unused__))) { const struct stratis_sb *stratis = NULL; uint8_t *buf = blkid_probe_get_buffer(pr, 0, SB_AREA_SIZE); + unsigned char uuid[STRATIS_UUID_STR_LEN]; if (!buf) return errno ? -errno : 1; @@ -76,17 +99,16 @@ static int probe_stratis(blkid_probe pr, (buf + SECOND_COPY_OFFSET); } - blkid_probe_strncpy_uuid(pr, stratis->dev_uuid, - sizeof(stratis->dev_uuid)); - blkid_probe_set_value(pr, "POOL_UUID", - stratis->pool_uuid, - sizeof(stratis->pool_uuid)); + stratis_format_uuid(stratis->dev_uuid, uuid); + blkid_probe_strncpy_uuid(pr, uuid, sizeof(uuid)); + + stratis_format_uuid(stratis->pool_uuid, uuid); + blkid_probe_set_value(pr, "POOL_UUID", uuid, sizeof(uuid)); blkid_probe_sprintf_value(pr, "BLOCKDEV_SECTORS", "%" PRIu64, le64_to_cpu(stratis->sectors)); blkid_probe_sprintf_value(pr, "BLOCKDEV_INITTIME", "%" PRIu64, le64_to_cpu(stratis->initialization_time)); - return 0; }