summaryrefslogtreecommitdiff
path: root/block/partitions/mac.c
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2015-12-19 13:49:13 +0300
committerThomas Gleixner <tglx@linutronix.de>2015-12-19 13:49:13 +0300
commit0fa85119cd480c1ded7a81ed64f723fe16a15355 (patch)
tree8648434601c5112a1d9ab091ab11507fe88e0962 /block/partitions/mac.c
parentd6ccc3ec95251d8d3276f2900b59cbc468dd74f4 (diff)
parent1eab0e42450c6038e2bb17da438370fe639973f3 (diff)
downloadlinux-0fa85119cd480c1ded7a81ed64f723fe16a15355.tar.xz
Merge branch 'linus' into x86/cleanups
Pull in upstream changes so we can apply depending patches.
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 */