:: commit 99e0ba3b1fba0b20fafb1d4b7b0d02e11464fd70

mintsuki <mintsuki@protonmail.com> — 2024-10-27 23:34

parents: af27df9b7a

protos/limine: Only map 4 memory map entry types in the default mappings

diff --git a/common/protos/limine.c b/common/protos/limine.c
index 6b4211ae..1dfd7b96 100644
--- a/common/protos/limine.c
+++ b/common/protos/limine.c
@@ -43,12 +43,20 @@ static int paging_mode;
 static uint64_t get_hhdm_span_top(int base_revision) {
     uint64_t ret = base_revision >= 3 ? 0 : 0x100000000;
     for (size_t i = 0; i < memmap_entries; i++) {
-        if (base_revision >= 1 && (
+        if (base_revision >= 1 && base_revision < 3 && (
             memmap[i].type == MEMMAP_RESERVED
          || memmap[i].type == MEMMAP_BAD_MEMORY)) {
             continue;
         }
 
+        if (base_revision >= 3 && (
+            memmap[i].type != MEMMAP_USABLE
+         && memmap[i].type != MEMMAP_BOOTLOADER_RECLAIMABLE
+         && memmap[i].type != MEMMAP_KERNEL_AND_MODULES
+         && memmap[i].type != MEMMAP_FRAMEBUFFER)) {
+            continue;
+        }
+
         uint64_t base = memmap[i].base;
         uint64_t length = memmap[i].length;
         uint64_t top = base + length;
@@ -85,8 +93,10 @@ static pagemap_t build_identity_map(void) {
     }
 
     for (size_t i = 0; i < _memmap_entries; i++) {
-        if (_memmap[i].type == MEMMAP_RESERVED
-         || _memmap[i].type == MEMMAP_BAD_MEMORY) {
+        if (_memmap[i].type != MEMMAP_USABLE
+         && _memmap[i].type != MEMMAP_BOOTLOADER_RECLAIMABLE
+         && _memmap[i].type != MEMMAP_KERNEL_AND_MODULES
+         && _memmap[i].type != MEMMAP_FRAMEBUFFER) {
             continue;
         }
 
@@ -172,12 +182,20 @@ static pagemap_t build_pagemap(int base_revision,
 
     // Map all free memory regions to the higher half direct map offset
     for (size_t i = 0; i < _memmap_entries; i++) {
-        if (base_revision >= 1 && (
+        if (base_revision >= 1 && base_revision < 3 && (
             _memmap[i].type == MEMMAP_RESERVED
          || _memmap[i].type == MEMMAP_BAD_MEMORY)) {
             continue;
         }
 
+        if (base_revision >= 3 && (
+            _memmap[i].type != MEMMAP_USABLE
+         && _memmap[i].type != MEMMAP_BOOTLOADER_RECLAIMABLE
+         && _memmap[i].type != MEMMAP_KERNEL_AND_MODULES
+         && _memmap[i].type != MEMMAP_FRAMEBUFFER)) {
+            continue;
+        }
+
         uint64_t base   = _memmap[i].base;
         uint64_t length = _memmap[i].length;
         uint64_t top    = base + length;
tab: 248 wrap: offon