| 123456789101112131415161718192021 |
- # nios2: gate syscall restart on the error flag (r7), not the stale r1.
- # do_signal() used regs->r1 (the user's 'at' register, an arbitrary value) to
- # decide whether to do syscall-restart processing. That both missed real
- # restarts (ERESTARTNOHAND leaked as errno 514 out of pselect6) and restarted
- # SUCCESSFUL syscalls whose return value collides with a restart code
- # (waitpid -> child pid 512..516, read -> 512..516 bytes -> exit 255).
- # Restart codes are only ever error returns, which nios2 flags in r7.
- # Not upstream yet; the submittable version lives in the uclibc-ng workspace
- # under git/kernel-submit/.
- diff -Nur linux-6.5.10.orig/arch/nios2/kernel/signal.c linux-6.5.10/arch/nios2/kernel/signal.c
- --- linux-6.5.10.orig/arch/nios2/kernel/signal.c
- +++ linux-6.5.10/arch/nios2/kernel/signal.c
- @@ -242,7 +242,7 @@
- /*
- * If we were from a system call, check for system call restarting...
- */
- - if (regs->orig_r2 >= 0 && regs->r1) {
- + if (regs->orig_r2 >= 0 && regs->r7) {
- continue_addr = regs->ea;
- restart_addr = continue_addr - 4;
- retval = regs->r2;
|