]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libblkid: bcachefs: simplify member field size validation
authorThomas Weißschuh <thomas@t-8ch.de>
Wed, 25 Jan 2023 05:40:15 +0000 (05:40 +0000)
committerThomas Weißschuh <thomas@t-8ch.de>
Wed, 25 Jan 2023 15:38:23 +0000 (15:38 +0000)
We can avoid messing with pointers by just directly checking the size.

Signed-off-by: Thomas Weißschuh <thomas@t-8ch.de>
libblkid/src/superblocks/bcache.c

index ec8a7b3f8ba73530b102bc6d3b991dee725ca1ed..02fc6e3d28b5419ea4a83989a7f6b2abd90786c8 100644 (file)
@@ -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);
        }