X-Git-Url: https://git.openpandora.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=fs%2Fpartitions%2Fmac.c;h=f51c9305d1e1fb426a64461f3df9a6be1747f80f;hb=72ad0a39cb3603787cca30e395f8cdb7dd911d2b;hp=11f688bd76c53c46f8b99b52ab56043bf9c38c99;hpb=4897313a62cf0b106e9e861bf7350a9cfc0715d0;p=pandora-kernel.git diff --git a/fs/partitions/mac.c b/fs/partitions/mac.c index 11f688bd76c5..f51c9305d1e1 100644 --- a/fs/partitions/mac.c +++ b/fs/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, §); + datasize = round_down(secsize, 512); + data = read_part_sector(state, datasize / 512, §); 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 */