From a364f5c7b77578f70e81ab48093be3c5133d47a8 Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Mon, 19 Jul 2021 09:29:07 +0200 Subject: [PATCH] Kernel: Make sure super pages are in the first 16MiB of physical memory This was broken by recent changes. --- Kernel/VM/MemoryManager.cpp | 3 +++ Kernel/linker_amd64.ld | 6 ++++++ Kernel/linker_i386.ld | 6 ++++++ 3 files changed, 15 insertions(+) diff --git a/Kernel/VM/MemoryManager.cpp b/Kernel/VM/MemoryManager.cpp index b88987e72b..76607faf4e 100644 --- a/Kernel/VM/MemoryManager.cpp +++ b/Kernel/VM/MemoryManager.cpp @@ -300,6 +300,9 @@ UNMAP_AFTER_INIT void MemoryManager::parse_memory_map() m_user_physical_regions.append(PhysicalRegion::try_create(range.lower, range.upper).release_nonnull()); } + // Super pages are guaranteed to be in the first 16MB of physical memory + VERIFY(virtual_to_low_physical((FlatPtr)super_pages) + sizeof(super_pages) < 0x1000000); + // Append statically-allocated super physical physical_region. m_super_physical_regions.append(PhysicalRegion::try_create( PhysicalAddress(virtual_to_low_physical(FlatPtr(super_pages))), diff --git a/Kernel/linker_amd64.ld b/Kernel/linker_amd64.ld index da50c37491..08d0ae2fbc 100644 --- a/Kernel/linker_amd64.ld +++ b/Kernel/linker_amd64.ld @@ -4,6 +4,7 @@ KERNEL_VIRTUAL_BASE = 0x2000000000; PHDRS { + boot_bss PT_LOAD ; text PT_LOAD ; data PT_LOAD ; bss PT_LOAD ; @@ -16,6 +17,11 @@ SECTIONS start_of_kernel_image = .; + .boot_bss ALIGN(4K) (NOLOAD) : AT (ADDR(.boot_bss) - KERNEL_VIRTUAL_BASE) + { + *(.super_pages) + } :boot_bss + .text ALIGN(4K) : AT (ADDR(.text) - KERNEL_VIRTUAL_BASE) { start_of_kernel_text = .; diff --git a/Kernel/linker_i386.ld b/Kernel/linker_i386.ld index d73adc7657..6818845840 100644 --- a/Kernel/linker_i386.ld +++ b/Kernel/linker_i386.ld @@ -4,6 +4,7 @@ KERNEL_VIRTUAL_BASE = 0xc0000000; PHDRS { + boot_bss PT_LOAD ; text PT_LOAD ; data PT_LOAD ; bss PT_LOAD ; @@ -16,6 +17,11 @@ SECTIONS start_of_kernel_image = .; + .boot_bss ALIGN(4K) (NOLOAD) : AT (ADDR(.boot_bss) - KERNEL_VIRTUAL_BASE) + { + *(.super_pages) + } :boot_bss + .text ALIGN(4K) : AT (ADDR(.text) - KERNEL_VIRTUAL_BASE) { start_of_kernel_text = .;