From 813593a485671e78f17c4e79f1ce12c31dd35aa6 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sat, 11 Dec 2021 21:16:57 +0100 Subject: [PATCH] Kernel: Fix overly loose MemoryManager::kernel_region_from_vaddr() It's not enough to just find the largest-address-not-above the argument, we must also check that the found region actually contains the argument. Regressed in a23edd42b869a16e11f4d6ca9071d6b570dc219c, thanks to Idan for pointing this out. --- Kernel/Memory/MemoryManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Kernel/Memory/MemoryManager.cpp b/Kernel/Memory/MemoryManager.cpp index 81f5da7c1d..bf9acc51fd 100644 --- a/Kernel/Memory/MemoryManager.cpp +++ b/Kernel/Memory/MemoryManager.cpp @@ -623,7 +623,7 @@ Region* MemoryManager::kernel_region_from_vaddr(VirtualAddress vaddr) auto* region_ptr = MM.m_kernel_regions.find_largest_not_above(vaddr.get()); if (!region_ptr) return nullptr; - return *region_ptr; + return (*region_ptr)->contains(vaddr) ? *region_ptr : nullptr; } Region* MemoryManager::find_user_region_from_vaddr_no_lock(AddressSpace& space, VirtualAddress vaddr)