Commit 3ee6a449 authored by Eric W. Biederman's avatar Eric W. Biederman
Browse files

signal/arm: Use force_sig_fault where appropriate

parent 05e792e3
Loading
Loading
Loading
Loading
+2 −9
Original line number Diff line number Diff line
@@ -203,15 +203,8 @@ void ptrace_disable(struct task_struct *child)
 */
void ptrace_break(struct task_struct *tsk, struct pt_regs *regs)
{
	siginfo_t info;

	clear_siginfo(&info);
	info.si_signo = SIGTRAP;
	info.si_errno = 0;
	info.si_code  = TRAP_BRKPT;
	info.si_addr  = (void __user *)instruction_pointer(regs);

	force_sig_info(SIGTRAP, &info, tsk);
	force_sig_fault(SIGTRAP, TRAP_BRKPT,
			(void __user *)instruction_pointer(regs), tsk);
}

static int break_trap(struct pt_regs *regs, unsigned int instr)
+1 −9
Original line number Diff line number Diff line
@@ -948,15 +948,7 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
		goto fixup;

	if (ai_usermode & UM_SIGNAL) {
		siginfo_t si;

		clear_siginfo(&si);
		si.si_signo = SIGBUS;
		si.si_errno = 0;
		si.si_code = BUS_ADRALN;
		si.si_addr = (void __user *)addr;

		force_sig_info(si.si_signo, &si, current);
		force_sig_fault(SIGBUS, BUS_ADRALN, (void __user *)addr, current);
	} else {
		/*
		 * We're about to disable the alignment trap and return to
+1 −9
Original line number Diff line number Diff line
@@ -161,13 +161,9 @@ __do_user_fault(struct task_struct *tsk, unsigned long addr,
		unsigned int fsr, unsigned int sig, int code,
		struct pt_regs *regs)
{
	struct siginfo si;

	if (addr > TASK_SIZE)
		harden_branch_predictor();

	clear_siginfo(&si);

#ifdef CONFIG_DEBUG_USER
	if (((user_debug & UDBG_SEGV) && (sig == SIGSEGV)) ||
	    ((user_debug & UDBG_BUS)  && (sig == SIGBUS))) {
@@ -181,11 +177,7 @@ __do_user_fault(struct task_struct *tsk, unsigned long addr,
	tsk->thread.address = addr;
	tsk->thread.error_code = fsr;
	tsk->thread.trap_no = 14;
	si.si_signo = sig;
	si.si_errno = 0;
	si.si_code = code;
	si.si_addr = (void __user *)addr;
	force_sig_info(sig, &si, tsk);
	force_sig_fault(sig, code, (void __user *)addr, tsk);
}

void do_bad_area(unsigned long addr, unsigned int fsr, struct pt_regs *regs)