mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 13:07:46 +00:00
Kernel: Create and use USER_RANGE_CEILING
We had an inconsistency in valid user addresses. is_user_range() was checking against the kernel base address, but previous changes caused the maximum valid user addressable range to be 32 MiB below that. This patch stops mmap(MAP_FIXED) of a range between these two bounds from panic-ing the kernel in RangeAllocator::allocate_specific.
This commit is contained in:
parent
ab196b484a
commit
578d45b480
3 changed files with 4 additions and 2 deletions
|
@ -278,7 +278,7 @@ void VMObject::for_each_region(Callback callback)
|
|||
|
||||
inline bool is_user_address(VirtualAddress vaddr)
|
||||
{
|
||||
return vaddr.get() < KERNEL_BASE;
|
||||
return vaddr.get() < USER_RANGE_CEILING;
|
||||
}
|
||||
|
||||
inline bool is_user_range(VirtualAddress vaddr, size_t size)
|
||||
|
|
|
@ -63,7 +63,7 @@ UNMAP_AFTER_INIT void PageDirectory::allocate_kernel_directory()
|
|||
PageDirectory::PageDirectory(const RangeAllocator* parent_range_allocator)
|
||||
{
|
||||
constexpr FlatPtr userspace_range_base = 0x00800000;
|
||||
constexpr FlatPtr userspace_range_ceiling = 0xbe000000;
|
||||
constexpr FlatPtr userspace_range_ceiling = USER_RANGE_CEILING;
|
||||
|
||||
ScopedSpinLock lock(s_mm_lock);
|
||||
if (parent_range_allocator) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue