[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <52f63e40-541f-4ed8-9d05-626eab4b39cb@arm.com>
Date: Tue, 9 Dec 2025 14:46:06 +0100
From: Kevin Brodsky <kevin.brodsky@....com>
To: Jinjie Ruan <ruanjinjie@...wei.com>, catalin.marinas@....com,
will@...nel.org, oleg@...hat.com, tglx@...utronix.de, peterz@...radead.org,
luto@...nel.org, shuah@...nel.org, kees@...nel.org, wad@...omium.org,
deller@....de, macro@...am.me.uk, charlie@...osinc.com, ldv@...ace.io,
mark.rutland@....com, song@...nel.org, ryan.roberts@....com,
ada.coupriediaz@....com, anshuman.khandual@....com, broonie@...nel.org,
pengcan@...inos.cn, dvyukov@...gle.com,
linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org,
linux-kselftest@...r.kernel.org
Subject: Re: [PATCH v9 03/16] arm64/ptrace: Return early for
ptrace_report_syscall_entry() error
On 04/12/2025 09:21, Jinjie Ruan wrote:
> The generic entry abort the syscall_trace_enter() sequence if
> ptrace_report_syscall_entry() errors out, but arm64 not.
>
> As the ptrace_report_syscall_entry() comment said, the calling arch code
> should abort the system call and must prevent normal entry so no system
> call is made if ptrace_report_syscall_entry() return nonzero.
This patch is now in the right position, which means that arm64 does
abort the syscall already without this patch. What we're changing here
is that the tracing sequence is interrupted. The comment you're
referring to says nothing about tracing so I'm not sure it helps to
refer to it.
Otherwise:
Reviewed-by: Kevin Brodsky <kevin.brodsky@....com>
> In preparation for moving arm64 over to the generic entry code,
> return early if ptrace_report_syscall_entry() encounters an error.
>
> Signed-off-by: Jinjie Ruan <ruanjinjie@...wei.com>
> ---
> arch/arm64/kernel/ptrace.c | 14 +++++++++-----
> 1 file changed, 9 insertions(+), 5 deletions(-)
>
> diff --git a/arch/arm64/kernel/ptrace.c b/arch/arm64/kernel/ptrace.c
> index 4532e9831856..3926ce6aa268 100644
> --- a/arch/arm64/kernel/ptrace.c
> +++ b/arch/arm64/kernel/ptrace.c
> @@ -2346,15 +2346,18 @@ static __always_inline unsigned long ptrace_save_reg(struct pt_regs *regs,
> return saved_reg;
> }
>
> -static void report_syscall_entry(struct pt_regs *regs)
> +static int report_syscall_entry(struct pt_regs *regs)
> {
> unsigned long saved_reg;
> - int regno;
> + int regno, ret;
>
> saved_reg = ptrace_save_reg(regs, PTRACE_SYSCALL_ENTER, ®no);
> - if (ptrace_report_syscall_entry(regs))
> + ret = ptrace_report_syscall_entry(regs);
> + if (ret)
> forget_syscall(regs);
> regs->regs[regno] = saved_reg;
> +
> + return ret;
> }
>
> static void report_syscall_exit(struct pt_regs *regs)
> @@ -2381,10 +2384,11 @@ static void report_syscall_exit(struct pt_regs *regs)
> int syscall_trace_enter(struct pt_regs *regs)
> {
> unsigned long flags = read_thread_flags();
> + int ret;
>
> if (flags & (_TIF_SYSCALL_EMU | _TIF_SYSCALL_TRACE)) {
> - report_syscall_entry(regs);
> - if (flags & _TIF_SYSCALL_EMU)
> + ret = report_syscall_entry(regs);
> + if (ret || (flags & _TIF_SYSCALL_EMU))
> return NO_SYSCALL;
> }
>
Powered by blists - more mailing lists