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> --- 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 (#111647): https://edk2.groups.io/g/devel/message/111647 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] -=-=-=-=-=-=-=-=-=-=-=-