提交 c8bfa1fd 编写于 作者: R Ryusuke Sakato 提交者: 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: NRyusuke Sakato <sakato@hsdv.com>
Signed-off-by: NPaul Mundt <lethal@linux-sh.org>
上级 9432f968
......@@ -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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册