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:
Eric W. Biederman 2018-09-18 09:37:28 +02:00
parent cd60ab7abb
commit 2c44ce285f
1 changed files with 13 additions and 5 deletions

View File

@ -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(&current->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;