:: commit 39122c0bd7eb4f920f782adff4aeb7cf9fcda40a

mintsuki <mintsuki@protonmail.com> — 2022-10-07 05:49

parents: 381f68ded2

misc: Dynamically allocate EFI memmap copy

diff --git a/common/lib/misc.c b/common/lib/misc.c
index 4f68f23c..40a39c05 100644
--- a/common/lib/misc.c
+++ b/common/lib/misc.c
@@ -111,8 +111,6 @@ uint32_t hex2bin(uint8_t *str, uint32_t size) {
 
 no_unwind bool efi_boot_services_exited = false;
 
-#define EFI_COPY_MAX_ENTRIES 2048
-
 bool efi_exit_boot_services(void) {
     EFI_STATUS status;
 
@@ -134,6 +132,14 @@ bool efi_exit_boot_services(void) {
         goto fail;
     }
 
+    EFI_MEMORY_DESCRIPTOR *efi_copy;
+    status = gBS->AllocatePool(EfiLoaderData, efi_mmap_size * 2, (void **)&efi_copy);
+    if (status) {
+        goto fail;
+    }
+
+    const size_t EFI_COPY_MAX_ENTRIES = (efi_mmap_size * 2) / efi_desc_size;
+
     size_t retries = 0;
 
 retry:
@@ -157,7 +163,6 @@ retry:
     // Go through new EFI memmap and free up bootloader entries
     size_t entry_count = efi_mmap_size / efi_desc_size;
 
-    EFI_MEMORY_DESCRIPTOR *efi_copy = ext_mem_alloc(EFI_COPY_MAX_ENTRIES * efi_desc_size);
     size_t efi_copy_i = 0;
 
     for (size_t i = 0; i < entry_count; i++) {
tab: 248 wrap: offon