summaryrefslogtreecommitdiffstats
path: root/block/partitions/mac.c
diff options
context:
space:
mode:
authorJames Bottomley <James.Bottomley@HansenPartnership.com>2016-01-08 00:51:13 +0100
committerJames Bottomley <James.Bottomley@HansenPartnership.com>2016-01-08 00:51:13 +0100
commitabaee091a18c19ccd86feb1c8374585d82e96777 (patch)
tree01602bae73e1278c3d98dafe1c269049927c58ce /block/partitions/mac.c
parentcxlflash: Enable device id for future IBM CXL adapter (diff)
parentses: fix discovery of SATA devices in SAS enclosures (diff)
downloadlinux-abaee091a18c19ccd86feb1c8374585d82e96777.tar.xz
linux-abaee091a18c19ccd86feb1c8374585d82e96777.zip
Merge branch 'jejb-scsi' into misc
Diffstat (limited to 'block/partitions/mac.c')
-rw-r--r--block/partitions/mac.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/block/partitions/mac.c b/block/partitions/mac.c
index c2c48ec64b27..621317ac4d59 100644
--- a/block/partitions/mac.c
+++ b/block/partitions/mac.c
@@ -32,7 +32,7 @@ int mac_partition(struct parsed_partitions *state)
Sector sect;
unsigned char *data;
int slot, blocks_in_map;
- unsigned secsize;
+ unsigned secsize, datasize, partoffset;
#ifdef CONFIG_PPC_PMAC
int found_root = 0;
int found_root_goodness = 0;
@@ -50,10 +50,14 @@ int mac_partition(struct parsed_partitions *state)
}
secsize = be16_to_cpu(md->block_size);
put_dev_sector(sect);
- data = read_part_sector(state, secsize/512, &sect);
+ datasize = round_down(secsize, 512);
+ data = read_part_sector(state, datasize / 512, &sect);
if (!data)
return -1;
- part = (struct mac_partition *) (data + secsize%512);
+ partoffset = secsize % 512;
+ if (partoffset + sizeof(*part) > datasize)
+ return -1;
+ part = (struct mac_partition *) (data + partoffset);
if (be16_to_cpu(part->signature) != MAC_PARTITION_MAGIC) {
put_dev_sector(sect);
return 0; /* not a MacOS disk */