diff --git a/ChangeLog b/ChangeLog index 23c288e..74b9247 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2009-07-28 Vladimir Serbinenko + * partmap/pc.c (pc_partition_map_iterate): Check that boot flags are + valid. + +2009-07-28 Vladimir Serbinenko + * loader/i386/multiboot_helper.S (grub_multiboot_backward_relocator): Clear direction flag before jumping to OS. (grub_multiboot2_real_boot): Likewise. diff --git a/partmap/pc.c b/partmap/pc.c index 6f68ecf..6a2efd2 100644 --- a/partmap/pc.c +++ b/partmap/pc.c @@ -121,6 +121,10 @@ pc_partition_map_iterate (grub_disk_t disk, if (mbr.signature != grub_cpu_to_le16 (GRUB_PC_PARTITION_SIGNATURE)) return grub_error (GRUB_ERR_BAD_PART_TABLE, "no signature"); + for (i = 0; i < 4; i++) + if (mbr.entries[i].flag & 0x7f) + return grub_error (GRUB_ERR_BAD_PART_TABLE, "bad boot flag"); + /* Analyze DOS partitions. */ for (p.index = 0; p.index < 4; p.index++) {