From ff6852e4278e17681dcc872a910a988cd4b09068 Mon Sep 17 00:00:00 2001 From: Russell King Date: Sun, 16 Nov 2003 09:40:05 +0000 Subject: [PATCH] [ARM] Fix system call restarting Always disable system call restart when returning from a signal handler. This follows the new x86 behaviour. --- arch/arm/kernel/signal.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c index 139603ee611f1..7787e498f1ac7 100644 --- a/arch/arm/kernel/signal.c +++ b/arch/arm/kernel/signal.c @@ -187,6 +187,9 @@ asmlinkage int sys_sigreturn(struct pt_regs *regs) struct sigframe *frame; sigset_t set; + /* Always make any pending restarted system calls return -EINTR */ + current_thread_info()->restart_block.fn = do_no_restart_syscall; + /* * Since we stacked the signal on a 64-bit boundary, * then 'sp' should be word aligned here. If it's @@ -232,6 +235,9 @@ asmlinkage int sys_rt_sigreturn(struct pt_regs *regs) struct rt_sigframe *frame; sigset_t set; + /* Always make any pending restarted system calls return -EINTR */ + current_thread_info()->restart_block.fn = do_no_restart_syscall; + /* * Since we stacked the signal on a 64-bit boundary, * then 'sp' should be word aligned here. If it's @@ -462,8 +468,6 @@ handle_signal(unsigned long sig, siginfo_t *info, sigset_t *oldset, if (syscall) { switch (regs->ARM_r0) { case -ERESTART_RESTARTBLOCK: - current_thread_info()->restart_block.fn = - do_no_restart_syscall; case -ERESTARTNOHAND: regs->ARM_r0 = -EINTR; break; -- 2.53.0