]> git.baikalelectronics.ru Git - kernel.git/commit
sh: fix syscall tracing
authorRich Felker <dalias@libc.org>
Sat, 29 Aug 2020 01:01:41 +0000 (21:01 -0400)
committerRich Felker <dalias@libc.org>
Mon, 14 Sep 2020 01:22:55 +0000 (21:22 -0400)
commit200cf70d082f59b1a83ffb58ffeb409cc7731a16
treed644d9e035223476718925fee68c57f1d13719a9
parent7794b0a631c6ab076c20252b611008203fe3fb6c
sh: fix syscall tracing

Addition of SECCOMP_FILTER exposed a longstanding bug in
do_syscall_trace_enter, whereby r0 (the 5th argument register) was
mistakenly used where r3 (syscall_nr) was intended. By overwriting r0
rather than r3 with -1 when attempting to block a syscall, the
existing code would instead have caused the syscall to execute with an
argument clobbered.

Commit a39806ac4bf27ab1 then introduced skipping of the syscall when
do_syscall_trace_enter returns -1, so that the return value set by
seccomp filters would not be clobbered by -ENOSYS. This eliminated the
clobbering of the 5th argument register, but instead caused syscalls
made with a 5th argument of -1 to be misinterpreted as a request by
do_syscall_trace_enter to suppress the syscall.

Fixes: a39806ac4bf27ab1 ("sh: Add SECCOMP_FILTER")
Fixes: 814098d4ce4f8c2a ("sh: Make syscall tracer use tracehook notifiers, add TIF_NOTIFY_RESUME.")
Tested-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
Signed-off-by: Rich Felker <dalias@libc.org>
arch/sh/kernel/entry-common.S
arch/sh/kernel/ptrace_32.c