From ca69d69a304d5668a8c95d1de5c6c6fa71ed9936 Mon Sep 17 00:00:00 2001 From: Andrew Waterman Date: Mon, 11 Apr 2022 01:22:16 -0700 Subject: Handle unimplemented syscalls gracefully We previously kernel-panicked because that made it more obvious when a syscall implementation was missing. These days, it's more common that the C library will do something sensible in response to returning -ENOSYS. Favor that approach to avoid frustrating users. --- pk/syscall.c | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/pk/syscall.c b/pk/syscall.c index 9c430fd..ec53b32 100644 --- a/pk/syscall.c +++ b/pk/syscall.c @@ -617,7 +617,6 @@ long do_syscall(long a0, long a1, long a2, long a3, long a4, long a5, unsigned l [SYS_munmap] = sys_munmap, [SYS_mremap] = sys_mremap, [SYS_mprotect] = sys_mprotect, - [SYS_prlimit64] = sys_stub_nosys, [SYS_rt_sigaction] = sys_rt_sigaction, [SYS_gettimeofday] = sys_gettimeofday, [SYS_times] = sys_times, @@ -628,18 +627,9 @@ long do_syscall(long a0, long a1, long a2, long a3, long a4, long a5, unsigned l [SYS_getdents] = sys_getdents, [SYS_dup] = sys_dup, [SYS_dup3] = sys_dup3, - [SYS_readlinkat] = sys_stub_nosys, [SYS_rt_sigprocmask] = sys_stub_success, - [SYS_ioctl] = sys_stub_nosys, [SYS_clock_gettime] = sys_clock_gettime, - [SYS_getrusage] = sys_stub_nosys, - [SYS_getrlimit] = sys_stub_nosys, - [SYS_setrlimit] = sys_stub_nosys, [SYS_chdir] = sys_chdir, - [SYS_set_tid_address] = sys_stub_nosys, - [SYS_set_robust_list] = sys_stub_nosys, - [SYS_madvise] = sys_stub_nosys, - [SYS_sysinfo] = sys_stub_nosys, }; const static void* old_syscall_table[] = { @@ -661,7 +651,7 @@ long do_syscall(long a0, long a1, long a2, long a3, long a4, long a5, unsigned l f = old_syscall_table[n - OLD_SYSCALL_THRESHOLD]; if (!f) - panic("bad syscall #%ld!",n); + return sys_stub_nosys(); f = (void*)pa2kva(f); -- cgit v1.1