]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.14-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 22 Aug 2022 11:44:22 +0000 (13:44 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 22 Aug 2022 11:44:22 +0000 (13:44 +0200)
added patches:
nios2-add-force_successful_syscall_return.patch
nios2-don-t-leave-nulls-in-sys_call_table.patch
nios2-fix-syscall-restart-checks.patch
nios2-page-fault-et.al.-are-not-restartable-syscalls.patch
nios2-restarts-apply-only-to-the-first-sigframe-we-build.patch
nios2-traced-syscall-does-need-to-check-the-syscall-number.patch

queue-4.14/nios2-add-force_successful_syscall_return.patch [new file with mode: 0644]
queue-4.14/nios2-don-t-leave-nulls-in-sys_call_table.patch [new file with mode: 0644]
queue-4.14/nios2-fix-syscall-restart-checks.patch [new file with mode: 0644]
queue-4.14/nios2-page-fault-et.al.-are-not-restartable-syscalls.patch [new file with mode: 0644]
queue-4.14/nios2-restarts-apply-only-to-the-first-sigframe-we-build.patch [new file with mode: 0644]
queue-4.14/nios2-traced-syscall-does-need-to-check-the-syscall-number.patch [new file with mode: 0644]
queue-4.14/series

diff --git a/queue-4.14/nios2-add-force_successful_syscall_return.patch b/queue-4.14/nios2-add-force_successful_syscall_return.patch
new file mode 100644 (file)
index 0000000..e73fb22
--- /dev/null
@@ -0,0 +1,61 @@
+From fd0c153daad135d0ec1a53c5dbe6936a724d6ae1 Mon Sep 17 00:00:00 2001
+From: Al Viro <viro@zeniv.linux.org.uk>
+Date: Mon, 8 Aug 2022 16:09:45 +0100
+Subject: nios2: add force_successful_syscall_return()
+
+From: Al Viro <viro@zeniv.linux.org.uk>
+
+commit fd0c153daad135d0ec1a53c5dbe6936a724d6ae1 upstream.
+
+If we use the ancient SysV syscall ABI, we'd better have tell the
+kernel how to claim that a negative return value is a success.
+Use ->orig_r2 for that - it's inaccessible via ptrace, so it's
+a fair game for changes and it's normally[*] non-negative on return
+from syscall.  Set to -1; syscall is not going to be restart-worthy
+by definition, so we won't interfere with that use either.
+
+[*] the only exception is rt_sigreturn(), where we skip the entire
+messing with r1/r2 anyway.
+
+Fixes: 82ed08dd1b0e ("nios2: Exception handling")
+Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
+Signed-off-by: Dinh Nguyen <dinguyen@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/nios2/include/asm/ptrace.h |    2 ++
+ arch/nios2/kernel/entry.S       |    6 ++++++
+ 2 files changed, 8 insertions(+)
+
+--- a/arch/nios2/include/asm/ptrace.h
++++ b/arch/nios2/include/asm/ptrace.h
+@@ -74,6 +74,8 @@ extern void show_regs(struct pt_regs *);
+       ((struct pt_regs *)((unsigned long)current_thread_info() + THREAD_SIZE)\
+               - 1)
++#define force_successful_syscall_return() (current_pt_regs()->orig_r2 = -1)
++
+ int do_syscall_trace_enter(void);
+ void do_syscall_trace_exit(void);
+ #endif /* __ASSEMBLY__ */
+--- a/arch/nios2/kernel/entry.S
++++ b/arch/nios2/kernel/entry.S
+@@ -213,6 +213,9 @@ local_restart:
+ translate_rc_and_ret:
+       movi    r1, 0
+       bge     r2, zero, 3f
++      ldw     r1, PT_ORIG_R2(sp)
++      addi    r1, r1, 1
++      beq     r1, zero, 3f
+       sub     r2, zero, r2
+       movi    r1, 1
+ 3:
+@@ -276,6 +279,9 @@ traced_system_call:
+ translate_rc_and_ret2:
+       movi    r1, 0
+       bge     r2, zero, 4f
++      ldw     r1, PT_ORIG_R2(sp)
++      addi    r1, r1, 1
++      beq     r1, zero, 4f
+       sub     r2, zero, r2
+       movi    r1, 1
+ 4:
diff --git a/queue-4.14/nios2-don-t-leave-nulls-in-sys_call_table.patch b/queue-4.14/nios2-don-t-leave-nulls-in-sys_call_table.patch
new file mode 100644 (file)
index 0000000..0b3d8f7
--- /dev/null
@@ -0,0 +1,39 @@
+From 45ec746c65097c25e77d24eae8fee0def5b6cc5d Mon Sep 17 00:00:00 2001
+From: Al Viro <viro@zeniv.linux.org.uk>
+Date: Mon, 8 Aug 2022 16:06:46 +0100
+Subject: nios2: don't leave NULLs in sys_call_table[]
+
+From: Al Viro <viro@zeniv.linux.org.uk>
+
+commit 45ec746c65097c25e77d24eae8fee0def5b6cc5d upstream.
+
+fill the gaps in there with sys_ni_syscall, as everyone does...
+
+Fixes: 82ed08dd1b0e ("nios2: Exception handling")
+Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
+Signed-off-by: Dinh Nguyen <dinguyen@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/nios2/kernel/entry.S         |    1 -
+ arch/nios2/kernel/syscall_table.c |    1 +
+ 2 files changed, 1 insertion(+), 1 deletion(-)
+
+--- a/arch/nios2/kernel/entry.S
++++ b/arch/nios2/kernel/entry.S
+@@ -193,7 +193,6 @@ local_restart:
+       movhi   r11, %hiadj(sys_call_table)
+       add     r1, r1, r11
+       ldw     r1, %lo(sys_call_table)(r1)
+-      beq     r1, r0, ret_invsyscall
+       /* Check if we are being traced */
+       GET_THREAD_INFO r11
+--- a/arch/nios2/kernel/syscall_table.c
++++ b/arch/nios2/kernel/syscall_table.c
+@@ -25,5 +25,6 @@
+ #define __SYSCALL(nr, call) [nr] = (call),
+ void *sys_call_table[__NR_syscalls] = {
++      [0 ... __NR_syscalls-1] = sys_ni_syscall,
+ #include <asm/unistd.h>
+ };
diff --git a/queue-4.14/nios2-fix-syscall-restart-checks.patch b/queue-4.14/nios2-fix-syscall-restart-checks.patch
new file mode 100644 (file)
index 0000000..58efcca
--- /dev/null
@@ -0,0 +1,35 @@
+From 2d631bd58fe0ea3e3350212e23c9aba1fb606514 Mon Sep 17 00:00:00 2001
+From: Al Viro <viro@zeniv.linux.org.uk>
+Date: Mon, 8 Aug 2022 16:08:48 +0100
+Subject: nios2: fix syscall restart checks
+
+From: Al Viro <viro@zeniv.linux.org.uk>
+
+commit 2d631bd58fe0ea3e3350212e23c9aba1fb606514 upstream.
+
+sys_foo() returns -512 (aka -ERESTARTSYS) => do_signal() sees
+512 in r2 and 1 in r1.
+
+sys_foo() returns 512 => do_signal() sees 512 in r2 and 0 in r1.
+
+The former is restart-worthy; the latter obviously isn't.
+
+Fixes: b53e906d255d ("nios2: Signal handling support")
+Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
+Signed-off-by: Dinh Nguyen <dinguyen@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/nios2/kernel/signal.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/arch/nios2/kernel/signal.c
++++ b/arch/nios2/kernel/signal.c
+@@ -240,7 +240,7 @@ static int do_signal(struct pt_regs *reg
+       /*
+        * If we were from a system call, check for system call restarting...
+        */
+-      if (regs->orig_r2 >= 0) {
++      if (regs->orig_r2 >= 0 && regs->r1) {
+               continue_addr = regs->ea;
+               restart_addr = continue_addr - 4;
+               retval = regs->r2;
diff --git a/queue-4.14/nios2-page-fault-et.al.-are-not-restartable-syscalls.patch b/queue-4.14/nios2-page-fault-et.al.-are-not-restartable-syscalls.patch
new file mode 100644 (file)
index 0000000..fc2926a
--- /dev/null
@@ -0,0 +1,53 @@
+From 8535c239ac674f7ead0f2652932d35c52c4123b2 Mon Sep 17 00:00:00 2001
+From: Al Viro <viro@zeniv.linux.org.uk>
+Date: Mon, 8 Aug 2022 16:06:04 +0100
+Subject: nios2: page fault et.al. are *not* restartable syscalls...
+
+From: Al Viro <viro@zeniv.linux.org.uk>
+
+commit 8535c239ac674f7ead0f2652932d35c52c4123b2 upstream.
+
+make sure that ->orig_r2 is negative for everything except
+the syscalls.
+
+Fixes: 82ed08dd1b0e ("nios2: Exception handling")
+Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
+Signed-off-by: Dinh Nguyen <dinguyen@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/nios2/include/asm/entry.h |    3 ++-
+ arch/nios2/kernel/entry.S      |    4 +---
+ 2 files changed, 3 insertions(+), 4 deletions(-)
+
+--- a/arch/nios2/include/asm/entry.h
++++ b/arch/nios2/include/asm/entry.h
+@@ -50,7 +50,8 @@
+       stw     r13, PT_R13(sp)
+       stw     r14, PT_R14(sp)
+       stw     r15, PT_R15(sp)
+-      stw     r2, PT_ORIG_R2(sp)
++      movi    r24, -1
++      stw     r24, PT_ORIG_R2(sp)
+       stw     r7, PT_ORIG_R7(sp)
+       stw     ra, PT_RA(sp)
+--- a/arch/nios2/kernel/entry.S
++++ b/arch/nios2/kernel/entry.S
+@@ -185,6 +185,7 @@ ENTRY(handle_system_call)
+       ldw     r5, PT_R5(sp)
+ local_restart:
++      stw     r2, PT_ORIG_R2(sp)
+       /* Check that the requested system call is within limits */
+       movui   r1, __NR_syscalls
+       bgeu    r2, r1, ret_invsyscall
+@@ -336,9 +337,6 @@ external_interrupt:
+       /* skip if no interrupt is pending */
+       beq     r12, r0, ret_from_interrupt
+-      movi    r24, -1
+-      stw     r24, PT_ORIG_R2(sp)
+-
+       /*
+        * Process an external hardware interrupt.
+        */
diff --git a/queue-4.14/nios2-restarts-apply-only-to-the-first-sigframe-we-build.patch b/queue-4.14/nios2-restarts-apply-only-to-the-first-sigframe-we-build.patch
new file mode 100644 (file)
index 0000000..f44a95d
--- /dev/null
@@ -0,0 +1,27 @@
+From 411a76b7219555c55867466c82d70ce928d6c9e1 Mon Sep 17 00:00:00 2001
+From: Al Viro <viro@zeniv.linux.org.uk>
+Date: Mon, 8 Aug 2022 16:09:16 +0100
+Subject: nios2: restarts apply only to the first sigframe we build...
+
+From: Al Viro <viro@zeniv.linux.org.uk>
+
+commit 411a76b7219555c55867466c82d70ce928d6c9e1 upstream.
+
+Fixes: b53e906d255d ("nios2: Signal handling support")
+Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
+Signed-off-by: Dinh Nguyen <dinguyen@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/nios2/kernel/signal.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/arch/nios2/kernel/signal.c
++++ b/arch/nios2/kernel/signal.c
+@@ -261,6 +261,7 @@ static int do_signal(struct pt_regs *reg
+                       regs->ea = restart_addr;
+                       break;
+               }
++              regs->orig_r2 = -1;
+       }
+       if (get_signal(&ksig)) {
diff --git a/queue-4.14/nios2-traced-syscall-does-need-to-check-the-syscall-number.patch b/queue-4.14/nios2-traced-syscall-does-need-to-check-the-syscall-number.patch
new file mode 100644 (file)
index 0000000..8b6a0e8
--- /dev/null
@@ -0,0 +1,47 @@
+From 25ba820ef36bdbaf9884adeac69b6e1821a7df76 Mon Sep 17 00:00:00 2001
+From: Al Viro <viro@zeniv.linux.org.uk>
+Date: Mon, 8 Aug 2022 16:07:21 +0100
+Subject: nios2: traced syscall does need to check the syscall number
+
+From: Al Viro <viro@zeniv.linux.org.uk>
+
+commit 25ba820ef36bdbaf9884adeac69b6e1821a7df76 upstream.
+
+all checks done before letting the tracer modify the register
+state are worthless...
+
+Fixes: 82ed08dd1b0e ("nios2: Exception handling")
+Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
+Signed-off-by: Dinh Nguyen <dinguyen@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/nios2/kernel/entry.S |   11 ++++++++---
+ 1 file changed, 8 insertions(+), 3 deletions(-)
+
+--- a/arch/nios2/kernel/entry.S
++++ b/arch/nios2/kernel/entry.S
+@@ -255,9 +255,9 @@ traced_system_call:
+       ldw     r6, PT_R6(sp)
+       ldw     r7, PT_R7(sp)
+-      /* Fetch the syscall function, we don't need to check the boundaries
+-       * since this is already done.
+-       */
++      /* Fetch the syscall function. */
++      movui   r1, __NR_syscalls
++      bgeu    r2, r1, traced_invsyscall
+       slli    r1, r2, 2
+       movhi   r11,%hiadj(sys_call_table)
+       add     r1, r1, r11
+@@ -287,6 +287,11 @@ end_translate_rc_and_ret2:
+       RESTORE_SWITCH_STACK
+       br      ret_from_exception
++      /* If the syscall number was invalid return ENOSYS */
++traced_invsyscall:
++      movi    r2, -ENOSYS
++      br      translate_rc_and_ret2
++
+ Luser_return:
+       GET_THREAD_INFO r11                     /* get thread_info pointer */
+       ldw     r10, TI_FLAGS(r11)              /* get thread_info->flags */
index 31e4c577583d6873be4a3948a09954e2303a1708..c577ddb47a2c80fe6c61758018958d797e4dd12e 100644 (file)
@@ -194,3 +194,9 @@ vsock-set-socket-state-back-to-ss_unconnected-in-vsock_connect_timeout.patch
 tools-build-switch-to-new-openssl-api-for-test-libcrypto.patch
 xen-xenbus-fix-return-type-in-xenbus_file_read.patch
 atm-idt77252-fix-use-after-free-bugs-caused-by-tst_timer.patch
+nios2-page-fault-et.al.-are-not-restartable-syscalls.patch
+nios2-don-t-leave-nulls-in-sys_call_table.patch
+nios2-traced-syscall-does-need-to-check-the-syscall-number.patch
+nios2-fix-syscall-restart-checks.patch
+nios2-restarts-apply-only-to-the-first-sigframe-we-build.patch
+nios2-add-force_successful_syscall_return.patch