From f0c4941beb40c510d4672acd222226d3a2cb407c Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Sun, 18 Jul 2021 02:34:57 +0200 Subject: [PATCH] Kernel: Fix 64-bit address truncation in MemoryManager::ensure_pte() --- Kernel/VM/MemoryManager.cpp | 3 ++- Kernel/VM/PageDirectory.h | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Kernel/VM/MemoryManager.cpp b/Kernel/VM/MemoryManager.cpp index db3afc0179..cc23a34e24 100644 --- a/Kernel/VM/MemoryManager.cpp +++ b/Kernel/VM/MemoryManager.cpp @@ -552,7 +552,8 @@ PageTableEntry* MemoryManager::ensure_pte(PageDirectory& page_directory, Virtual pde.set_global(&page_directory == m_kernel_page_directory.ptr()); // Use page_directory_table_index and page_directory_index as key // This allows us to release the page table entry when no longer needed - auto result = page_directory.m_page_tables.set(vaddr.get() & ~0x1fffff, move(page_table)); + auto result = page_directory.m_page_tables.set(vaddr.get() & ~(FlatPtr)0x1fffff, move(page_table)); + // If you're hitting this VERIFY on x86_64 chances are a 64-bit pointer was truncated somewhere VERIFY(result == AK::HashSetResult::InsertedNewEntry); } diff --git a/Kernel/VM/PageDirectory.h b/Kernel/VM/PageDirectory.h index 575087f35d..d66c19dd91 100644 --- a/Kernel/VM/PageDirectory.h +++ b/Kernel/VM/PageDirectory.h @@ -72,7 +72,7 @@ private: #else RefPtr m_directory_pages[4]; #endif - HashMap> m_page_tables; + HashMap> m_page_tables; RecursiveSpinLock m_lock; bool m_valid { false }; };