:: commit e6dfe48a4bcd30a17df6f859f4cc63220c9c7500

Mintsuki <mintsuki@protonmail.com> — 2026-04-05 09:36

parents: 8e842edecf

protos/multiboot: Allow menu recovery on overflow panics

diff --git a/common/protos/multiboot1.c b/common/protos/multiboot1.c
index 707fc422..08d95f56 100644
--- a/common/protos/multiboot1.c
+++ b/common/protos/multiboot1.c
@@ -35,7 +35,7 @@ static size_t get_multiboot1_info_size(
     size_t modules_count, size_t modules_cmdlines_size,
     uint32_t section_entry_size, uint32_t section_num
 ) {
-#define OVERFLOW panic(false, "multiboot1: info size overflow")
+#define OVERFLOW panic(true, "multiboot1: info size overflow")
     return ALIGN_UP(sizeof(struct multiboot1_info), 16, OVERFLOW) +
            ALIGN_UP(strlen(cmdline) + 1, 16, OVERFLOW) +
            ALIGN_UP(sizeof(LIMINE_BRAND), 16, OVERFLOW) +
@@ -48,7 +48,7 @@ static size_t get_multiboot1_info_size(
 
 static void *mb1_info_alloc(void **mb1_info_raw, size_t size) {
     void *ret = *mb1_info_raw;
-    *mb1_info_raw += ALIGN_UP(size, 16, panic(false, "multiboot: info alloc overflow"));
+    *mb1_info_raw += ALIGN_UP(size, 16, panic(true, "multiboot: info alloc overflow"));
     return ret;
 }
 
@@ -191,7 +191,7 @@ noreturn void multiboot1_load(char *config, char *cmdline) {
 
         char *module_cmdline = conf_tuple.value2;
         if (!module_cmdline) module_cmdline = "";
-        modules_cmdlines_size += ALIGN_UP(strlen(module_cmdline) + 1, 16, panic(false, "multiboot: info size overflow"));
+        modules_cmdlines_size += ALIGN_UP(strlen(module_cmdline) + 1, 16, panic(true, "multiboot: info size overflow"));
     }
 
     size_t mb1_info_size = get_multiboot1_info_size(
diff --git a/common/protos/multiboot2.c b/common/protos/multiboot2.c
index a0c072b1..b7ec894a 100644
--- a/common/protos/multiboot2.c
+++ b/common/protos/multiboot2.c
@@ -40,7 +40,7 @@ static size_t get_multiboot2_info_size(
     uint32_t section_entry_size, uint32_t section_num,
     uint32_t smbios_tag_size
 ) {
-#define OVERFLOW panic(false, "multiboot2: info size overflow")
+#define OVERFLOW panic(true, "multiboot2: info size overflow")
     return ALIGN_UP(sizeof(struct multiboot2_start_tag), MULTIBOOT_TAG_ALIGN, OVERFLOW) +
         ALIGN_UP(sizeof(struct multiboot_tag_string) + strlen(cmdline) + 1, MULTIBOOT_TAG_ALIGN, OVERFLOW) +
         ALIGN_UP(sizeof(struct multiboot_tag_string) + sizeof(LIMINE_BRAND), MULTIBOOT_TAG_ALIGN, OVERFLOW) +
@@ -69,7 +69,7 @@ static size_t get_multiboot2_info_size(
 }
 
 #define append_tag(P, TAG) do { \
-    (P) += ALIGN_UP((TAG)->size, MULTIBOOT_TAG_ALIGN, panic(false, "multiboot2: tag size overflow")); \
+    (P) += ALIGN_UP((TAG)->size, MULTIBOOT_TAG_ALIGN, panic(true, "multiboot2: tag size overflow")); \
 } while (0)
 
 noreturn void multiboot2_load(char *config, char* cmdline) {
@@ -455,7 +455,7 @@ reloc_fail:
 
         char *module_cmdline = conf_tuple.value2;
         if (!module_cmdline) module_cmdline = "";
-        modules_size += ALIGN_UP(sizeof(struct multiboot_tag_module) + strlen(module_cmdline) + 1, MULTIBOOT_TAG_ALIGN, panic(false, "multiboot2: modules size overflow"));
+        modules_size += ALIGN_UP(sizeof(struct multiboot_tag_module) + strlen(module_cmdline) + 1, MULTIBOOT_TAG_ALIGN, panic(true, "multiboot2: modules size overflow"));
     }
 
     struct smbios_entry_point_32* smbios_entry_32 = NULL;
@@ -466,9 +466,9 @@ reloc_fail:
     uint32_t smbios_tag_size = 0;
 
     if (smbios_entry_32 != NULL)
-        smbios_tag_size += ALIGN_UP(sizeof(struct multiboot_tag_smbios) + smbios_entry_32->length, MULTIBOOT_TAG_ALIGN, panic(false, "multiboot2: tag size overflow"));
+        smbios_tag_size += ALIGN_UP(sizeof(struct multiboot_tag_smbios) + smbios_entry_32->length, MULTIBOOT_TAG_ALIGN, panic(true, "multiboot2: tag size overflow"));
     if (smbios_entry_64 != NULL)
-        smbios_tag_size += ALIGN_UP(sizeof(struct multiboot_tag_smbios) + smbios_entry_64->length, MULTIBOOT_TAG_ALIGN, panic(false, "multiboot2: tag size overflow"));
+        smbios_tag_size += ALIGN_UP(sizeof(struct multiboot_tag_smbios) + smbios_entry_64->length, MULTIBOOT_TAG_ALIGN, panic(true, "multiboot2: tag size overflow"));
 
     size_t mb2_info_size = get_multiboot2_info_size(
         cmdline,
tab: 248 wrap: offon