On 11/23/2023 3:36 PM, Ard Biesheuvel wrote:
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>

Thanks Ard for quick review. I created the PR with your Rb-tag at
https://github.com/tianocore/edk2/pull/5071

Regards,
Nhi


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


Reply via email to