From 58cfd46a5a7f4e41fb2da5ea253b9ff27979e5d9 Mon Sep 17 00:00:00 2001 From: Timon Kruiper Date: Wed, 25 Jan 2023 16:04:13 +0100 Subject: [PATCH] Kernel: Add Syscall.cpp to aarch64 build --- Kernel/CMakeLists.txt | 2 +- Kernel/Syscall.cpp | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/Kernel/CMakeLists.txt b/Kernel/CMakeLists.txt index bc448149ba..48401971fc 100644 --- a/Kernel/CMakeLists.txt +++ b/Kernel/CMakeLists.txt @@ -261,6 +261,7 @@ set(KERNEL_SOURCES Scheduler.cpp ScopedCritical.cpp StdLib.cpp + Syscall.cpp Syscalls/anon_create.cpp Syscalls/alarm.cpp Syscalls/beep.cpp @@ -402,7 +403,6 @@ if ("${SERENITY_ARCH}" STREQUAL "x86_64") Interrupts/SpuriousInterruptHandler.cpp kprintf.cpp Panic.cpp - Syscall.cpp ) set(KERNEL_SOURCES diff --git a/Kernel/Syscall.cpp b/Kernel/Syscall.cpp index bb01695bb3..37a8434d60 100644 --- a/Kernel/Syscall.cpp +++ b/Kernel/Syscall.cpp @@ -7,7 +7,6 @@ #include #include -#include #include #include #include @@ -16,6 +15,10 @@ #include #include +#if ARCH(X86_64) +# include +#endif + namespace Kernel { extern "C" void syscall_handler(TrapFrame*) __attribute__((used)); @@ -61,7 +64,9 @@ static ErrorOr handle(RegisterState&, FlatPtr function, FlatPtr arg1, F UNMAP_AFTER_INIT void initialize() { +#if ARCH(X86_64) register_user_callable_interrupt_handler(syscall_vector, syscall_asm_entry); +#endif } using Handler = auto(Process::*)(FlatPtr, FlatPtr, FlatPtr, FlatPtr) -> ErrorOr; @@ -140,8 +145,14 @@ ErrorOr handle(RegisterState& regs, FlatPtr function, FlatPtr arg1, Fla NEVER_INLINE void syscall_handler(TrapFrame* trap) { +#if ARCH(X86_64) // Make sure SMAP protection is enabled on syscall entry. clac(); +#elif ARCH(AARCH64) + // FIXME: Implement the security mechanism for aarch64 +#else +# error Unknown architecture +#endif auto& regs = *trap->regs; auto* current_thread = Thread::current(); @@ -161,6 +172,7 @@ NEVER_INLINE void syscall_handler(TrapFrame* trap) current_thread->yield_if_stopped(); +#if ARCH(X86_64) // Apply a random offset in the range 0-255 to the stack pointer, // to make kernel stacks a bit less deterministic. u32 lsw; @@ -177,6 +189,11 @@ NEVER_INLINE void syscall_handler(TrapFrame* trap) if ((flags & (iopl_mask)) != 0) { PANIC("Syscall from process with IOPL != 0"); } +#elif ARCH(AARCH64) + // FIXME: Implement the security mechanism for aarch64 +#else +# error Unknown architecture +#endif Memory::MemoryManager::validate_syscall_preconditions(process, regs);