Commit c8bfa1fd authored by Ryusuke Sakato's avatar Ryusuke Sakato Committed by Paul Mundt

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: default avatarRyusuke Sakato <sakato@hsdv.com>
Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
parent 9432f968
...@@ -589,6 +589,8 @@ static void do_signal(struct pt_regs *regs, unsigned int save_r0) ...@@ -589,6 +589,8 @@ static void do_signal(struct pt_regs *regs, unsigned int save_r0)
if (test_thread_flag(TIF_RESTORE_SIGMASK)) if (test_thread_flag(TIF_RESTORE_SIGMASK))
clear_thread_flag(TIF_RESTORE_SIGMASK); clear_thread_flag(TIF_RESTORE_SIGMASK);
} }
return;
} }
no_signal: no_signal:
...@@ -598,7 +600,7 @@ static void do_signal(struct pt_regs *regs, unsigned int save_r0) ...@@ -598,7 +600,7 @@ static void do_signal(struct pt_regs *regs, unsigned int save_r0)
if (regs->regs[0] == -ERESTARTNOHAND || if (regs->regs[0] == -ERESTARTNOHAND ||
regs->regs[0] == -ERESTARTSYS || regs->regs[0] == -ERESTARTSYS ||
regs->regs[0] == -ERESTARTNOINTR) { regs->regs[0] == -ERESTARTNOINTR) {
regs->regs[0] = save_r0; regs->regs[0] = save_r0;
regs->pc -= 2; regs->pc -= 2;
} else if (regs->regs[0] == -ERESTART_RESTARTBLOCK) { } else if (regs->regs[0] == -ERESTART_RESTARTBLOCK) {
regs->pc -= 2; regs->pc -= 2;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment