From e601773d39e173e5ebf1df0d5f78d35d92eb7181 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Thomas=20Wei=C3=9Fschuh?= Date: Wed, 25 Jan 2023 05:40:15 +0000 Subject: [PATCH] libblkid: bcachefs: simplify member field size validation MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit We can avoid messing with pointers by just directly checking the size. Signed-off-by: Thomas Weißschuh --- libblkid/src/superblocks/bcache.c | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/libblkid/src/superblocks/bcache.c b/libblkid/src/superblocks/bcache.c index ec8a7b3f8b..02fc6e3d28 100644 --- a/libblkid/src/superblocks/bcache.c +++ b/libblkid/src/superblocks/bcache.c @@ -146,25 +146,17 @@ static int probe_bcache (blkid_probe pr, const struct blkid_idmag *mag) return BLKID_PROBE_OK; } -static unsigned char *member_field_end( - const struct bcachefs_sb_field_members *field, size_t idx) -{ - return (unsigned char *) &field->members + (sizeof(*field->members) * (idx + 1)); -} - static void probe_bcachefs_sb_members(blkid_probe pr, const struct bcachefs_super_block *bcs, const struct bcachefs_sb_field *field, - uint8_t dev_idx, - const unsigned char *sb_end) + uint8_t dev_idx) { struct bcachefs_sb_field_members *members = (struct bcachefs_sb_field_members *) field; uint64_t sectors = 0; uint8_t i; - if ((unsigned char *) field + BYTES(field) - != member_field_end(members, bcs->nr_devices - 1)) + if (BYTES(field) != offsetof(typeof(*members), members[bcs->nr_devices])) return; blkid_probe_set_uuid_as(pr, members->members[dev_idx].uuid, "UUID_SUB"); @@ -202,7 +194,7 @@ static void probe_bcachefs_sb_fields(blkid_probe pr, const struct bcachefs_super break; if (type == BCACHEFS_SB_FIELD_TYPE_MEMBERS) - probe_bcachefs_sb_members(pr, bcs, field, bcs->dev_idx, sb_end); + probe_bcachefs_sb_members(pr, bcs, field, bcs->dev_idx); field_addr += BYTES(field); } -- 2.47.3