Kernel: check all threads in validate_pointer_access

This commit is contained in:
Bananymous 2025-08-05 00:10:29 +03:00
parent 1cc0fb9c01
commit dfdfb7cdaf
1 changed files with 5 additions and 8 deletions

View File

@ -3152,9 +3152,8 @@ namespace Kernel
BAN::ErrorOr<void> Process::validate_pointer_access_check(const void* ptr, size_t size, bool needs_write) BAN::ErrorOr<void> Process::validate_pointer_access_check(const void* ptr, size_t size, bool needs_write)
{ {
ASSERT(&Process::current() == this); ASSERT(&Process::current() == this);
auto& thread = Thread::current();
vaddr_t vaddr = (vaddr_t)ptr; const vaddr_t vaddr = reinterpret_cast<vaddr_t>(ptr);
// NOTE: detect overflow // NOTE: detect overflow
if (vaddr + size < vaddr) if (vaddr + size < vaddr)
@ -3164,14 +3163,12 @@ namespace Kernel
if (vaddr + size > USERSPACE_END) if (vaddr + size > USERSPACE_END)
goto unauthorized_access; goto unauthorized_access;
if (vaddr == 0) for (const auto* thread : m_threads)
return {}; if (vaddr >= thread->userspace_stack_bottom() && vaddr + size <= thread->userspace_stack_top())
return {};
if (vaddr >= thread.userspace_stack_bottom() && vaddr + size <= thread.userspace_stack_top())
return {};
// FIXME: should we allow cross mapping access? // 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)) if (!mapped_region->contains_fully(vaddr, size))
continue; continue;