aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Burton <[email protected]>2018-06-14 10:20:54 -0700
committerPaul Burton <[email protected]>2018-06-19 21:13:56 -0700
commit9bcf53598dfe1bd8caaf8e03738d3cc51d45904e (patch)
treeee25419bb284148763c5a9cd2ae30424d006ca44
parent9ea141ad54716d48e79d0093052c12ed67debf09 (diff)
MIPS: Add syscall detection for restartable sequences
Syscalls are not allowed inside restartable sequences, so add a call to rseq_syscall() at the very beginning of the system call exit path when CONFIG_DEBUG_RSEQ=y. This will help us to detect whether there is a syscall issued erroneously inside a restartable sequence. Signed-off-by: Paul Burton <[email protected]> Reviewed-by: James Hogan <[email protected]> Patchwork: https://patchwork.linux-mips.org/patch/19522/ Cc: Ralf Baechle <[email protected]> Cc: Mathieu Desnoyers <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: Paul E. McKenney <[email protected]> Cc: Boqun Feng <[email protected]> Cc: [email protected] Cc: [email protected]
-rw-r--r--arch/mips/kernel/entry.S8
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/mips/kernel/entry.S b/arch/mips/kernel/entry.S
index 38a302919e6b..d7de8adcfcc8 100644
--- a/arch/mips/kernel/entry.S
+++ b/arch/mips/kernel/entry.S
@@ -79,6 +79,10 @@ FEXPORT(ret_from_fork)
jal schedule_tail # a0 = struct task_struct *prev
FEXPORT(syscall_exit)
+#ifdef CONFIG_DEBUG_RSEQ
+ move a0, sp
+ jal rseq_syscall
+#endif
local_irq_disable # make sure need_resched and
# signals dont change between
# sampling and return
@@ -141,6 +145,10 @@ work_notifysig: # deal with pending signals and
j resume_userspace_check
FEXPORT(syscall_exit_partial)
+#ifdef CONFIG_DEBUG_RSEQ
+ move a0, sp
+ jal rseq_syscall
+#endif
local_irq_disable # make sure need_resched doesn't
# change between and return
LONG_L a2, TI_FLAGS($28) # current->work