From: Russell King Date: Fri, 17 Sep 2010 13:56:16 +0000 (+0100) Subject: ARM: prevent multiple syscall restarts X-Git-Tag: v2.6.36-rc6~11^2~12 X-Git-Url: http://bbs.cooldavid.org/git/?a=commitdiff_plain;h=b2b163bb82b12bae2504a5b31399c37d099ad3cc;p=net-next-2.6.git ARM: prevent multiple syscall restarts Al Viro reports that calling "sys_sigsuspend(-ERESTARTNOHAND, 0, 0)" with two signals coming and being handled in kernel space results in the syscall restart being done twice. Avoid this by clearing the 'why' flag when we call the signal handling code to prevent further syscall restarts after the first. Acked-by: Al Viro Signed-off-by: Russell King --- diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S index f05a35a5969..4a560d30793 100644 --- a/arch/arm/kernel/entry-common.S +++ b/arch/arm/kernel/entry-common.S @@ -48,6 +48,8 @@ work_pending: beq no_work_pending mov r0, sp @ 'regs' mov r2, why @ 'syscall' + tst r1, #_TIF_SIGPENDING @ delivering a signal? + movne why, #0 @ prevent further restarts bl do_notify_resume b ret_slow_syscall @ Check work again