diff --git a/ChangeLog b/ChangeLog index 752bde8..0d42f3c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2009-07-26 Vladimir Serbinenko + + * partmap/pc.c (pc_partition_map_iterate): Check that boot flags are + valid. + 2009-07-25 Felix Zielcke * kern/file.c (grub_file_open): Revert to previous check with diff --git a/partmap/pc.c b/partmap/pc.c index 6f68ecf..e3ea53a 100644 --- a/partmap/pc.c +++ b/partmap/pc.c @@ -121,6 +121,13 @@ 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) + break; + + if (i != 4) + return grub_error (GRUB_ERR_BAD_PART_TABLE, "bad boot flag"); + /* Analyze DOS partitions. */ for (p.index = 0; p.index < 4; p.index++) {