summaryrefslogtreecommitdiffstats
path: root/arch/sh
diff options
context:
space:
mode:
authorRyusuke Sakato2007-02-23 05:22:56 +0100
committerPaul Mundt2007-03-05 06:13:25 +0100
commitc8bfa1fdc84af7b5e3c7f825a9f0bc6e8a19f5d5 (patch)
tree61a92dd4a63c4081a9b41f5a8509529f089931e8 /arch/sh
parentsh: Clear UBC when not in use. (diff)
downloadkernel-qcow2-linux-c8bfa1fdc84af7b5e3c7f825a9f0bc6e8a19f5d5.tar.gz
kernel-qcow2-linux-c8bfa1fdc84af7b5e3c7f825a9f0bc6e8a19f5d5.tar.xz
kernel-qcow2-linux-c8bfa1fdc84af7b5e3c7f825a9f0bc6e8a19f5d5.zip
sh: Fix sigmask trampling in signal delivery.
There was a missing return in do_signal() that caused the saved sigmask to be written back after having successfully delivered the signal. Signed-off-by: Ryusuke Sakato <sakato@hsdv.com> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh')
-rw-r--r--arch/sh/kernel/signal.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/arch/sh/kernel/signal.c b/arch/sh/kernel/signal.c
index 32f10a03fbb5..9f39ef1f73da 100644
--- a/arch/sh/kernel/signal.c
+++ b/arch/sh/kernel/signal.c
@@ -589,6 +589,8 @@ static void do_signal(struct pt_regs *regs, unsigned int save_r0)
if (test_thread_flag(TIF_RESTORE_SIGMASK))
clear_thread_flag(TIF_RESTORE_SIGMASK);
}
+
+ return;
}
no_signal:
@@ -598,7 +600,7 @@ static void do_signal(struct pt_regs *regs, unsigned int save_r0)
if (regs->regs[0] == -ERESTARTNOHAND ||
regs->regs[0] == -ERESTARTSYS ||
regs->regs[0] == -ERESTARTNOINTR) {
- regs->regs[0] = save_r0;
+ regs->regs[0] = save_r0;
regs->pc -= 2;
} else if (regs->regs[0] == -ERESTART_RESTARTBLOCK) {
regs->pc -= 2;