On Thu, 23 Nov 2023 at 05:49, Nhi Pham <n...@os.amperecomputing.com> wrote: > > If the SetVirtualAddressMap() is not called, mIsVirtualAddrConverted > is FALSE and the kernel crash occurs in IsNestedFmpCapsule() when > executing gBS->LocateProtocol () in the else case. > > To serve the omitted SetVirtualAddressMap() call, we could just check > mEsrtTable presence instead of relying on mIsVirtualAddrConverted. > > Signed-off-by: Nhi Pham <n...@os.amperecomputing.com>
Agreed: SetVirtualAddressMap() is optional, so whether it has been called or not should not be used as a proxy to decide whether or not we are still running in the boot services context. Reviewed-by: Ard Biesheuvel <a...@kernel.org> > --- > MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.c | 17 > +++++++---------- > MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleRuntime.c | 2 -- > 2 files changed, 7 insertions(+), 12 deletions(-) > > diff --git a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.c > b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.c > index 197af267aff3..2433c76a8c6f 100644 > --- a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.c > +++ b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.c > @@ -41,8 +41,7 @@ > #include <Protocol/FirmwareManagementProgress.h> > #include <Protocol/DevicePath.h> > > -EFI_SYSTEM_RESOURCE_TABLE *mEsrtTable = NULL; > -BOOLEAN mIsVirtualAddrConverted = FALSE; > +EFI_SYSTEM_RESOURCE_TABLE *mEsrtTable = NULL; > > BOOLEAN mDxeCapsuleLibEndOfDxe = FALSE; > EFI_EVENT mDxeCapsuleLibEndOfDxeEvent = NULL; > @@ -1394,14 +1393,12 @@ IsNestedFmpCapsule ( > EFI_SYSTEM_RESOURCE_ENTRY Entry; > > EsrtGuidFound = FALSE; > - if (mIsVirtualAddrConverted) { > - if (mEsrtTable != NULL) { > - EsrtEntry = (EFI_SYSTEM_RESOURCE_ENTRY *)(mEsrtTable + 1); > - for (Index = 0; Index < mEsrtTable->FwResourceCount; Index++, > EsrtEntry++) { > - if (CompareGuid (&EsrtEntry->FwClass, &CapsuleHeader->CapsuleGuid)) { > - EsrtGuidFound = TRUE; > - break; > - } > + if (mEsrtTable != NULL) { > + EsrtEntry = (EFI_SYSTEM_RESOURCE_ENTRY *)(mEsrtTable + 1); > + for (Index = 0; Index < mEsrtTable->FwResourceCount; Index++, > EsrtEntry++) { > + if (CompareGuid (&EsrtEntry->FwClass, &CapsuleHeader->CapsuleGuid)) { > + EsrtGuidFound = TRUE; > + break; > } > } > } else { > diff --git a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleRuntime.c > b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleRuntime.c > index 9ceb44fe4d79..44f30c16c284 100644 > --- a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleRuntime.c > +++ b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleRuntime.c > @@ -21,7 +21,6 @@ > #include <Library/MemoryAllocationLib.h> > > extern EFI_SYSTEM_RESOURCE_TABLE *mEsrtTable; > -extern BOOLEAN mIsVirtualAddrConverted; > EFI_EVENT > mDxeRuntimeCapsuleLibVirtualAddressChangeEvent = NULL; > EFI_EVENT mDxeRuntimeCapsuleLibReadyToBootEvent > = NULL; > > @@ -40,7 +39,6 @@ DxeCapsuleLibVirtualAddressChangeEvent ( > ) > { > gRT->ConvertPointer (EFI_OPTIONAL_PTR, (VOID **)&mEsrtTable); > - mIsVirtualAddrConverted = TRUE; > } > > /** > -- > 2.25.1 > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#111664): https://edk2.groups.io/g/devel/message/111664 Mute This Topic: https://groups.io/mt/102762290/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-