From a933fabb8617b3905a328aa712ed0f7fcb87b5ee Mon Sep 17 00:00:00 2001 From: Bananymous Date: Tue, 15 Apr 2025 23:07:22 +0300 Subject: [PATCH] Kernel: Define constant USERSPACE_END This should be used for userspace generic allocations. Currently I used KERNEL_OFFSET, but I want to limit userspace to the actual lower half of the address space --- kernel/include/kernel/Memory/Types.h | 2 ++ kernel/kernel/Process.cpp | 6 +++--- kernel/kernel/Thread.cpp | 4 ++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/kernel/include/kernel/Memory/Types.h b/kernel/include/kernel/Memory/Types.h index f4587b1c..db37994d 100644 --- a/kernel/include/kernel/Memory/Types.h +++ b/kernel/include/kernel/Memory/Types.h @@ -4,8 +4,10 @@ #if ARCH(x86_64) #define KERNEL_OFFSET 0xFFFFFFFF80000000 + #define USERSPACE_END 0xFFFF800000000000 #elif ARCH(i686) #define KERNEL_OFFSET 0xC0000000 + #define USERSPACE_END 0xC0000000 #else #error #endif diff --git a/kernel/kernel/Process.cpp b/kernel/kernel/Process.cpp index 6fc41015..b2b1165f 100644 --- a/kernel/kernel/Process.cpp +++ b/kernel/kernel/Process.cpp @@ -1622,7 +1622,7 @@ namespace Kernel else page_flags |= PageTable::Flags::UserSupervisor; - AddressRange address_range { .start = 0x400000, .end = KERNEL_OFFSET }; + AddressRange address_range { .start = 0x400000, .end = USERSPACE_END }; if (args->flags & MAP_FIXED) { vaddr_t base_addr = reinterpret_cast(args->addr); @@ -1767,7 +1767,7 @@ namespace Kernel BAN::ErrorOr Process::sys_smo_map(SharedMemoryObjectManager::Key key) { - auto region = TRY(SharedMemoryObjectManager::get().map_object(key, page_table(), { .start = 0x400000, .end = KERNEL_OFFSET })); + auto region = TRY(SharedMemoryObjectManager::get().map_object(key, page_table(), { .start = 0x400000, .end = USERSPACE_END })); LockGuard _(m_process_lock); TRY(m_mapped_regions.push_back(BAN::move(region))); @@ -2522,7 +2522,7 @@ namespace Kernel goto unauthorized_access; // trying to access kernel space memory - if (vaddr + size > KERNEL_OFFSET) + if (vaddr + size > USERSPACE_END) goto unauthorized_access; if (vaddr == 0) diff --git a/kernel/kernel/Thread.cpp b/kernel/kernel/Thread.cpp index f6812b79..4318b2a2 100644 --- a/kernel/kernel/Thread.cpp +++ b/kernel/kernel/Thread.cpp @@ -103,7 +103,7 @@ namespace Kernel thread->m_kernel_stack = TRY(VirtualRange::create_to_vaddr_range( page_table, - 0x200000, KERNEL_OFFSET, + 0x200000, USERSPACE_END, kernel_stack_size, PageTable::Flags::ReadWrite | PageTable::Flags::Present, true @@ -111,7 +111,7 @@ namespace Kernel thread->m_userspace_stack = TRY(VirtualRange::create_to_vaddr_range( page_table, - 0x200000, KERNEL_OFFSET, + 0x200000, USERSPACE_END, userspace_stack_size, PageTable::Flags::UserSupervisor | PageTable::Flags::ReadWrite | PageTable::Flags::Present, true