From 4ca39c71104084be36b672fbe10952ba88326fba Mon Sep 17 00:00:00 2001 From: Idan Horowitz Date: Mon, 29 Nov 2021 21:19:58 +0200 Subject: [PATCH] Kernel: Move the expand_range_to_page_boundaries helper to MemoryManager This helper can (and will) be used in more parts of the kernel besides the mmap-family of syscalls. --- Kernel/Memory/MemoryManager.h | 17 +++++++++++++++++ Kernel/Syscalls/mmap.cpp | 25 ++++--------------------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/Kernel/Memory/MemoryManager.h b/Kernel/Memory/MemoryManager.h index 17cf63a65e..69ea905391 100644 --- a/Kernel/Memory/MemoryManager.h +++ b/Kernel/Memory/MemoryManager.h @@ -329,4 +329,21 @@ inline bool PhysicalPage::is_lazy_committed_page() const return this == &MM.lazy_committed_page(); } +inline ErrorOr expand_range_to_page_boundaries(FlatPtr address, size_t size) +{ + if (Memory::page_round_up_would_wrap(size)) + return EINVAL; + + if ((address + size) < address) + return EINVAL; + + if (Memory::page_round_up_would_wrap(address + size)) + return EINVAL; + + auto base = VirtualAddress { address }.page_base(); + auto end = Memory::page_round_up(address + size); + + return Memory::VirtualRange { base, end - base.get() }; +} + } diff --git a/Kernel/Syscalls/mmap.cpp b/Kernel/Syscalls/mmap.cpp index 9660c8b1c2..4d2856fab8 100644 --- a/Kernel/Syscalls/mmap.cpp +++ b/Kernel/Syscalls/mmap.cpp @@ -250,23 +250,6 @@ ErrorOr Process::sys$mmap(Userspace use return region->vaddr().get(); } -static ErrorOr expand_range_to_page_boundaries(FlatPtr address, size_t size) -{ - if (Memory::page_round_up_would_wrap(size)) - return EINVAL; - - if ((address + size) < address) - return EINVAL; - - if (Memory::page_round_up_would_wrap(address + size)) - return EINVAL; - - auto base = VirtualAddress { address }.page_base(); - auto end = Memory::page_round_up(address + size); - - return Memory::VirtualRange { base, end - base.get() }; -} - ErrorOr Process::sys$mprotect(Userspace addr, size_t size, int prot) { VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this) @@ -276,7 +259,7 @@ ErrorOr Process::sys$mprotect(Userspace addr, size_t size, int p REQUIRE_PROMISE(prot_exec); } - auto range_to_mprotect = TRY(expand_range_to_page_boundaries(addr.ptr(), size)); + auto range_to_mprotect = TRY(Memory::expand_range_to_page_boundaries(addr.ptr(), size)); if (!range_to_mprotect.size()) return EINVAL; @@ -411,7 +394,7 @@ ErrorOr Process::sys$madvise(Userspace address, size_t size, int VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this) REQUIRE_PROMISE(stdio); - auto range_to_madvise = TRY(expand_range_to_page_boundaries(address.ptr(), size)); + auto range_to_madvise = TRY(Memory::expand_range_to_page_boundaries(address.ptr(), size)); if (!range_to_madvise.size()) return EINVAL; @@ -447,7 +430,7 @@ ErrorOr Process::sys$set_mmap_name(Userspace Process::sys$mremap(Userspace REQUIRE_PROMISE(stdio); auto params = TRY(copy_typed_from_user(user_params)); - auto old_range = TRY(expand_range_to_page_boundaries((FlatPtr)params.old_address, params.old_size)); + auto old_range = TRY(Memory::expand_range_to_page_boundaries((FlatPtr)params.old_address, params.old_size)); auto* old_region = address_space().find_region_from_range(old_range); if (!old_region)