gpt: properly detect and repair invalid tables
GPT_BOTH_VALID is 4 bits so simple a boolean check is not sufficient. This broken condition allowed gptprio to trust bogus disk locations in headers that were marked invalid causing arbitrary disk corruption.
This commit is contained in:
parent
2cb9b7fcaa
commit
b1ef48849c
|
|
@ -91,7 +91,7 @@ grub_find_next (const char *disk_name,
|
|||
if (!gpt)
|
||||
goto done;
|
||||
|
||||
if (!(gpt->status & GRUB_GPT_BOTH_VALID))
|
||||
if ((gpt->status & GRUB_GPT_BOTH_VALID) != GRUB_GPT_BOTH_VALID)
|
||||
if (grub_gpt_repair (dev->disk, gpt))
|
||||
goto done;
|
||||
|
||||
|
|
|
|||
|
|
@ -648,7 +648,7 @@ grub_gpt_write (grub_disk_t disk, grub_gpt_t gpt)
|
|||
{
|
||||
/* TODO: update/repair protective MBRs too. */
|
||||
|
||||
if (!(gpt->status & GRUB_GPT_BOTH_VALID))
|
||||
if ((gpt->status & GRUB_GPT_BOTH_VALID) != GRUB_GPT_BOTH_VALID)
|
||||
return grub_error (GRUB_ERR_BAD_PART_TABLE, "Invalid GPT data");
|
||||
|
||||
grub_dprintf ("gpt", "writing primary GPT to %s\n", disk->name);
|
||||
|
|
|
|||
Loading…
Reference in New Issue