From dfdfb7cdaf9bb97b51357ff0692ef2143671cbdb Mon Sep 17 00:00:00 2001 From: Bananymous Date: Tue, 5 Aug 2025 00:10:29 +0300 Subject: [PATCH] Kernel: check all threads in validate_pointer_access --- kernel/kernel/Process.cpp | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/kernel/kernel/Process.cpp b/kernel/kernel/Process.cpp index 4d176d77..495d2a2d 100644 --- a/kernel/kernel/Process.cpp +++ b/kernel/kernel/Process.cpp @@ -3152,9 +3152,8 @@ namespace Kernel BAN::ErrorOr Process::validate_pointer_access_check(const void* ptr, size_t size, bool needs_write) { ASSERT(&Process::current() == this); - auto& thread = Thread::current(); - vaddr_t vaddr = (vaddr_t)ptr; + const vaddr_t vaddr = reinterpret_cast(ptr); // NOTE: detect overflow if (vaddr + size < vaddr) @@ -3164,14 +3163,12 @@ namespace Kernel if (vaddr + size > USERSPACE_END) goto unauthorized_access; - if (vaddr == 0) - return {}; - - if (vaddr >= thread.userspace_stack_bottom() && vaddr + size <= thread.userspace_stack_top()) - return {}; + for (const auto* thread : m_threads) + if (vaddr >= thread->userspace_stack_bottom() && vaddr + size <= thread->userspace_stack_top()) + return {}; // FIXME: should we allow cross mapping access? - for (auto& mapped_region : m_mapped_regions) + for (const auto& mapped_region : m_mapped_regions) { if (!mapped_region->contains_fully(vaddr, size)) continue;