nios2-syscall-restart.patch 1.1 KB

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