From a653c55941c699cd1e5a47af58dccf25428bd7be Mon Sep 17 00:00:00 2001 From: "Justin C. Miller" Date: Sat, 18 May 2019 18:11:08 -0700 Subject: [PATCH] Use 0 instead of syscall_invalid in syscall jump list --- src/kernel/syscall.cpp | 9 ++++----- src/kernel/syscall.s | 4 ++++ 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/kernel/syscall.cpp b/src/kernel/syscall.cpp index 2a00e46..20acd1b 100644 --- a/src/kernel/syscall.cpp +++ b/src/kernel/syscall.cpp @@ -145,15 +145,14 @@ syscall_enable() static constexpr unsigned num_calls = static_cast(syscall::MAX); - for (unsigned i = 0; i < num_calls; ++i) { - syscall_registry[i] = reinterpret_cast(syscall_invalid); - syscall_names[i] = nullptr; - } + kutil::memset(&syscall_registry, 0, sizeof(syscall_registry)); + kutil::memset(&syscall_names, 0, sizeof(syscall_names)); #define SYSCALL(id, name, result, ...) \ syscall_registry[id] = reinterpret_cast(syscalls::name); \ syscall_names[id] = #name; \ - static_assert( id <= num_calls, "Syscall " #name " has id > syscall::MAX" ); + static_assert( id <= num_calls, "Syscall " #name " has id > syscall::MAX" ); \ + log::debug(logs::syscall, "Enabling syscall 0x%02x as " #name , id); #include "syscalls.inc" #undef SYSCALL } diff --git a/src/kernel/syscall.s b/src/kernel/syscall.s index 82ac6ae..5fae6ea 100644 --- a/src/kernel/syscall.s +++ b/src/kernel/syscall.s @@ -34,12 +34,16 @@ syscall_handler_prelude: cmp rax, MAX_SYSCALLS jle .ok_syscall +.bad_syscall: mov rdi, rax call syscall_invalid .ok_syscall: lea r11, [rel syscall_registry] mov r11, [r11 + rax * 8] + cmp r11, 0 + je .bad_syscall + call r11 inc qword [rel __counter_syscall_sysret]