mirror of https://gitee.com/openkylin/linux.git
signal/powerpc: Factor the common exception code into exception_common
It is brittle and wrong to populate si_pkey when there was not a pkey exception. The field does not exist for all si_codes and in some cases another field exists in the same memory location. So factor out the code that all exceptions handlers must run into exception_common, leaving the individual exception handlers to generate the signals themselves. Reviewed-by: Stephen Rothwell <sfr@canb.auug.org.au> Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
This commit is contained in:
parent
cd60ab7abb
commit
2c44ce285f
|
@ -338,14 +338,12 @@ static void show_signal_msg(int signr, struct pt_regs *regs, int code,
|
|||
show_user_instructions(regs);
|
||||
}
|
||||
|
||||
void _exception_pkey(int signr, struct pt_regs *regs, int code,
|
||||
unsigned long addr, int key)
|
||||
static bool exception_common(int signr, struct pt_regs *regs, int code,
|
||||
unsigned long addr)
|
||||
{
|
||||
siginfo_t info;
|
||||
|
||||
if (!user_mode(regs)) {
|
||||
die("Exception in kernel mode", regs, signr);
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
show_signal_msg(signr, regs, code, addr);
|
||||
|
@ -361,6 +359,16 @@ void _exception_pkey(int signr, struct pt_regs *regs, int code,
|
|||
*/
|
||||
thread_pkey_regs_save(¤t->thread);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void _exception_pkey(int signr, struct pt_regs *regs, int code, unsigned long addr, int key)
|
||||
{
|
||||
siginfo_t info;
|
||||
|
||||
if (!exception_common(signr, regs, code, addr))
|
||||
return;
|
||||
|
||||
clear_siginfo(&info);
|
||||
info.si_signo = signr;
|
||||
info.si_code = code;
|
||||
|
|
Loading…
Reference in New Issue