Commit 2c44ce28 authored by Eric W. Biederman's avatar Eric W. Biederman
Browse files

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: default avatarStephen Rothwell <sfr@canb.auug.org.au>
Signed-off-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
parent cd60ab7a
Loading
Loading
Loading
Loading
+13 −5
Original line number Diff line number Diff line
@@ -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;