Re: [PATCH] powerpc/entry: Clear TIF_SYSCALL_RET before syscall error return
Venkat <[email protected]>
| Newsgroups | gmane.linux.ports.ppc.embedded |
|---|---|
| Message-ID | <51BB4B46-5227-4FE6-A368-A05E45CA4915__4678.8655848772$1788254267$gmane$org@linux.ibm.com> |
> On 28 Aug 2026, at 11:08 AM, Shrikanth Hegde <[email protected]> wrote: > > Shivaprasad reported a boot failure due to userspace processes crash on > abort() from libc.so.6. It was bisected to merge request > commit '3424d8c18a7d ("Merge tag 'core-entry-2026-08-17' of > git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip")' > > Upon checking the merge, when syscall_enter_from_user_mode_randomize_stack > fails, which could happen when a tracer like seccomp or ptrace intercepts > and skips the syscall, the code returns to userspace immediately without > clearing the intermediate flag which was set. > > When the next syscall is made, it immediately aborts the valid syscall > since the flag is still set. Hence clear the flag on occurrence of first > failure. > > Reported-by: Shivaprasad G Bhat <[email protected]> > Closes: https://lore.kernel.org/all/[email protected]/ > Fixes: 3424d8c18a7d ("Merge tag 'core-entry-2026-08-17' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip") > Signed-off-by: Shrikanth Hegde <[email protected]> > --- Tested-by: Venkat Rao Bagalkote <[email protected]> Regards, Venkat. > PS: I have kept the block below since earlier code was checking it > regardless of result of syscall_enter_from_user_mode. If it turns out > to be a redundant, it can be removed later. > > arch/powerpc/kernel/syscall.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/arch/powerpc/kernel/syscall.c b/arch/powerpc/kernel/syscall.c > index 4916c205c4bb..fbefe1927b10 100644 > --- a/arch/powerpc/kernel/syscall.c > +++ b/arch/powerpc/kernel/syscall.c > @@ -18,8 +18,10 @@ notrace long system_call_exception(struct pt_regs *regs, unsigned long r0) > long ret; > syscall_fn f; > > - if (unlikely(!syscall_enter_from_user_mode_randomize_stack(regs, &r0))) > + if (unlikely(!syscall_enter_from_user_mode_randomize_stack(regs, &r0))) { > + clear_thread_flag(TIF_SYSCALL_RET); > return syscall_get_error(current, regs); > + } > > if (unlikely(test_and_clear_thread_flag(TIF_SYSCALL_RET))) > return syscall_get_error(current, regs); > -- > 2.47.3 >