:: commit 15f05a8b8258775970af0bf739a08ae0e58a439e

mintsuki <mintsuki@protonmail.com> — 2024-09-04 00:09

parents: 1862ef29a2

protos: Reduce protocol side MEMMAP_MAX values

diff --git a/common/mm/pmm.h b/common/mm/pmm.h
index c27e6a9f..989e9fde 100644
--- a/common/mm/pmm.h
+++ b/common/mm/pmm.h
@@ -22,12 +22,6 @@ struct memmap_entry {
 #define MEMMAP_FRAMEBUFFER            0x1002
 #define MEMMAP_EFI_RECLAIMABLE        0x2000
 
-#if defined (BIOS)
-#  define MEMMAP_MAX 256
-#elif defined (UEFI)
-#  define MEMMAP_MAX 1024
-#endif
-
 struct meminfo {
     size_t uppermem;
     size_t lowermem;
diff --git a/common/protos/limine.c b/common/protos/limine.c
index 0c0a8669..ce112b2f 100644
--- a/common/protos/limine.c
+++ b/common/protos/limine.c
@@ -34,6 +34,8 @@
 
 #define MAX_REQUESTS 128
 
+#define MEMMAP_MAX 256
+
 static int paging_mode;
 
 static uint64_t get_hhdm_span_top(int base_revision) {
diff --git a/common/protos/multiboot1.c b/common/protos/multiboot1.c
index ffd8a031..36a276d2 100644
--- a/common/protos/multiboot1.c
+++ b/common/protos/multiboot1.c
@@ -25,6 +25,8 @@
 
 #define LIMINE_BRAND "Limine " LIMINE_VERSION
 
+#define MEMMAP_MAX 256
+
 // Returns the size required to store the multiboot info.
 static size_t get_multiboot1_info_size(
     char *cmdline,
@@ -415,6 +417,10 @@ skip_modeset:;
     size_t mb_mmap_count;
     struct memmap_entry *raw_memmap = get_raw_memmap(&mb_mmap_count);
 
+    if (mb_mmap_count > MEMMAP_MAX) {
+        panic(false, "multiboot1: Too many memory map entries.");
+    }
+
     size_t mb_mmap_len = mb_mmap_count * sizeof(struct multiboot1_mmap_entry);
     struct multiboot1_mmap_entry *mmap = mb1_info_alloc(&mb1_info_raw, mb_mmap_len);
 
diff --git a/common/protos/multiboot2.c b/common/protos/multiboot2.c
index e5f085f6..ca9fb910 100644
--- a/common/protos/multiboot2.c
+++ b/common/protos/multiboot2.c
@@ -28,6 +28,9 @@
 
 #define LIMINE_BRAND "Limine " LIMINE_VERSION
 
+#define MEMMAP_MAX 256
+#define EFI_MEMMAP_MAX 1024
+
 /// Returns the size required to store the multiboot2 info.
 static size_t get_multiboot2_info_size(
     char *cmdline,
@@ -48,7 +51,7 @@ static size_t get_multiboot2_info_size(
         ALIGN_UP(sizeof(struct multiboot_tag_basic_meminfo), MULTIBOOT_TAG_ALIGN) +                                     // basic memory info
         ALIGN_UP(sizeof(struct multiboot_tag_mmap) + sizeof(struct multiboot_mmap_entry) * MEMMAP_MAX, MULTIBOOT_TAG_ALIGN) +  // MMAP
         #if defined (UEFI)
-            ALIGN_UP(sizeof(struct multiboot_tag_efi_mmap) + (efi_desc_size * MEMMAP_MAX), MULTIBOOT_TAG_ALIGN) +              // EFI MMAP
+            ALIGN_UP(sizeof(struct multiboot_tag_efi_mmap) + (efi_desc_size * EFI_MEMMAP_MAX), MULTIBOOT_TAG_ALIGN) +          // EFI MMAP
             #if defined (__i386__)
                 ALIGN_UP(sizeof(struct multiboot_tag_efi32), MULTIBOOT_TAG_ALIGN) +                                     // EFI system table 32
                 ALIGN_UP(sizeof(struct multiboot_tag_efi32_ih), MULTIBOOT_TAG_ALIGN) +                                  // EFI image handle 32
@@ -862,7 +865,7 @@ skip_modeset:;
     //////////////////////////////////////////////
 #if defined (UEFI)
     {
-        if ((efi_mmap_size / efi_desc_size) > MEMMAP_MAX) {
+        if ((efi_mmap_size / efi_desc_size) > EFI_MEMMAP_MAX) {
             panic(false, "multiboot2: too many EFI memory map entries");
         }
 
tab: 248 wrap: offon