ACK: [SRU][Focal][PATCHv2] s390/ptrace: return -ENOSYS when invalid syscall is supplied
Stefan Bader
stefan.bader at canonical.com
Thu Dec 17 08:04:30 UTC 2020
On 15.12.20 18:35, Dan Streetman wrote:
> From: Sven Schnelle <svens at linux.ibm.com>
>
> BugLink: https://bugs.launchpad.net/bugs/1895132
>
> The current code returns the syscall number which an invalid
> syscall number is supplied and tracing is enabled. This makes
> the strace testsuite fail.
>
> Signed-off-by: Sven Schnelle <svens at linux.ibm.com>
> Signed-off-by: Vasily Gorbik <gor at linux.ibm.com>
> (backported from commit cd29fa798001075a554b978df3a64e6656c25794)
> Signed-off-by: Dan Streetman <ddstreet at canonical.com>
Acked-by: Stefan Bader <stefan.bader at canonical.com>
>
> ---
> changes since v1: removed return before added goto
>
> arch/s390/kernel/ptrace.c | 17 ++++++++++++-----
> 1 file changed, 12 insertions(+), 5 deletions(-)
>
> diff --git a/arch/s390/kernel/ptrace.c b/arch/s390/kernel/ptrace.c
> index c6aef2ecf289..ad74472ce967 100644
> --- a/arch/s390/kernel/ptrace.c
> +++ b/arch/s390/kernel/ptrace.c
> @@ -867,6 +867,7 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
> asmlinkage long do_syscall_trace_enter(struct pt_regs *regs)
> {
> unsigned long mask = -1UL;
> + long ret = -1;
>
> /*
> * The sysc_tracesys code in entry.S stored the system
> @@ -878,27 +879,33 @@ asmlinkage long do_syscall_trace_enter(struct pt_regs *regs)
> * Tracing decided this syscall should not happen. Skip
> * the system call and the system call restart handling.
> */
> - clear_pt_regs_flag(regs, PIF_SYSCALL);
> - return -1;
> + goto skip;
> }
>
> /* Do the secure computing check after ptrace. */
> if (secure_computing(NULL)) {
> /* seccomp failures shouldn't expose any additional code. */
> - return -1;
> + goto skip;
> }
>
> if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))
> - trace_sys_enter(regs, regs->gprs[2]);
> + trace_sys_enter(regs, regs->int_code & 0xffff);
>
> if (is_compat_task())
> mask = 0xffffffff;
>
> - audit_syscall_entry(regs->gprs[2], regs->orig_gpr2 & mask,
> + audit_syscall_entry(regs->int_code & 0xffff, regs->orig_gpr2 & mask,
> regs->gprs[3] &mask, regs->gprs[4] &mask,
> regs->gprs[5] &mask);
>
> + if ((signed long)regs->gprs[2] >= NR_syscalls) {
> + regs->gprs[2] = -ENOSYS;
> + ret = -ENOSYS;
> + }
> return regs->gprs[2];
> +skip:
> + clear_pt_regs_flag(regs, PIF_SYSCALL);
> + return ret;
> }
>
> asmlinkage void do_syscall_trace_exit(struct pt_regs *regs)
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20201217/468e4ae2/attachment-0001.sig>
More information about the kernel-team
mailing list