From: Tulio A M Mendes Date: Tue, 10 Feb 2026 04:08:02 +0000 (-0300) Subject: fix: replace hardcoded 0xC0000000 in syscall.c with hal_mm_kernel_virt_base() X-Git-Url: https://projects.tadryanom.me/?a=commitdiff_plain;h=7715d2b4ce2e1ad6a62f3cba19f40baff5f13c21;p=AdrOS.git fix: replace hardcoded 0xC0000000 in syscall.c with hal_mm_kernel_virt_base() sys_brk and mmap used hardcoded 0xC0000000U (x86 kernel virtual base) for bounds checking. Replace with hal_mm_kernel_virt_base() so the code is architecture-independent. Passes: make, cppcheck, QEMU smoke test. --- diff --git a/src/kernel/syscall.c b/src/kernel/syscall.c index 41739fd..75cd509 100644 --- a/src/kernel/syscall.c +++ b/src/kernel/syscall.c @@ -18,6 +18,7 @@ #include "vmm.h" #include "pmm.h" #include "timer.h" +#include "hal/mm.h" #include "hal/cpu.h" @@ -1497,7 +1498,7 @@ static uintptr_t syscall_mmap_impl(uintptr_t addr, uint32_t length, uint32_t pro uintptr_t base; if (flags & MAP_FIXED) { if (addr == 0 || (addr & 0xFFF)) return (uintptr_t)-EINVAL; - if (addr >= 0xC0000000U) return (uintptr_t)-EINVAL; + if (hal_mm_kernel_virt_base() && addr >= hal_mm_kernel_virt_base()) return (uintptr_t)-EINVAL; base = addr; } else { base = mmap_find_free(aligned_len); @@ -1559,12 +1560,12 @@ static uintptr_t syscall_brk_impl(uintptr_t addr) { return current_process->heap_break; } - const uintptr_t X86_KERN_BASE = 0xC0000000U; + const uintptr_t KERN_BASE = hal_mm_kernel_virt_base(); const uintptr_t USER_STACK_BASE = 0x00800000U; if (addr < current_process->heap_start) return current_process->heap_break; if (addr >= USER_STACK_BASE) return current_process->heap_break; - if (addr >= X86_KERN_BASE) return current_process->heap_break; + if (KERN_BASE && addr >= KERN_BASE) return current_process->heap_break; uintptr_t old_brk = current_process->heap_break; uintptr_t new_brk = (addr + 0xFFFU) & ~(uintptr_t)0xFFFU;