:: commit de74c99e58f1da0e3d50454f35857a5d1fd6f7aa

Mintsuki <mintsuki@protonmail.com> — 2026-02-07 05:39

parents: 49d4f335e7

protos/linux_x86: Use init_size from kernel header for allocation when available

diff --git a/common/protos/linux_x86.c b/common/protos/linux_x86.c
index 961565ad..413ece75 100644
--- a/common/protos/linux_x86.c
+++ b/common/protos/linux_x86.c
@@ -385,10 +385,15 @@ noreturn void linux_load(char *config, char *cmdline) {
     setup_header->loadflags &= ~(1 << 5);     // print early messages
 
     // load kernel
+    size_t kernel_data_size = kernel_file->size - real_mode_code_size;
+    size_t kernel_alloc_size = kernel_data_size;
+    if (setup_header->version >= 0x20a && setup_header->init_size > kernel_alloc_size) {
+        kernel_alloc_size = setup_header->init_size;
+    }
     uintptr_t kernel_load_addr = 0x100000;
     for (;;) {
         if (memmap_alloc_range(kernel_load_addr,
-                ALIGN_UP(kernel_file->size - real_mode_code_size, 4096),
+                ALIGN_UP(kernel_alloc_size, 4096),
                 MEMMAP_BOOTLOADER_RECLAIMABLE, MEMMAP_USABLE, false, false, false))
             break;
 
tab: 248 wrap: offon