X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=extras%2Fvolume_id%2Flibvolume_id%2Fmac.c;h=78ef9fc803d442ded7ec2ecc38ead41c85026f33;hp=99bcbde6be8ecf34dbecac13f2c9dde309d65e1b;hb=467546b586e9ae29ac168967f5cdaac696cadcfb;hpb=f054627f500450a7aadeaf8a9930354fb268718e diff --git a/extras/volume_id/libvolume_id/mac.c b/extras/volume_id/libvolume_id/mac.c index 99bcbde6b..78ef9fc80 100644 --- a/extras/volume_id/libvolume_id/mac.c +++ b/extras/volume_id/libvolume_id/mac.c @@ -31,7 +31,7 @@ struct mac_driver_desc { uint8_t signature[2]; uint16_t block_size; uint32_t block_count; -} __attribute__((__packed__)); +} PACKED; struct mac_partition { uint8_t signature[2]; @@ -41,7 +41,7 @@ struct mac_partition { uint32_t block_count; uint8_t name[32]; uint8_t type[32]; -} __attribute__((__packed__)); +} PACKED; int volume_id_probe_mac_partition_map(struct volume_id *id, uint64_t off) { @@ -84,14 +84,15 @@ int volume_id_probe_mac_partition_map(struct volume_id *id, uint64_t off) part_count = be32_to_cpu(part->map_count); dbg("expecting %d partition entries", part_count); + if (part_count < 1 || part_count > 256) + return -1; if (id->partitions != NULL) free(id->partitions); - id->partitions = - malloc(part_count * sizeof(struct volume_id_partition)); + id->partitions = malloc(part_count * sizeof(struct volume_id_partition)); if (id->partitions == NULL) return -1; - memset(id->partitions, 0x00, sizeof(struct volume_id_partition)); + memset(id->partitions, 0x00, part_count * sizeof(struct volume_id_partition)); id->partition_count = part_count;