Kernel: check all threads in validate_pointer_access
This commit is contained in:
parent
1cc0fb9c01
commit
dfdfb7cdaf
|
@ -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())
|
||||||
|
|
||||||
if (vaddr >= thread.userspace_stack_bottom() && vaddr + size <= thread.userspace_stack_top())
|
|
||||||
return {};
|
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;
|
||||||
|
|
Loading…
Reference in New Issue