From e02e989ebff6caef4efbb91bc34b242a3bbed9d7 Mon Sep 17 00:00:00 2001 From: Neal Gompa Date: Mon, 5 Jul 2021 05:36:03 -0400 Subject: [PATCH] MdeModulePkg/PartitionDxe: Ignore PMBR BootIndicator per UEFI spec MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit RH-Author: Philippe Mathieu-Daudé RH-MergeRequest: 6: MdeModulePkg/PartitionDxe: Ignore PMBR BootIndicator per UEFI spec [RHEL-9, c9s] RH-Commit: [1/1] b06df986d8e0cd0dab6e4234801c330b4d26e7db RH-Bugzilla: 1988760 RH-Acked-by: Miroslav Rezanina Per UEFI Spec 2.8 (UEFI_Spec_2_8_final.pdf, page 114) 5.2.3 Protective MBR Table 20. Protective MBR Partition Record protecting the entire disk The description for BootIndicator states the following: > Set to 0x00 to indicate a non-bootable partition. If set to any > value other than 0x00 the behavior of this flag on non-UEFI > systems is undefined. Must be ignored by UEFI implementations. Unfortunately, we have been incorrectly assuming that the BootIndicator value must be 0x00, which leads to problems when the 'pmbr_boot' flag is set on a disk containing a GPT (such as with GNU parted). When the flag is set, the value changes to 0x01, causing this check to fail and the system is rendered unbootable despite it being valid from the perspective of the UEFI spec. To resolve this, we drop the check for the BootIndicator so that we stop caring about the value set there, which restores the capability to boot such disks. Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3474 Cc: Chris Murphy Cc: David Duncan Cc: Lazlo Ersek Cc: Hao A Wu Cc: Ray Ni Cc: Zhichao Gao Signed-off-by: Neal Gompa Message-Id: <20210705093603.575707-1-ngompa@fedoraproject.org> Reviewed-by: Laszlo Ersek Reviewed-by: Hao A Wu (cherry picked from commit b3db0cb1f8d163f22b769c205c6347376a315dcd) Signed-off-by: Philippe Mathieu-Daude Signed-off-by: Miroslav Rezanina --- MdeModulePkg/Universal/Disk/PartitionDxe/Gpt.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/MdeModulePkg/Universal/Disk/PartitionDxe/Gpt.c b/MdeModulePkg/Universal/Disk/PartitionDxe/Gpt.c index aefb2d6ecb..efaff5e080 100644 --- a/MdeModulePkg/Universal/Disk/PartitionDxe/Gpt.c +++ b/MdeModulePkg/Universal/Disk/PartitionDxe/Gpt.c @@ -264,8 +264,7 @@ PartitionInstallGptChildHandles ( // Verify that the Protective MBR is valid // for (Index = 0; Index < MAX_MBR_PARTITIONS; Index++) { - if (ProtectiveMbr->Partition[Index].BootIndicator == 0x00 && - ProtectiveMbr->Partition[Index].OSIndicator == PMBR_GPT_PARTITION && + if (ProtectiveMbr->Partition[Index].OSIndicator == PMBR_GPT_PARTITION && UNPACK_UINT32 (ProtectiveMbr->Partition[Index].StartingLBA) == 1 ) { break; -- 2.27.0