diff options
author | Ryusuke Sakato <sakato@hsdv.com> | 2007-02-22 23:22:56 -0500 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2007-03-05 00:13:25 -0500 |
commit | c8bfa1fdc84af7b5e3c7f825a9f0bc6e8a19f5d5 (patch) | |
tree | 61a92dd4a63c4081a9b41f5a8509529f089931e8 /arch/sh | |
parent | 9432f96803139adaff0cd9f4fa38b7fb99cda366 (diff) |
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.c | 4 |
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) | |||
589 | if (test_thread_flag(TIF_RESTORE_SIGMASK)) | 589 | if (test_thread_flag(TIF_RESTORE_SIGMASK)) |
590 | clear_thread_flag(TIF_RESTORE_SIGMASK); | 590 | clear_thread_flag(TIF_RESTORE_SIGMASK); |
591 | } | 591 | } |
592 | |||
593 | return; | ||
592 | } | 594 | } |
593 | 595 | ||
594 | no_signal: | 596 | no_signal: |
@@ -598,7 +600,7 @@ static void do_signal(struct pt_regs *regs, unsigned int save_r0) | |||
598 | if (regs->regs[0] == -ERESTARTNOHAND || | 600 | if (regs->regs[0] == -ERESTARTNOHAND || |
599 | regs->regs[0] == -ERESTARTSYS || | 601 | regs->regs[0] == -ERESTARTSYS || |
600 | regs->regs[0] == -ERESTARTNOINTR) { | 602 | regs->regs[0] == -ERESTARTNOINTR) { |
601 | regs->regs[0] = save_r0; | 603 | regs->regs[0] = save_r0; |
602 | regs->pc -= 2; | 604 | regs->pc -= 2; |
603 | } else if (regs->regs[0] == -ERESTART_RESTARTBLOCK) { | 605 | } else if (regs->regs[0] == -ERESTART_RESTARTBLOCK) { |
604 | regs->pc -= 2; | 606 | regs->pc -= 2; |