:: commit d8180342f0af4a68ab786c7c227434b7ee06e772

mintsuki <mintsuki@protonmail.com> — 2022-04-15 16:37

parents: 3baa802ff6

efi: Do not panic if GetMemoryMap() fails after first ExitBootServices()

diff --git a/common/lib/blib.c b/common/lib/blib.c
index a0421ea6..0f2a84fd 100644
--- a/common/lib/blib.c
+++ b/common/lib/blib.c
@@ -184,19 +184,22 @@ bool efi_exit_boot_services(void) {
     efi_mmap_size += 4096;
 
     status = gBS->FreePool(efi_mmap);
-    if (status)
+    if (status) {
         goto fail;
+    }
 
     status = gBS->AllocatePool(EfiLoaderData, efi_mmap_size, (void **)&efi_mmap);
-    if (status)
+    if (status) {
         goto fail;
+    }
 
     size_t retries = 0;
 
 retry:
     status = gBS->GetMemoryMap(&efi_mmap_size, efi_mmap, &mmap_key, &efi_desc_size, &efi_desc_ver);
-    if (status)
+    if (retries == 0 && status) {
         goto fail;
+    }
 
     // Be gone, UEFI!
     status = gBS->ExitBootServices(efi_image_handle, mmap_key);
tab: 248 wrap: offon