> -----Original Message----- > From: Neal Gompa <[email protected]> > Sent: Monday, July 5, 2021 5:36 PM > To: [email protected] > Cc: Neal Gompa <[email protected]>; Chris Murphy > <[email protected]>; David Duncan <[email protected]>; > Lazlo Ersek <[email protected]>; Wu, Hao A <[email protected]>; Ni, > Ray <[email protected]>; Gao, Zhichao <[email protected]> > Subject: [PATCH] MdeModulePkg/PartitionDxe: Ignore PMBR BootIndicator > per UEFI spec > > 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 <[email protected]> > Cc: David Duncan <[email protected]> > Cc: Lazlo Ersek <[email protected]> > Cc: Hao A Wu <[email protected]> > Cc: Ray Ni <[email protected]> > Cc: Zhichao Gao <[email protected]> > > Signed-off-by: Neal Gompa <[email protected]> > --- > 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 aefb2d6ecb3f..efaff5e0808f 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 && >
Thanks a lot for the fix. Reviewed-by: Hao A Wu <[email protected]> Best Regards, Hao Wu > UNPACK_UINT32 (ProtectiveMbr->Partition[Index].StartingLBA) == 1 > > ) { > > break; > > -- > 2.31.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#77492): https://edk2.groups.io/g/devel/message/77492 Mute This Topic: https://groups.io/mt/83993973/21656 Group Owner: [email protected] Unsubscribe: https://edk2.groups.io/g/devel/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
