Index: clean-start/arch/x86_64/kernel/entry.S =================================================================== --- clean-start.orig/arch/x86_64/kernel/entry.S +++ clean-start/arch/x86_64/kernel/entry.S @@ -241,6 +241,7 @@ ENTRY(system_call) GET_THREAD_INFO(%rcx) testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP),threadinfo_flags(%rcx) jnz tracesys + jmp logdev_trace cmpq $__NR_syscall_max,%rax ja badsys movq %r10,%rcx @@ -312,6 +313,25 @@ badsys: movq $-ENOSYS,RAX-ARGOFFSET(%rsp) jmp ret_from_sys_call + /* Do logdev tracing */ +logdev_trace: + SAVE_REST + movq $-ENOSYS,RAX(%rsp) + FIXUP_TOP_OF_STACK %rdi + movq %rsp,%rdi + call logdev_syscall_trace_enter + LOAD_ARGS ARGOFFSET /* reload args from stack in case ptrace changed it */ + RESTORE_REST + cmpq $__NR_syscall_max,%rax + movq $-ENOSYS,%rcx + cmova %rcx,%rax + ja 1f + movq %r10,%rcx /* fixup for C */ + call *sys_call_table(,%rax,8) +1: movq %rax,RAX-ARGOFFSET(%rsp) + /* Use IRET because user could have changed frame */ + jmp int_ret_from_sys_call + /* Do syscall tracing */ tracesys: SAVE_REST Index: clean-start/kernel/logdev/logdev.c =================================================================== --- clean-start.orig/kernel/logdev/logdev.c +++ clean-start/kernel/logdev/logdev.c @@ -1258,6 +1258,12 @@ fail: goto out; } +asmlinkage void logdev_syscall_trace_enter(struct pt_regs *regs) +{ + ltprint("%s:%d calling syscall %ld\n", + current->comm, current->pid, regs->orig_rax); +} + EXPORT_SYMBOL_GPL(logdev_record_switch); EXPORT_SYMBOL_GPL(logdev_print); EXPORT_SYMBOL_GPL(logdev_print_time);