:: commit 7d527d867cff43268599ea725c560463d1f65f6c

mintsuki <mintsuki@protonmail.com> — 2023-09-11 20:31

parents: bddd30a667

protos/chainload: Fix bug that could result in bogus oom errors. Fixes #302

diff --git a/common/protos/chainload.c b/common/protos/chainload.c
index f0d529a0..594437eb 100644
--- a/common/protos/chainload.c
+++ b/common/protos/chainload.c
@@ -217,15 +217,13 @@ noreturn void efi_chainload_file(char *config, char *cmdline, struct file_handle
 
     EFI_HANDLE efi_part_handle = image->efi_part_handle;
 
-    void *_ptr = freadall(image, MEMMAP_RESERVED);
+    void *ptr = freadall(image, MEMMAP_RESERVED);
     size_t image_size = image->size;
-    void *ptr;
-    status = gBS->AllocatePool(EfiLoaderData, image_size, &ptr);
-    if (status)
-        panic(true, "chainload: Allocation failure");
-    memcpy(ptr, _ptr, image_size);
 
-    pmm_free(_ptr, image->size);
+    memmap_alloc_range_in(untouched_memmap, &untouched_memmap_entries,
+                          (uintptr_t)ptr, ALIGN_UP(image_size, 4096),
+                          MEMMAP_RESERVED, MEMMAP_USABLE, true, false, true);
+
     fclose(image);
 
     term_notready();
tab: 248 wrap: offon