summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2019-07-09 00:48:15 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2019-07-09 00:48:15 -0400
commit5ad18b2e60b75c7297a998dea702451d33a052ed (patch)
treec47fb503b4cfc8d3e99ad425aadede9832e96dc4
parent92c1d6522135050cb377a18cc6e30d08dfb87efb (diff)
parent318759b4737c3b3789e2fd64d539f437d52386f5 (diff)
Merge branch 'siginfo-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace
Pull force_sig() argument change from Eric Biederman: "A source of error over the years has been that force_sig has taken a task parameter when it is only safe to use force_sig with the current task. The force_sig function is built for delivering synchronous signals such as SIGSEGV where the userspace application caused a synchronous fault (such as a page fault) and the kernel responded with a signal. Because the name force_sig does not make this clear, and because the force_sig takes a task parameter the function force_sig has been abused for sending other kinds of signals over the years. Slowly those have been fixed when the oopses have been tracked down. This set of changes fixes the remaining abusers of force_sig and carefully rips out the task parameter from force_sig and friends making this kind of error almost impossible in the future" * 'siginfo-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace: (27 commits) signal/x86: Move tsk inside of CONFIG_MEMORY_FAILURE in do_sigbus signal: Remove the signal number and task parameters from force_sig_info signal: Factor force_sig_info_to_task out of force_sig_info signal: Generate the siginfo in force_sig signal: Move the computation of force into send_signal and correct it. signal: Properly set TRACE_SIGNAL_LOSE_INFO in __send_signal signal: Remove the task parameter from force_sig_fault signal: Use force_sig_fault_to_task for the two calls that don't deliver to current signal: Explicitly call force_sig_fault on current signal/unicore32: Remove tsk parameter from __do_user_fault signal/arm: Remove tsk parameter from __do_user_fault signal/arm: Remove tsk parameter from ptrace_break signal/nds32: Remove tsk parameter from send_sigtrap signal/riscv: Remove tsk parameter from do_trap signal/sh: Remove tsk parameter from force_sig_info_fault signal/um: Remove task parameter from send_sigtrap signal/x86: Remove task parameter from send_sigtrap signal: Remove task parameter from force_sig_mceerr signal: Remove task parameter from force_sig signal: Remove task parameter from force_sigsegv ...
-rw-r--r--arch/alpha/kernel/signal.c4
-rw-r--r--arch/alpha/kernel/traps.c2
-rw-r--r--arch/alpha/mm/fault.c4
-rw-r--r--arch/arc/kernel/process.c4
-rw-r--r--arch/arc/kernel/signal.c2
-rw-r--r--arch/arc/kernel/traps.c2
-rw-r--r--arch/arc/mm/fault.c4
-rw-r--r--arch/arm/include/asm/traps.h2
-rw-r--r--arch/arm/kernel/ptrace.c6
-rw-r--r--arch/arm/kernel/signal.c4
-rw-r--r--arch/arm/kernel/traps.c4
-rw-r--r--arch/arm/mm/alignment.c2
-rw-r--r--arch/arm/mm/fault.c13
-rw-r--r--arch/arm64/kernel/traps.c6
-rw-r--r--arch/c6x/kernel/signal.c2
-rw-r--r--arch/c6x/kernel/traps.c2
-rw-r--r--arch/csky/abiv1/alignment.c2
-rw-r--r--arch/csky/abiv2/fpu.c2
-rw-r--r--arch/csky/kernel/signal.c4
-rw-r--r--arch/csky/kernel/traps.c2
-rw-r--r--arch/csky/mm/fault.c4
-rw-r--r--arch/h8300/kernel/ptrace_h.c4
-rw-r--r--arch/h8300/kernel/ptrace_s.c2
-rw-r--r--arch/h8300/kernel/signal.c2
-rw-r--r--arch/hexagon/kernel/signal.c2
-rw-r--r--arch/hexagon/kernel/traps.c12
-rw-r--r--arch/hexagon/mm/vm_fault.c4
-rw-r--r--arch/ia64/kernel/brl_emu.c6
-rw-r--r--arch/ia64/kernel/signal.c8
-rw-r--r--arch/ia64/kernel/traps.c24
-rw-r--r--arch/ia64/kernel/unaligned.c2
-rw-r--r--arch/ia64/mm/fault.c2
-rw-r--r--arch/m68k/kernel/signal.c4
-rw-r--r--arch/m68k/kernel/traps.c20
-rw-r--r--arch/m68k/mm/fault.c4
-rw-r--r--arch/microblaze/kernel/exceptions.c2
-rw-r--r--arch/microblaze/kernel/signal.c2
-rw-r--r--arch/microblaze/mm/fault.c2
-rw-r--r--arch/mips/kernel/branch.c18
-rw-r--r--arch/mips/kernel/kprobes.c2
-rw-r--r--arch/mips/kernel/signal.c8
-rw-r--r--arch/mips/kernel/signal_n32.c4
-rw-r--r--arch/mips/kernel/signal_o32.c8
-rw-r--r--arch/mips/kernel/traps.c50
-rw-r--r--arch/mips/kernel/unaligned.c20
-rw-r--r--arch/mips/mm/fault.c4
-rw-r--r--arch/mips/sgi-ip22/ip22-berr.c2
-rw-r--r--arch/mips/sgi-ip22/ip28-berr.c2
-rw-r--r--arch/mips/sgi-ip27/ip27-berr.c2
-rw-r--r--arch/mips/sgi-ip32/ip32-berr.c2
-rw-r--r--arch/nds32/kernel/fpu.c2
-rw-r--r--arch/nds32/kernel/signal.c2
-rw-r--r--arch/nds32/kernel/traps.c17
-rw-r--r--arch/nds32/mm/fault.c4
-rw-r--r--arch/nios2/kernel/signal.c4
-rw-r--r--arch/nios2/kernel/traps.c2
-rw-r--r--arch/openrisc/kernel/signal.c2
-rw-r--r--arch/openrisc/kernel/traps.c12
-rw-r--r--arch/openrisc/mm/fault.c4
-rw-r--r--arch/parisc/kernel/ptrace.c6
-rw-r--r--arch/parisc/kernel/signal.c2
-rw-r--r--arch/parisc/kernel/traps.c14
-rw-r--r--arch/parisc/kernel/unaligned.c4
-rw-r--r--arch/parisc/math-emu/driver.c2
-rw-r--r--arch/parisc/mm/fault.c4
-rw-r--r--arch/powerpc/kernel/process.c2
-rw-r--r--arch/powerpc/kernel/signal_32.c6
-rw-r--r--arch/powerpc/kernel/signal_64.c2
-rw-r--r--arch/powerpc/kernel/traps.c4
-rw-r--r--arch/powerpc/mm/fault.c5
-rw-r--r--arch/powerpc/platforms/cell/spufs/fault.c9
-rw-r--r--arch/powerpc/platforms/cell/spufs/run.c2
-rw-r--r--arch/riscv/include/asm/bug.h2
-rw-r--r--arch/riscv/kernel/signal.c2
-rw-r--r--arch/riscv/kernel/traps.c11
-rw-r--r--arch/riscv/mm/fault.c6
-rw-r--r--arch/s390/kernel/compat_signal.c4
-rw-r--r--arch/s390/kernel/signal.c4
-rw-r--r--arch/s390/kernel/traps.c6
-rw-r--r--arch/s390/mm/fault.c6
-rw-r--r--arch/sh/kernel/cpu/sh2a/fpu.c2
-rw-r--r--arch/sh/kernel/cpu/sh4/fpu.c2
-rw-r--r--arch/sh/kernel/cpu/sh5/fpu.c4
-rw-r--r--arch/sh/kernel/hw_breakpoint.c2
-rw-r--r--arch/sh/kernel/ptrace_64.c4
-rw-r--r--arch/sh/kernel/signal_32.c4
-rw-r--r--arch/sh/kernel/signal_64.c4
-rw-r--r--arch/sh/kernel/traps.c4
-rw-r--r--arch/sh/kernel/traps_32.c12
-rw-r--r--arch/sh/kernel/traps_64.c2
-rw-r--r--arch/sh/math-emu/math.c2
-rw-r--r--arch/sh/mm/fault.c11
-rw-r--r--arch/sparc/kernel/process_64.c4
-rw-r--r--arch/sparc/kernel/signal32.c8
-rw-r--r--arch/sparc/kernel/signal_32.c4
-rw-r--r--arch/sparc/kernel/signal_64.c8
-rw-r--r--arch/sparc/kernel/sys_sparc_32.c2
-rw-r--r--arch/sparc/kernel/sys_sparc_64.c2
-rw-r--r--arch/sparc/kernel/traps_32.c4
-rw-r--r--arch/sparc/kernel/traps_64.c41
-rw-r--r--arch/sparc/mm/fault_32.c4
-rw-r--r--arch/sparc/mm/fault_64.c2
-rw-r--r--arch/um/kernel/exec.c2
-rw-r--r--arch/um/kernel/ptrace.c7
-rw-r--r--arch/um/kernel/skas/mmu.c2
-rw-r--r--arch/um/kernel/tlb.c4
-rw-r--r--arch/um/kernel/trap.c16
-rw-r--r--arch/unicore32/kernel/signal.c4
-rw-r--r--arch/unicore32/kernel/traps.c2
-rw-r--r--arch/unicore32/mm/fault.c13
-rw-r--r--arch/x86/entry/vsyscall/vsyscall_64.c4
-rw-r--r--arch/x86/include/asm/ptrace.h3
-rw-r--r--arch/x86/kernel/cpu/mce/core.c2
-rw-r--r--arch/x86/kernel/ptrace.c9
-rw-r--r--arch/x86/kernel/signal.c2
-rw-r--r--arch/x86/kernel/traps.c10
-rw-r--r--arch/x86/kernel/umip.c2
-rw-r--r--arch/x86/kernel/uprobes.c2
-rw-r--r--arch/x86/kernel/vm86_32.c2
-rw-r--r--arch/x86/mm/fault.c12
-rw-r--r--arch/x86/mm/mpx.c2
-rw-r--r--arch/x86/um/signal.c4
-rw-r--r--arch/xtensa/kernel/signal.c2
-rw-r--r--arch/xtensa/kernel/traps.c8
-rw-r--r--arch/xtensa/mm/fault.c4
-rw-r--r--drivers/block/drbd/drbd_int.h2
-rw-r--r--drivers/block/drbd/drbd_main.c2
-rw-r--r--drivers/block/drbd/drbd_nl.c2
-rw-r--r--drivers/misc/lkdtm/bugs.c2
-rw-r--r--drivers/usb/core/devio.c48
-rw-r--r--fs/cifs/connect.c2
-rw-r--r--fs/exec.c2
-rw-r--r--include/linux/ptrace.h2
-rw-r--r--include/linux/sched/signal.h15
-rw-r--r--include/linux/syscalls.h2
-rw-r--r--kernel/events/uprobes.c4
-rw-r--r--kernel/pid_namespace.c2
-rw-r--r--kernel/rseq.c4
-rw-r--r--kernel/seccomp.c2
-rw-r--r--kernel/signal.c249
-rw-r--r--mm/memory-failure.c2
-rw-r--r--net/bpfilter/bpfilter_kern.c2
-rw-r--r--security/safesetid/lsm.c4
143 files changed, 567 insertions, 484 deletions
diff --git a/arch/alpha/kernel/signal.c b/arch/alpha/kernel/signal.c
index 33e904a05881..a813020d2f11 100644
--- a/arch/alpha/kernel/signal.c
+++ b/arch/alpha/kernel/signal.c
@@ -225,7 +225,7 @@ do_sigreturn(struct sigcontext __user *sc)
225 return; 225 return;
226 226
227give_sigsegv: 227give_sigsegv:
228 force_sig(SIGSEGV, current); 228 force_sig(SIGSEGV);
229} 229}
230 230
231asmlinkage void 231asmlinkage void
@@ -253,7 +253,7 @@ do_rt_sigreturn(struct rt_sigframe __user *frame)
253 return; 253 return;
254 254
255give_sigsegv: 255give_sigsegv:
256 force_sig(SIGSEGV, current); 256 force_sig(SIGSEGV);
257} 257}
258 258
259 259
diff --git a/arch/alpha/kernel/traps.c b/arch/alpha/kernel/traps.c
index bc9627698796..f6b9664ac504 100644
--- a/arch/alpha/kernel/traps.c
+++ b/arch/alpha/kernel/traps.c
@@ -402,7 +402,7 @@ do_entDbg(struct pt_regs *regs)
402{ 402{
403 die_if_kernel("Instruction fault", regs, 0, NULL); 403 die_if_kernel("Instruction fault", regs, 0, NULL);
404 404
405 force_sig_fault(SIGILL, ILL_ILLOPC, (void __user *)regs->pc, 0, current); 405 force_sig_fault(SIGILL, ILL_ILLOPC, (void __user *)regs->pc, 0);
406} 406}
407 407
408 408
diff --git a/arch/alpha/mm/fault.c b/arch/alpha/mm/fault.c
index 188fc9256baf..741e61ef9d3f 100644
--- a/arch/alpha/mm/fault.c
+++ b/arch/alpha/mm/fault.c
@@ -221,13 +221,13 @@ retry:
221 up_read(&mm->mmap_sem); 221 up_read(&mm->mmap_sem);
222 /* Send a sigbus, regardless of whether we were in kernel 222 /* Send a sigbus, regardless of whether we were in kernel
223 or user mode. */ 223 or user mode. */
224 force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *) address, 0, current); 224 force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *) address, 0);
225 if (!user_mode(regs)) 225 if (!user_mode(regs))
226 goto no_context; 226 goto no_context;
227 return; 227 return;
228 228
229 do_sigsegv: 229 do_sigsegv:
230 force_sig_fault(SIGSEGV, si_code, (void __user *) address, 0, current); 230 force_sig_fault(SIGSEGV, si_code, (void __user *) address, 0);
231 return; 231 return;
232 232
233#ifdef CONFIG_ALPHA_LARGE_VMALLOC 233#ifdef CONFIG_ALPHA_LARGE_VMALLOC
diff --git a/arch/arc/kernel/process.c b/arch/arc/kernel/process.c
index ff321f7df716..e1889ce3faf9 100644
--- a/arch/arc/kernel/process.c
+++ b/arch/arc/kernel/process.c
@@ -97,7 +97,7 @@ fault:
97 goto again; 97 goto again;
98 98
99fail: 99fail:
100 force_sig(SIGSEGV, current); 100 force_sig(SIGSEGV);
101 return ret; 101 return ret;
102} 102}
103 103
@@ -310,7 +310,7 @@ int elf_check_arch(const struct elf32_hdr *x)
310 eflags = x->e_flags; 310 eflags = x->e_flags;
311 if ((eflags & EF_ARC_OSABI_MSK) != EF_ARC_OSABI_CURRENT) { 311 if ((eflags & EF_ARC_OSABI_MSK) != EF_ARC_OSABI_CURRENT) {
312 pr_err("ABI mismatch - you need newer toolchain\n"); 312 pr_err("ABI mismatch - you need newer toolchain\n");
313 force_sigsegv(SIGSEGV, current); 313 force_sigsegv(SIGSEGV);
314 return 0; 314 return 0;
315 } 315 }
316 316
diff --git a/arch/arc/kernel/signal.c b/arch/arc/kernel/signal.c
index b895f889602a..3d57ed0d8535 100644
--- a/arch/arc/kernel/signal.c
+++ b/arch/arc/kernel/signal.c
@@ -194,7 +194,7 @@ SYSCALL_DEFINE0(rt_sigreturn)
194 return regs->r0; 194 return regs->r0;
195 195
196badframe: 196badframe:
197 force_sig(SIGSEGV, current); 197 force_sig(SIGSEGV);
198 return 0; 198 return 0;
199} 199}
200 200
diff --git a/arch/arc/kernel/traps.c b/arch/arc/kernel/traps.c
index e9a5b259f405..57235e5c0cea 100644
--- a/arch/arc/kernel/traps.c
+++ b/arch/arc/kernel/traps.c
@@ -47,7 +47,7 @@ unhandled_exception(const char *str, struct pt_regs *regs,
47 47
48 tsk->thread.fault_address = (__force unsigned int)addr; 48 tsk->thread.fault_address = (__force unsigned int)addr;
49 49
50 force_sig_fault(signo, si_code, addr, tsk); 50 force_sig_fault(signo, si_code, addr);
51 51
52 } else { 52 } else {
53 /* If not due to copy_(to|from)_user, we are doomed */ 53 /* If not due to copy_(to|from)_user, we are doomed */
diff --git a/arch/arc/mm/fault.c b/arch/arc/mm/fault.c
index 8cca03480bb2..81e84426fe21 100644
--- a/arch/arc/mm/fault.c
+++ b/arch/arc/mm/fault.c
@@ -196,7 +196,7 @@ bad_area:
196 /* User mode accesses just cause a SIGSEGV */ 196 /* User mode accesses just cause a SIGSEGV */
197 if (user_mode(regs)) { 197 if (user_mode(regs)) {
198 tsk->thread.fault_address = address; 198 tsk->thread.fault_address = address;
199 force_sig_fault(SIGSEGV, si_code, (void __user *)address, tsk); 199 force_sig_fault(SIGSEGV, si_code, (void __user *)address);
200 return; 200 return;
201 } 201 }
202 202
@@ -231,5 +231,5 @@ do_sigbus:
231 goto no_context; 231 goto no_context;
232 232
233 tsk->thread.fault_address = address; 233 tsk->thread.fault_address = address;
234 force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address, tsk); 234 force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address);
235} 235}
diff --git a/arch/arm/include/asm/traps.h b/arch/arm/include/asm/traps.h
index a00288d75ee6..172b08ff3760 100644
--- a/arch/arm/include/asm/traps.h
+++ b/arch/arm/include/asm/traps.h
@@ -30,7 +30,7 @@ static inline int __in_irqentry_text(unsigned long ptr)
30 30
31extern void __init early_trap_init(void *); 31extern void __init early_trap_init(void *);
32extern void dump_backtrace_entry(unsigned long where, unsigned long from, unsigned long frame); 32extern void dump_backtrace_entry(unsigned long where, unsigned long from, unsigned long frame);
33extern void ptrace_break(struct task_struct *tsk, struct pt_regs *regs); 33extern void ptrace_break(struct pt_regs *regs);
34 34
35extern void *vectors_page; 35extern void *vectors_page;
36 36
diff --git a/arch/arm/kernel/ptrace.c b/arch/arm/kernel/ptrace.c
index afcb4d3b14dc..324352787aea 100644
--- a/arch/arm/kernel/ptrace.c
+++ b/arch/arm/kernel/ptrace.c
@@ -198,15 +198,15 @@ void ptrace_disable(struct task_struct *child)
198/* 198/*
199 * Handle hitting a breakpoint. 199 * Handle hitting a breakpoint.
200 */ 200 */
201void ptrace_break(struct task_struct *tsk, struct pt_regs *regs) 201void ptrace_break(struct pt_regs *regs)
202{ 202{
203 force_sig_fault(SIGTRAP, TRAP_BRKPT, 203 force_sig_fault(SIGTRAP, TRAP_BRKPT,
204 (void __user *)instruction_pointer(regs), tsk); 204 (void __user *)instruction_pointer(regs));
205} 205}
206 206
207static int break_trap(struct pt_regs *regs, unsigned int instr) 207static int break_trap(struct pt_regs *regs, unsigned int instr)
208{ 208{
209 ptrace_break(current, regs); 209 ptrace_break(regs);
210 return 0; 210 return 0;
211} 211}
212 212
diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c
index 3ca71d679aec..09f6fdd41974 100644
--- a/arch/arm/kernel/signal.c
+++ b/arch/arm/kernel/signal.c
@@ -247,7 +247,7 @@ asmlinkage int sys_sigreturn(struct pt_regs *regs)
247 return regs->ARM_r0; 247 return regs->ARM_r0;
248 248
249badframe: 249badframe:
250 force_sig(SIGSEGV, current); 250 force_sig(SIGSEGV);
251 return 0; 251 return 0;
252} 252}
253 253
@@ -280,7 +280,7 @@ asmlinkage int sys_rt_sigreturn(struct pt_regs *regs)
280 return regs->ARM_r0; 280 return regs->ARM_r0;
281 281
282badframe: 282badframe:
283 force_sig(SIGSEGV, current); 283 force_sig(SIGSEGV);
284 return 0; 284 return 0;
285} 285}
286 286
diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c
index b6d6b1a6f156..c053abd1fb53 100644
--- a/arch/arm/kernel/traps.c
+++ b/arch/arm/kernel/traps.c
@@ -369,7 +369,7 @@ void arm_notify_die(const char *str, struct pt_regs *regs,
369 current->thread.error_code = err; 369 current->thread.error_code = err;
370 current->thread.trap_no = trap; 370 current->thread.trap_no = trap;
371 371
372 force_sig_fault(signo, si_code, addr, current); 372 force_sig_fault(signo, si_code, addr);
373 } else { 373 } else {
374 die(str, regs, err); 374 die(str, regs, err);
375 } 375 }
@@ -603,7 +603,7 @@ asmlinkage int arm_syscall(int no, struct pt_regs *regs)
603 603
604 case NR(breakpoint): /* SWI BREAK_POINT */ 604 case NR(breakpoint): /* SWI BREAK_POINT */
605 regs->ARM_pc -= thumb_mode(regs) ? 2 : 4; 605 regs->ARM_pc -= thumb_mode(regs) ? 2 : 4;
606 ptrace_break(current, regs); 606 ptrace_break(regs);
607 return regs->ARM_r0; 607 return regs->ARM_r0;
608 608
609 /* 609 /*
diff --git a/arch/arm/mm/alignment.c b/arch/arm/mm/alignment.c
index 6067fa4de22b..8cdb78642e93 100644
--- a/arch/arm/mm/alignment.c
+++ b/arch/arm/mm/alignment.c
@@ -945,7 +945,7 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
945 goto fixup; 945 goto fixup;
946 946
947 if (ai_usermode & UM_SIGNAL) { 947 if (ai_usermode & UM_SIGNAL) {
948 force_sig_fault(SIGBUS, BUS_ADRALN, (void __user *)addr, current); 948 force_sig_fault(SIGBUS, BUS_ADRALN, (void __user *)addr);
949 } else { 949 } else {
950 /* 950 /*
951 * We're about to disable the alignment trap and return to 951 * We're about to disable the alignment trap and return to
diff --git a/arch/arm/mm/fault.c b/arch/arm/mm/fault.c
index ec83c8fca62d..0e417233dad7 100644
--- a/arch/arm/mm/fault.c
+++ b/arch/arm/mm/fault.c
@@ -154,10 +154,11 @@ __do_kernel_fault(struct mm_struct *mm, unsigned long addr, unsigned int fsr,
154 * User mode accesses just cause a SIGSEGV 154 * User mode accesses just cause a SIGSEGV
155 */ 155 */
156static void 156static void
157__do_user_fault(struct task_struct *tsk, unsigned long addr, 157__do_user_fault(unsigned long addr, unsigned int fsr, unsigned int sig,
158 unsigned int fsr, unsigned int sig, int code, 158 int code, struct pt_regs *regs)
159 struct pt_regs *regs)
160{ 159{
160 struct task_struct *tsk = current;
161
161 if (addr > TASK_SIZE) 162 if (addr > TASK_SIZE)
162 harden_branch_predictor(); 163 harden_branch_predictor();
163 164
@@ -181,7 +182,7 @@ __do_user_fault(struct task_struct *tsk, unsigned long addr,
181 tsk->thread.address = addr; 182 tsk->thread.address = addr;
182 tsk->thread.error_code = fsr; 183 tsk->thread.error_code = fsr;
183 tsk->thread.trap_no = 14; 184 tsk->thread.trap_no = 14;
184 force_sig_fault(sig, code, (void __user *)addr, tsk); 185 force_sig_fault(sig, code, (void __user *)addr);
185} 186}
186 187
187void do_bad_area(unsigned long addr, unsigned int fsr, struct pt_regs *regs) 188void do_bad_area(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
@@ -194,7 +195,7 @@ void do_bad_area(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
194 * have no context to handle this fault with. 195 * have no context to handle this fault with.
195 */ 196 */
196 if (user_mode(regs)) 197 if (user_mode(regs))
197 __do_user_fault(tsk, addr, fsr, SIGSEGV, SEGV_MAPERR, regs); 198 __do_user_fault(addr, fsr, SIGSEGV, SEGV_MAPERR, regs);
198 else 199 else
199 __do_kernel_fault(mm, addr, fsr, regs); 200 __do_kernel_fault(mm, addr, fsr, regs);
200} 201}
@@ -390,7 +391,7 @@ retry:
390 SEGV_ACCERR : SEGV_MAPERR; 391 SEGV_ACCERR : SEGV_MAPERR;
391 } 392 }
392 393
393 __do_user_fault(tsk, addr, fsr, sig, code, regs); 394 __do_user_fault(addr, fsr, sig, code, regs);
394 return 0; 395 return 0;
395 396
396no_context: 397no_context:
diff --git a/arch/arm64/kernel/traps.c b/arch/arm64/kernel/traps.c
index a835a1a53826..678af745d881 100644
--- a/arch/arm64/kernel/traps.c
+++ b/arch/arm64/kernel/traps.c
@@ -233,16 +233,16 @@ void arm64_force_sig_fault(int signo, int code, void __user *addr,
233{ 233{
234 arm64_show_signal(signo, str); 234 arm64_show_signal(signo, str);
235 if (signo == SIGKILL) 235 if (signo == SIGKILL)
236 force_sig(SIGKILL, current); 236 force_sig(SIGKILL);
237 else 237 else
238 force_sig_fault(signo, code, addr, current); 238 force_sig_fault(signo, code, addr);
239} 239}
240 240
241void arm64_force_sig_mceerr(int code, void __user *addr, short lsb, 241void arm64_force_sig_mceerr(int code, void __user *addr, short lsb,
242 const char *str) 242 const char *str)
243{ 243{
244 arm64_show_signal(SIGBUS, str); 244 arm64_show_signal(SIGBUS, str);
245 force_sig_mceerr(code, addr, lsb, current); 245 force_sig_mceerr(code, addr, lsb);
246} 246}
247 247
248void arm64_force_sig_ptrace_errno_trap(int errno, void __user *addr, 248void arm64_force_sig_ptrace_errno_trap(int errno, void __user *addr,
diff --git a/arch/c6x/kernel/signal.c b/arch/c6x/kernel/signal.c
index e72d9b6bc234..e456652facce 100644
--- a/arch/c6x/kernel/signal.c
+++ b/arch/c6x/kernel/signal.c
@@ -90,7 +90,7 @@ asmlinkage int do_rt_sigreturn(struct pt_regs *regs)
90 return regs->a4; 90 return regs->a4;
91 91
92badframe: 92badframe:
93 force_sig(SIGSEGV, current); 93 force_sig(SIGSEGV);
94 return 0; 94 return 0;
95} 95}
96 96
diff --git a/arch/c6x/kernel/traps.c b/arch/c6x/kernel/traps.c
index c4785c9b67a2..ec61034fdf56 100644
--- a/arch/c6x/kernel/traps.c
+++ b/arch/c6x/kernel/traps.c
@@ -250,7 +250,7 @@ static void do_trap(struct exception_info *except_info, struct pt_regs *regs)
250 die_if_kernel(except_info->kernel_str, regs, addr); 250 die_if_kernel(except_info->kernel_str, regs, addr);
251 251
252 force_sig_fault(except_info->signo, except_info->code, 252 force_sig_fault(except_info->signo, except_info->code,
253 (void __user *)addr, current); 253 (void __user *)addr);
254} 254}
255 255
256/* 256/*
diff --git a/arch/csky/abiv1/alignment.c b/arch/csky/abiv1/alignment.c
index d789be36eb4f..27ef5b2c43ab 100644
--- a/arch/csky/abiv1/alignment.c
+++ b/arch/csky/abiv1/alignment.c
@@ -283,7 +283,7 @@ bad_area:
283 do_exit(SIGKILL); 283 do_exit(SIGKILL);
284 } 284 }
285 285
286 force_sig_fault(SIGBUS, BUS_ADRALN, (void __user *)addr, current); 286 force_sig_fault(SIGBUS, BUS_ADRALN, (void __user *)addr);
287} 287}
288 288
289static struct ctl_table alignment_tbl[4] = { 289static struct ctl_table alignment_tbl[4] = {
diff --git a/arch/csky/abiv2/fpu.c b/arch/csky/abiv2/fpu.c
index e7e11344005a..86d187d4e5af 100644
--- a/arch/csky/abiv2/fpu.c
+++ b/arch/csky/abiv2/fpu.c
@@ -124,7 +124,7 @@ void fpu_fpe(struct pt_regs *regs)
124 code = FPE_FLTRES; 124 code = FPE_FLTRES;
125 } 125 }
126 126
127 force_sig_fault(sig, code, (void __user *)regs->pc, current); 127 force_sig_fault(sig, code, (void __user *)regs->pc);
128} 128}
129 129
130#define FMFVR_FPU_REGS(vrx, vry) \ 130#define FMFVR_FPU_REGS(vrx, vry) \
diff --git a/arch/csky/kernel/signal.c b/arch/csky/kernel/signal.c
index d47a3381aad8..9b1b7c039ddf 100644
--- a/arch/csky/kernel/signal.c
+++ b/arch/csky/kernel/signal.c
@@ -66,7 +66,6 @@ SYSCALL_DEFINE0(rt_sigreturn)
66{ 66{
67 struct pt_regs *regs = current_pt_regs(); 67 struct pt_regs *regs = current_pt_regs();
68 struct rt_sigframe __user *frame; 68 struct rt_sigframe __user *frame;
69 struct task_struct *task;
70 sigset_t set; 69 sigset_t set;
71 70
72 /* Always make any pending restarted system calls return -EINTR */ 71 /* Always make any pending restarted system calls return -EINTR */
@@ -91,8 +90,7 @@ SYSCALL_DEFINE0(rt_sigreturn)
91 return regs->a0; 90 return regs->a0;
92 91
93badframe: 92badframe:
94 task = current; 93 force_sig(SIGSEGV);
95 force_sig(SIGSEGV, task);
96 return 0; 94 return 0;
97} 95}
98 96
diff --git a/arch/csky/kernel/traps.c b/arch/csky/kernel/traps.c
index f487a9b996ae..2792e9601ac5 100644
--- a/arch/csky/kernel/traps.c
+++ b/arch/csky/kernel/traps.c
@@ -106,7 +106,7 @@ void buserr(struct pt_regs *regs)
106 pr_err("User mode Bus Error\n"); 106 pr_err("User mode Bus Error\n");
107 show_regs(regs); 107 show_regs(regs);
108 108
109 force_sig_fault(SIGSEGV, 0, (void __user *)regs->pc, current); 109 force_sig_fault(SIGSEGV, 0, (void __user *)regs->pc);
110} 110}
111 111
112#define USR_BKPT 0x1464 112#define USR_BKPT 0x1464
diff --git a/arch/csky/mm/fault.c b/arch/csky/mm/fault.c
index 18041f46ded1..f76618b630f9 100644
--- a/arch/csky/mm/fault.c
+++ b/arch/csky/mm/fault.c
@@ -179,7 +179,7 @@ bad_area:
179bad_area_nosemaphore: 179bad_area_nosemaphore:
180 /* User mode accesses just cause a SIGSEGV */ 180 /* User mode accesses just cause a SIGSEGV */
181 if (user_mode(regs)) { 181 if (user_mode(regs)) {
182 force_sig_fault(SIGSEGV, si_code, (void __user *)address, current); 182 force_sig_fault(SIGSEGV, si_code, (void __user *)address);
183 return; 183 return;
184 } 184 }
185 185
@@ -212,5 +212,5 @@ do_sigbus:
212 if (!user_mode(regs)) 212 if (!user_mode(regs))
213 goto no_context; 213 goto no_context;
214 214
215 force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address, current); 215 force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address);
216} 216}
diff --git a/arch/h8300/kernel/ptrace_h.c b/arch/h8300/kernel/ptrace_h.c
index f5ff3b794c85..15db45a03b04 100644
--- a/arch/h8300/kernel/ptrace_h.c
+++ b/arch/h8300/kernel/ptrace_h.c
@@ -250,7 +250,7 @@ asmlinkage void trace_trap(unsigned long bp)
250{ 250{
251 if ((unsigned long)current->thread.breakinfo.addr == bp) { 251 if ((unsigned long)current->thread.breakinfo.addr == bp) {
252 user_disable_single_step(current); 252 user_disable_single_step(current);
253 force_sig(SIGTRAP, current); 253 force_sig(SIGTRAP);
254 } else 254 } else
255 force_sig(SIGILL, current); 255 force_sig(SIGILL);
256} 256}
diff --git a/arch/h8300/kernel/ptrace_s.c b/arch/h8300/kernel/ptrace_s.c
index c0af930052c0..ee21f37b7ed4 100644
--- a/arch/h8300/kernel/ptrace_s.c
+++ b/arch/h8300/kernel/ptrace_s.c
@@ -40,5 +40,5 @@ void user_enable_single_step(struct task_struct *child)
40asmlinkage void trace_trap(unsigned long bp) 40asmlinkage void trace_trap(unsigned long bp)
41{ 41{
42 (void)bp; 42 (void)bp;
43 force_sig(SIGTRAP, current); 43 force_sig(SIGTRAP);
44} 44}
diff --git a/arch/h8300/kernel/signal.c b/arch/h8300/kernel/signal.c
index e0f2b708e5d9..ef7489b7c459 100644
--- a/arch/h8300/kernel/signal.c
+++ b/arch/h8300/kernel/signal.c
@@ -126,7 +126,7 @@ asmlinkage int sys_rt_sigreturn(void)
126 return er0; 126 return er0;
127 127
128badframe: 128badframe:
129 force_sig(SIGSEGV, current); 129 force_sig(SIGSEGV);
130 return 0; 130 return 0;
131} 131}
132 132
diff --git a/arch/hexagon/kernel/signal.c b/arch/hexagon/kernel/signal.c
index 5bc36db26475..d48864c48e5a 100644
--- a/arch/hexagon/kernel/signal.c
+++ b/arch/hexagon/kernel/signal.c
@@ -252,6 +252,6 @@ asmlinkage int sys_rt_sigreturn(void)
252 return regs->r00; 252 return regs->r00;
253 253
254badframe: 254badframe:
255 force_sig(SIGSEGV, current); 255 force_sig(SIGSEGV);
256 return 0; 256 return 0;
257} 257}
diff --git a/arch/hexagon/kernel/traps.c b/arch/hexagon/kernel/traps.c
index a01da26dbfe1..69c623b14ddd 100644
--- a/arch/hexagon/kernel/traps.c
+++ b/arch/hexagon/kernel/traps.c
@@ -239,7 +239,7 @@ int die_if_kernel(char *str, struct pt_regs *regs, long err)
239static void misaligned_instruction(struct pt_regs *regs) 239static void misaligned_instruction(struct pt_regs *regs)
240{ 240{
241 die_if_kernel("Misaligned Instruction", regs, 0); 241 die_if_kernel("Misaligned Instruction", regs, 0);
242 force_sig(SIGBUS, current); 242 force_sig(SIGBUS);
243} 243}
244 244
245/* 245/*
@@ -250,19 +250,19 @@ static void misaligned_instruction(struct pt_regs *regs)
250static void misaligned_data_load(struct pt_regs *regs) 250static void misaligned_data_load(struct pt_regs *regs)
251{ 251{
252 die_if_kernel("Misaligned Data Load", regs, 0); 252 die_if_kernel("Misaligned Data Load", regs, 0);
253 force_sig(SIGBUS, current); 253 force_sig(SIGBUS);
254} 254}
255 255
256static void misaligned_data_store(struct pt_regs *regs) 256static void misaligned_data_store(struct pt_regs *regs)
257{ 257{
258 die_if_kernel("Misaligned Data Store", regs, 0); 258 die_if_kernel("Misaligned Data Store", regs, 0);
259 force_sig(SIGBUS, current); 259 force_sig(SIGBUS);
260} 260}
261 261
262static void illegal_instruction(struct pt_regs *regs) 262static void illegal_instruction(struct pt_regs *regs)
263{ 263{
264 die_if_kernel("Illegal Instruction", regs, 0); 264 die_if_kernel("Illegal Instruction", regs, 0);
265 force_sig(SIGILL, current); 265 force_sig(SIGILL);
266} 266}
267 267
268/* 268/*
@@ -272,7 +272,7 @@ static void illegal_instruction(struct pt_regs *regs)
272static void precise_bus_error(struct pt_regs *regs) 272static void precise_bus_error(struct pt_regs *regs)
273{ 273{
274 die_if_kernel("Precise Bus Error", regs, 0); 274 die_if_kernel("Precise Bus Error", regs, 0);
275 force_sig(SIGBUS, current); 275 force_sig(SIGBUS);
276} 276}
277 277
278/* 278/*
@@ -407,7 +407,7 @@ void do_trap0(struct pt_regs *regs)
407 * may want to use a different trap0 flavor. 407 * may want to use a different trap0 flavor.
408 */ 408 */
409 force_sig_fault(SIGTRAP, TRAP_BRKPT, 409 force_sig_fault(SIGTRAP, TRAP_BRKPT,
410 (void __user *) pt_elr(regs), current); 410 (void __user *) pt_elr(regs));
411 } else { 411 } else {
412#ifdef CONFIG_KGDB 412#ifdef CONFIG_KGDB
413 kgdb_handle_exception(pt_cause(regs), SIGTRAP, 413 kgdb_handle_exception(pt_cause(regs), SIGTRAP,
diff --git a/arch/hexagon/mm/vm_fault.c b/arch/hexagon/mm/vm_fault.c
index b7a99aa5b0ba..b3bc71680ae4 100644
--- a/arch/hexagon/mm/vm_fault.c
+++ b/arch/hexagon/mm/vm_fault.c
@@ -135,14 +135,14 @@ good_area:
135 si_signo = SIGSEGV; 135 si_signo = SIGSEGV;
136 si_code = SEGV_ACCERR; 136 si_code = SEGV_ACCERR;
137 } 137 }
138 force_sig_fault(si_signo, si_code, (void __user *)address, current); 138 force_sig_fault(si_signo, si_code, (void __user *)address);
139 return; 139 return;
140 140
141bad_area: 141bad_area:
142 up_read(&mm->mmap_sem); 142 up_read(&mm->mmap_sem);
143 143
144 if (user_mode(regs)) { 144 if (user_mode(regs)) {
145 force_sig_fault(SIGSEGV, si_code, (void __user *)address, current); 145 force_sig_fault(SIGSEGV, si_code, (void __user *)address);
146 return; 146 return;
147 } 147 }
148 /* Kernel-mode fault falls through */ 148 /* Kernel-mode fault falls through */
diff --git a/arch/ia64/kernel/brl_emu.c b/arch/ia64/kernel/brl_emu.c
index c0239bf77a09..782c481d7052 100644
--- a/arch/ia64/kernel/brl_emu.c
+++ b/arch/ia64/kernel/brl_emu.c
@@ -197,21 +197,21 @@ ia64_emulate_brl (struct pt_regs *regs, unsigned long ar_ec)
197 */ 197 */
198 printk(KERN_DEBUG "Woah! Unimplemented Instruction Address Trap!\n"); 198 printk(KERN_DEBUG "Woah! Unimplemented Instruction Address Trap!\n");
199 force_sig_fault(SIGILL, ILL_BADIADDR, (void __user *)NULL, 199 force_sig_fault(SIGILL, ILL_BADIADDR, (void __user *)NULL,
200 0, 0, 0, current); 200 0, 0, 0);
201 } else if (ia64_psr(regs)->tb) { 201 } else if (ia64_psr(regs)->tb) {
202 /* 202 /*
203 * Branch Tracing is enabled. 203 * Branch Tracing is enabled.
204 * Force a taken branch signal. 204 * Force a taken branch signal.
205 */ 205 */
206 force_sig_fault(SIGTRAP, TRAP_BRANCH, (void __user *)NULL, 206 force_sig_fault(SIGTRAP, TRAP_BRANCH, (void __user *)NULL,
207 0, 0, 0, current); 207 0, 0, 0);
208 } else if (ia64_psr(regs)->ss) { 208 } else if (ia64_psr(regs)->ss) {
209 /* 209 /*
210 * Single Step is enabled. 210 * Single Step is enabled.
211 * Force a trace signal. 211 * Force a trace signal.
212 */ 212 */
213 force_sig_fault(SIGTRAP, TRAP_TRACE, (void __user *)NULL, 213 force_sig_fault(SIGTRAP, TRAP_TRACE, (void __user *)NULL,
214 0, 0, 0, current); 214 0, 0, 0);
215 } 215 }
216 return rv; 216 return rv;
217} 217}
diff --git a/arch/ia64/kernel/signal.c b/arch/ia64/kernel/signal.c
index 6062fd14e34e..e5044aed9452 100644
--- a/arch/ia64/kernel/signal.c
+++ b/arch/ia64/kernel/signal.c
@@ -152,7 +152,7 @@ ia64_rt_sigreturn (struct sigscratch *scr)
152 return retval; 152 return retval;
153 153
154 give_sigsegv: 154 give_sigsegv:
155 force_sig(SIGSEGV, current); 155 force_sig(SIGSEGV);
156 return retval; 156 return retval;
157} 157}
158 158
@@ -257,7 +257,7 @@ setup_frame(struct ksignal *ksig, sigset_t *set, struct sigscratch *scr)
257 */ 257 */
258 check_sp = (new_sp - sizeof(*frame)) & -STACK_ALIGN; 258 check_sp = (new_sp - sizeof(*frame)) & -STACK_ALIGN;
259 if (!likely(on_sig_stack(check_sp))) { 259 if (!likely(on_sig_stack(check_sp))) {
260 force_sigsegv(ksig->sig, current); 260 force_sigsegv(ksig->sig);
261 return 1; 261 return 1;
262 } 262 }
263 } 263 }
@@ -265,7 +265,7 @@ setup_frame(struct ksignal *ksig, sigset_t *set, struct sigscratch *scr)
265 frame = (void __user *) ((new_sp - sizeof(*frame)) & -STACK_ALIGN); 265 frame = (void __user *) ((new_sp - sizeof(*frame)) & -STACK_ALIGN);
266 266
267 if (!access_ok(frame, sizeof(*frame))) { 267 if (!access_ok(frame, sizeof(*frame))) {
268 force_sigsegv(ksig->sig, current); 268 force_sigsegv(ksig->sig);
269 return 1; 269 return 1;
270 } 270 }
271 271
@@ -282,7 +282,7 @@ setup_frame(struct ksignal *ksig, sigset_t *set, struct sigscratch *scr)
282 err |= setup_sigcontext(&frame->sc, set, scr); 282 err |= setup_sigcontext(&frame->sc, set, scr);
283 283
284 if (unlikely(err)) { 284 if (unlikely(err)) {
285 force_sigsegv(ksig->sig, current); 285 force_sigsegv(ksig->sig);
286 return 1; 286 return 1;
287 } 287 }
288 288
diff --git a/arch/ia64/kernel/traps.c b/arch/ia64/kernel/traps.c
index 85d8616ac4f6..e13cb905930f 100644
--- a/arch/ia64/kernel/traps.c
+++ b/arch/ia64/kernel/traps.c
@@ -176,7 +176,7 @@ __kprobes ia64_bad_break (unsigned long break_num, struct pt_regs *regs)
176 } 176 }
177 force_sig_fault(sig, code, 177 force_sig_fault(sig, code,
178 (void __user *) (regs->cr_iip + ia64_psr(regs)->ri), 178 (void __user *) (regs->cr_iip + ia64_psr(regs)->ri),
179 break_num, 0 /* clear __ISR_VALID */, 0, current); 179 break_num, 0 /* clear __ISR_VALID */, 0);
180} 180}
181 181
182/* 182/*
@@ -353,7 +353,7 @@ handle_fpu_swa (int fp_fault, struct pt_regs *regs, unsigned long isr)
353 } 353 }
354 force_sig_fault(SIGFPE, si_code, 354 force_sig_fault(SIGFPE, si_code,
355 (void __user *) (regs->cr_iip + ia64_psr(regs)->ri), 355 (void __user *) (regs->cr_iip + ia64_psr(regs)->ri),
356 0, __ISR_VALID, isr, current); 356 0, __ISR_VALID, isr);
357 } 357 }
358 } else { 358 } else {
359 if (exception == -1) { 359 if (exception == -1) {
@@ -373,7 +373,7 @@ handle_fpu_swa (int fp_fault, struct pt_regs *regs, unsigned long isr)
373 } 373 }
374 force_sig_fault(SIGFPE, si_code, 374 force_sig_fault(SIGFPE, si_code,
375 (void __user *) (regs->cr_iip + ia64_psr(regs)->ri), 375 (void __user *) (regs->cr_iip + ia64_psr(regs)->ri),
376 0, __ISR_VALID, isr, current); 376 0, __ISR_VALID, isr);
377 } 377 }
378 } 378 }
379 return 0; 379 return 0;
@@ -408,7 +408,7 @@ ia64_illegal_op_fault (unsigned long ec, long arg1, long arg2, long arg3,
408 408
409 force_sig_fault(SIGILL, ILL_ILLOPC, 409 force_sig_fault(SIGILL, ILL_ILLOPC,
410 (void __user *) (regs.cr_iip + ia64_psr(&regs)->ri), 410 (void __user *) (regs.cr_iip + ia64_psr(&regs)->ri),
411 0, 0, 0, current); 411 0, 0, 0);
412 return rv; 412 return rv;
413} 413}
414 414
@@ -483,7 +483,7 @@ ia64_fault (unsigned long vector, unsigned long isr, unsigned long ifa,
483 + ia64_psr(&regs)->ri); 483 + ia64_psr(&regs)->ri);
484 } 484 }
485 force_sig_fault(sig, code, addr, 485 force_sig_fault(sig, code, addr,
486 vector, __ISR_VALID, isr, current); 486 vector, __ISR_VALID, isr);
487 return; 487 return;
488 } else if (ia64_done_with_exception(&regs)) 488 } else if (ia64_done_with_exception(&regs))
489 return; 489 return;
@@ -493,7 +493,7 @@ ia64_fault (unsigned long vector, unsigned long isr, unsigned long ifa,
493 case 31: /* Unsupported Data Reference */ 493 case 31: /* Unsupported Data Reference */
494 if (user_mode(&regs)) { 494 if (user_mode(&regs)) {
495 force_sig_fault(SIGILL, ILL_ILLOPN, (void __user *) iip, 495 force_sig_fault(SIGILL, ILL_ILLOPN, (void __user *) iip,
496 vector, __ISR_VALID, isr, current); 496 vector, __ISR_VALID, isr);
497 return; 497 return;
498 } 498 }
499 sprintf(buf, "Unsupported data reference"); 499 sprintf(buf, "Unsupported data reference");
@@ -542,7 +542,7 @@ ia64_fault (unsigned long vector, unsigned long isr, unsigned long ifa,
542 == NOTIFY_STOP) 542 == NOTIFY_STOP)
543 return; 543 return;
544 force_sig_fault(SIGTRAP, si_code, (void __user *) ifa, 544 force_sig_fault(SIGTRAP, si_code, (void __user *) ifa,
545 0, __ISR_VALID, isr, current); 545 0, __ISR_VALID, isr);
546 return; 546 return;
547 547
548 case 32: /* fp fault */ 548 case 32: /* fp fault */
@@ -550,7 +550,7 @@ ia64_fault (unsigned long vector, unsigned long isr, unsigned long ifa,
550 result = handle_fpu_swa((vector == 32) ? 1 : 0, &regs, isr); 550 result = handle_fpu_swa((vector == 32) ? 1 : 0, &regs, isr);
551 if ((result < 0) || (current->thread.flags & IA64_THREAD_FPEMU_SIGFPE)) { 551 if ((result < 0) || (current->thread.flags & IA64_THREAD_FPEMU_SIGFPE)) {
552 force_sig_fault(SIGFPE, FPE_FLTINV, (void __user *) iip, 552 force_sig_fault(SIGFPE, FPE_FLTINV, (void __user *) iip,
553 0, __ISR_VALID, isr, current); 553 0, __ISR_VALID, isr);
554 } 554 }
555 return; 555 return;
556 556
@@ -578,7 +578,7 @@ ia64_fault (unsigned long vector, unsigned long isr, unsigned long ifa,
578 if (user_mode(&regs)) { 578 if (user_mode(&regs)) {
579 force_sig_fault(SIGILL, ILL_BADIADDR, 579 force_sig_fault(SIGILL, ILL_BADIADDR,
580 (void __user *) iip, 580 (void __user *) iip,
581 0, 0, 0, current); 581 0, 0, 0);
582 return; 582 return;
583 } 583 }
584 sprintf(buf, "Unimplemented Instruction Address fault"); 584 sprintf(buf, "Unimplemented Instruction Address fault");
@@ -589,14 +589,14 @@ ia64_fault (unsigned long vector, unsigned long isr, unsigned long ifa,
589 printk(KERN_ERR "Unexpected IA-32 exception (Trap 45)\n"); 589 printk(KERN_ERR "Unexpected IA-32 exception (Trap 45)\n");
590 printk(KERN_ERR " iip - 0x%lx, ifa - 0x%lx, isr - 0x%lx\n", 590 printk(KERN_ERR " iip - 0x%lx, ifa - 0x%lx, isr - 0x%lx\n",
591 iip, ifa, isr); 591 iip, ifa, isr);
592 force_sig(SIGSEGV, current); 592 force_sig(SIGSEGV);
593 return; 593 return;
594 594
595 case 46: 595 case 46:
596 printk(KERN_ERR "Unexpected IA-32 intercept trap (Trap 46)\n"); 596 printk(KERN_ERR "Unexpected IA-32 intercept trap (Trap 46)\n");
597 printk(KERN_ERR " iip - 0x%lx, ifa - 0x%lx, isr - 0x%lx, iim - 0x%lx\n", 597 printk(KERN_ERR " iip - 0x%lx, ifa - 0x%lx, isr - 0x%lx, iim - 0x%lx\n",
598 iip, ifa, isr, iim); 598 iip, ifa, isr, iim);
599 force_sig(SIGSEGV, current); 599 force_sig(SIGSEGV);
600 return; 600 return;
601 601
602 case 47: 602 case 47:
@@ -608,5 +608,5 @@ ia64_fault (unsigned long vector, unsigned long isr, unsigned long ifa,
608 break; 608 break;
609 } 609 }
610 if (!die_if_kernel(buf, &regs, error)) 610 if (!die_if_kernel(buf, &regs, error))
611 force_sig(SIGILL, current); 611 force_sig(SIGILL);
612} 612}
diff --git a/arch/ia64/kernel/unaligned.c b/arch/ia64/kernel/unaligned.c
index a167a3824b35..eb7d5df59fa3 100644
--- a/arch/ia64/kernel/unaligned.c
+++ b/arch/ia64/kernel/unaligned.c
@@ -1537,6 +1537,6 @@ ia64_handle_unaligned (unsigned long ifa, struct pt_regs *regs)
1537 } 1537 }
1538 force_sigbus: 1538 force_sigbus:
1539 force_sig_fault(SIGBUS, BUS_ADRALN, (void __user *) ifa, 1539 force_sig_fault(SIGBUS, BUS_ADRALN, (void __user *) ifa,
1540 0, 0, 0, current); 1540 0, 0, 0);
1541 goto done; 1541 goto done;
1542} 1542}
diff --git a/arch/ia64/mm/fault.c b/arch/ia64/mm/fault.c
index 5baeb022f474..3c3a283d3172 100644
--- a/arch/ia64/mm/fault.c
+++ b/arch/ia64/mm/fault.c
@@ -249,7 +249,7 @@ retry:
249 } 249 }
250 if (user_mode(regs)) { 250 if (user_mode(regs)) {
251 force_sig_fault(signal, code, (void __user *) address, 251 force_sig_fault(signal, code, (void __user *) address,
252 0, __ISR_VALID, isr, current); 252 0, __ISR_VALID, isr);
253 return; 253 return;
254 } 254 }
255 255
diff --git a/arch/m68k/kernel/signal.c b/arch/m68k/kernel/signal.c
index 87e7f3639839..05610e6924c1 100644
--- a/arch/m68k/kernel/signal.c
+++ b/arch/m68k/kernel/signal.c
@@ -803,7 +803,7 @@ asmlinkage int do_sigreturn(struct pt_regs *regs, struct switch_stack *sw)
803 return regs->d0; 803 return regs->d0;
804 804
805badframe: 805badframe:
806 force_sig(SIGSEGV, current); 806 force_sig(SIGSEGV);
807 return 0; 807 return 0;
808} 808}
809 809
@@ -825,7 +825,7 @@ asmlinkage int do_rt_sigreturn(struct pt_regs *regs, struct switch_stack *sw)
825 return regs->d0; 825 return regs->d0;
826 826
827badframe: 827badframe:
828 force_sig(SIGSEGV, current); 828 force_sig(SIGSEGV);
829 return 0; 829 return 0;
830} 830}
831 831
diff --git a/arch/m68k/kernel/traps.c b/arch/m68k/kernel/traps.c
index b2fd000b9285..344f93d36a9a 100644
--- a/arch/m68k/kernel/traps.c
+++ b/arch/m68k/kernel/traps.c
@@ -431,7 +431,7 @@ static inline void bus_error030 (struct frame *fp)
431 pr_err("BAD KERNEL BUSERR\n"); 431 pr_err("BAD KERNEL BUSERR\n");
432 432
433 die_if_kernel("Oops", &fp->ptregs,0); 433 die_if_kernel("Oops", &fp->ptregs,0);
434 force_sig(SIGKILL, current); 434 force_sig(SIGKILL);
435 return; 435 return;
436 } 436 }
437 } else { 437 } else {
@@ -463,7 +463,7 @@ static inline void bus_error030 (struct frame *fp)
463 !(ssw & RW) ? "write" : "read", addr, 463 !(ssw & RW) ? "write" : "read", addr,
464 fp->ptregs.pc); 464 fp->ptregs.pc);
465 die_if_kernel ("Oops", &fp->ptregs, buserr_type); 465 die_if_kernel ("Oops", &fp->ptregs, buserr_type);
466 force_sig (SIGBUS, current); 466 force_sig (SIGBUS);
467 return; 467 return;
468 } 468 }
469 469
@@ -493,7 +493,7 @@ static inline void bus_error030 (struct frame *fp)
493 do_page_fault (&fp->ptregs, addr, 0); 493 do_page_fault (&fp->ptregs, addr, 0);
494 } else { 494 } else {
495 pr_debug("protection fault on insn access (segv).\n"); 495 pr_debug("protection fault on insn access (segv).\n");
496 force_sig (SIGSEGV, current); 496 force_sig (SIGSEGV);
497 } 497 }
498} 498}
499#else 499#else
@@ -571,7 +571,7 @@ static inline void bus_error030 (struct frame *fp)
571 !(ssw & RW) ? "write" : "read", addr, 571 !(ssw & RW) ? "write" : "read", addr,
572 fp->ptregs.pc); 572 fp->ptregs.pc);
573 die_if_kernel("Oops",&fp->ptregs,mmusr); 573 die_if_kernel("Oops",&fp->ptregs,mmusr);
574 force_sig(SIGSEGV, current); 574 force_sig(SIGSEGV);
575 return; 575 return;
576 } else { 576 } else {
577#if 0 577#if 0
@@ -598,7 +598,7 @@ static inline void bus_error030 (struct frame *fp)
598#endif 598#endif
599 pr_debug("Unknown SIGSEGV - 1\n"); 599 pr_debug("Unknown SIGSEGV - 1\n");
600 die_if_kernel("Oops",&fp->ptregs,mmusr); 600 die_if_kernel("Oops",&fp->ptregs,mmusr);
601 force_sig(SIGSEGV, current); 601 force_sig(SIGSEGV);
602 return; 602 return;
603 } 603 }
604 604
@@ -621,7 +621,7 @@ static inline void bus_error030 (struct frame *fp)
621 buserr: 621 buserr:
622 pr_err("BAD KERNEL BUSERR\n"); 622 pr_err("BAD KERNEL BUSERR\n");
623 die_if_kernel("Oops",&fp->ptregs,0); 623 die_if_kernel("Oops",&fp->ptregs,0);
624 force_sig(SIGKILL, current); 624 force_sig(SIGKILL);
625 return; 625 return;
626 } 626 }
627 627
@@ -660,7 +660,7 @@ static inline void bus_error030 (struct frame *fp)
660 addr, fp->ptregs.pc); 660 addr, fp->ptregs.pc);
661 pr_debug("Unknown SIGSEGV - 2\n"); 661 pr_debug("Unknown SIGSEGV - 2\n");
662 die_if_kernel("Oops",&fp->ptregs,mmusr); 662 die_if_kernel("Oops",&fp->ptregs,mmusr);
663 force_sig(SIGSEGV, current); 663 force_sig(SIGSEGV);
664 return; 664 return;
665 } 665 }
666 666
@@ -804,7 +804,7 @@ asmlinkage void buserr_c(struct frame *fp)
804 default: 804 default:
805 die_if_kernel("bad frame format",&fp->ptregs,0); 805 die_if_kernel("bad frame format",&fp->ptregs,0);
806 pr_debug("Unknown SIGSEGV - 4\n"); 806 pr_debug("Unknown SIGSEGV - 4\n");
807 force_sig(SIGSEGV, current); 807 force_sig(SIGSEGV);
808 } 808 }
809} 809}
810 810
@@ -1127,7 +1127,7 @@ asmlinkage void trap_c(struct frame *fp)
1127 addr = (void __user*) fp->un.fmtb.daddr; 1127 addr = (void __user*) fp->un.fmtb.daddr;
1128 break; 1128 break;
1129 } 1129 }
1130 force_sig_fault(sig, si_code, addr, current); 1130 force_sig_fault(sig, si_code, addr);
1131} 1131}
1132 1132
1133void die_if_kernel (char *str, struct pt_regs *fp, int nr) 1133void die_if_kernel (char *str, struct pt_regs *fp, int nr)
@@ -1159,6 +1159,6 @@ asmlinkage void fpsp040_die(void)
1159#ifdef CONFIG_M68KFPU_EMU 1159#ifdef CONFIG_M68KFPU_EMU
1160asmlinkage void fpemu_signal(int signal, int code, void *addr) 1160asmlinkage void fpemu_signal(int signal, int code, void *addr)
1161{ 1161{
1162 force_sig_fault(signal, code, addr, current); 1162 force_sig_fault(signal, code, addr);
1163} 1163}
1164#endif 1164#endif
diff --git a/arch/m68k/mm/fault.c b/arch/m68k/mm/fault.c
index 9b6163c05a75..e9b1d7585b43 100644
--- a/arch/m68k/mm/fault.c
+++ b/arch/m68k/mm/fault.c
@@ -30,13 +30,13 @@ int send_fault_sig(struct pt_regs *regs)
30 pr_debug("send_fault_sig: %p,%d,%d\n", addr, signo, si_code); 30 pr_debug("send_fault_sig: %p,%d,%d\n", addr, signo, si_code);
31 31
32 if (user_mode(regs)) { 32 if (user_mode(regs)) {
33 force_sig_fault(signo, si_code, addr, current); 33 force_sig_fault(signo, si_code, addr);
34 } else { 34 } else {
35 if (fixup_exception(regs)) 35 if (fixup_exception(regs))
36 return -1; 36 return -1;
37 37
38 //if (signo == SIGBUS) 38 //if (signo == SIGBUS)
39 // force_sig_fault(si_signo, si_code, addr, current); 39 // force_sig_fault(si_signo, si_code, addr);
40 40
41 /* 41 /*
42 * Oops. The kernel tried to access some bad page. We'll have to 42 * Oops. The kernel tried to access some bad page. We'll have to
diff --git a/arch/microblaze/kernel/exceptions.c b/arch/microblaze/kernel/exceptions.c
index eafff21fcb0e..cf99c411503e 100644
--- a/arch/microblaze/kernel/exceptions.c
+++ b/arch/microblaze/kernel/exceptions.c
@@ -63,7 +63,7 @@ void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr)
63 if (kernel_mode(regs)) 63 if (kernel_mode(regs))
64 die("Exception in kernel mode", regs, signr); 64 die("Exception in kernel mode", regs, signr);
65 65
66 force_sig_fault(signr, code, (void __user *)addr, current); 66 force_sig_fault(signr, code, (void __user *)addr);
67} 67}
68 68
69asmlinkage void full_exception(struct pt_regs *regs, unsigned int type, 69asmlinkage void full_exception(struct pt_regs *regs, unsigned int type,
diff --git a/arch/microblaze/kernel/signal.c b/arch/microblaze/kernel/signal.c
index 0685696349bb..cdd4feb279c5 100644
--- a/arch/microblaze/kernel/signal.c
+++ b/arch/microblaze/kernel/signal.c
@@ -108,7 +108,7 @@ asmlinkage long sys_rt_sigreturn(struct pt_regs *regs)
108 return rval; 108 return rval;
109 109
110badframe: 110badframe:
111 force_sig(SIGSEGV, current); 111 force_sig(SIGSEGV);
112 return 0; 112 return 0;
113} 113}
114 114
diff --git a/arch/microblaze/mm/fault.c b/arch/microblaze/mm/fault.c
index 202ad6a494f5..e6a810b0c7ad 100644
--- a/arch/microblaze/mm/fault.c
+++ b/arch/microblaze/mm/fault.c
@@ -289,7 +289,7 @@ out_of_memory:
289do_sigbus: 289do_sigbus:
290 up_read(&mm->mmap_sem); 290 up_read(&mm->mmap_sem);
291 if (user_mode(regs)) { 291 if (user_mode(regs)) {
292 force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address, current); 292 force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address);
293 return; 293 return;
294 } 294 }
295 bad_page_fault(regs, address, SIGBUS); 295 bad_page_fault(regs, address, SIGBUS);
diff --git a/arch/mips/kernel/branch.c b/arch/mips/kernel/branch.c
index 180ad081afcf..1db29957a931 100644
--- a/arch/mips/kernel/branch.c
+++ b/arch/mips/kernel/branch.c
@@ -32,7 +32,7 @@ int __isa_exception_epc(struct pt_regs *regs)
32 /* Calculate exception PC in branch delay slot. */ 32 /* Calculate exception PC in branch delay slot. */
33 if (__get_user(inst, (u16 __user *) msk_isa16_mode(epc))) { 33 if (__get_user(inst, (u16 __user *) msk_isa16_mode(epc))) {
34 /* This should never happen because delay slot was checked. */ 34 /* This should never happen because delay slot was checked. */
35 force_sig(SIGSEGV, current); 35 force_sig(SIGSEGV);
36 return epc; 36 return epc;
37 } 37 }
38 if (cpu_has_mips16) { 38 if (cpu_has_mips16) {
@@ -305,7 +305,7 @@ int __microMIPS_compute_return_epc(struct pt_regs *regs)
305 return 0; 305 return 0;
306 306
307sigsegv: 307sigsegv:
308 force_sig(SIGSEGV, current); 308 force_sig(SIGSEGV);
309 return -EFAULT; 309 return -EFAULT;
310} 310}
311 311
@@ -328,7 +328,7 @@ int __MIPS16e_compute_return_epc(struct pt_regs *regs)
328 /* Read the instruction. */ 328 /* Read the instruction. */
329 addr = (u16 __user *)msk_isa16_mode(epc); 329 addr = (u16 __user *)msk_isa16_mode(epc);
330 if (__get_user(inst.full, addr)) { 330 if (__get_user(inst.full, addr)) {
331 force_sig(SIGSEGV, current); 331 force_sig(SIGSEGV);
332 return -EFAULT; 332 return -EFAULT;
333 } 333 }
334 334
@@ -343,7 +343,7 @@ int __MIPS16e_compute_return_epc(struct pt_regs *regs)
343 case MIPS16e_jal_op: 343 case MIPS16e_jal_op:
344 addr += 1; 344 addr += 1;
345 if (__get_user(inst2, addr)) { 345 if (__get_user(inst2, addr)) {
346 force_sig(SIGSEGV, current); 346 force_sig(SIGSEGV);
347 return -EFAULT; 347 return -EFAULT;
348 } 348 }
349 fullinst = ((unsigned)inst.full << 16) | inst2; 349 fullinst = ((unsigned)inst.full << 16) | inst2;
@@ -829,17 +829,17 @@ int __compute_return_epc_for_insn(struct pt_regs *regs,
829sigill_dsp: 829sigill_dsp:
830 pr_debug("%s: DSP branch but not DSP ASE - sending SIGILL.\n", 830 pr_debug("%s: DSP branch but not DSP ASE - sending SIGILL.\n",
831 current->comm); 831 current->comm);
832 force_sig(SIGILL, current); 832 force_sig(SIGILL);
833 return -EFAULT; 833 return -EFAULT;
834sigill_r2r6: 834sigill_r2r6:
835 pr_debug("%s: R2 branch but r2-to-r6 emulator is not present - sending SIGILL.\n", 835 pr_debug("%s: R2 branch but r2-to-r6 emulator is not present - sending SIGILL.\n",
836 current->comm); 836 current->comm);
837 force_sig(SIGILL, current); 837 force_sig(SIGILL);
838 return -EFAULT; 838 return -EFAULT;
839sigill_r6: 839sigill_r6:
840 pr_debug("%s: R6 branch but no MIPSr6 ISA support - sending SIGILL.\n", 840 pr_debug("%s: R6 branch but no MIPSr6 ISA support - sending SIGILL.\n",
841 current->comm); 841 current->comm);
842 force_sig(SIGILL, current); 842 force_sig(SIGILL);
843 return -EFAULT; 843 return -EFAULT;
844} 844}
845EXPORT_SYMBOL_GPL(__compute_return_epc_for_insn); 845EXPORT_SYMBOL_GPL(__compute_return_epc_for_insn);
@@ -859,7 +859,7 @@ int __compute_return_epc(struct pt_regs *regs)
859 */ 859 */
860 addr = (unsigned int __user *) epc; 860 addr = (unsigned int __user *) epc;
861 if (__get_user(insn.word, addr)) { 861 if (__get_user(insn.word, addr)) {
862 force_sig(SIGSEGV, current); 862 force_sig(SIGSEGV);
863 return -EFAULT; 863 return -EFAULT;
864 } 864 }
865 865
@@ -867,7 +867,7 @@ int __compute_return_epc(struct pt_regs *regs)
867 867
868unaligned: 868unaligned:
869 printk("%s: unaligned epc - sending SIGBUS.\n", current->comm); 869 printk("%s: unaligned epc - sending SIGBUS.\n", current->comm);
870 force_sig(SIGBUS, current); 870 force_sig(SIGBUS);
871 return -EFAULT; 871 return -EFAULT;
872} 872}
873 873
diff --git a/arch/mips/kernel/kprobes.c b/arch/mips/kernel/kprobes.c
index 07c941c99e92..81ba1d3c367c 100644
--- a/arch/mips/kernel/kprobes.c
+++ b/arch/mips/kernel/kprobes.c
@@ -220,7 +220,7 @@ static int evaluate_branch_instruction(struct kprobe *p, struct pt_regs *regs,
220 220
221unaligned: 221unaligned:
222 pr_notice("%s: unaligned epc - sending SIGBUS.\n", current->comm); 222 pr_notice("%s: unaligned epc - sending SIGBUS.\n", current->comm);
223 force_sig(SIGBUS, current); 223 force_sig(SIGBUS);
224 return -EFAULT; 224 return -EFAULT;
225 225
226} 226}
diff --git a/arch/mips/kernel/signal.c b/arch/mips/kernel/signal.c
index d75337974ee9..f6efabcb4e92 100644
--- a/arch/mips/kernel/signal.c
+++ b/arch/mips/kernel/signal.c
@@ -641,7 +641,7 @@ asmlinkage void sys_sigreturn(void)
641 if (sig < 0) 641 if (sig < 0)
642 goto badframe; 642 goto badframe;
643 else if (sig) 643 else if (sig)
644 force_sig(sig, current); 644 force_sig(sig);
645 645
646 /* 646 /*
647 * Don't let your children do this ... 647 * Don't let your children do this ...
@@ -654,7 +654,7 @@ asmlinkage void sys_sigreturn(void)
654 /* Unreached */ 654 /* Unreached */
655 655
656badframe: 656badframe:
657 force_sig(SIGSEGV, current); 657 force_sig(SIGSEGV);
658} 658}
659#endif /* CONFIG_TRAD_SIGNALS */ 659#endif /* CONFIG_TRAD_SIGNALS */
660 660
@@ -678,7 +678,7 @@ asmlinkage void sys_rt_sigreturn(void)
678 if (sig < 0) 678 if (sig < 0)
679 goto badframe; 679 goto badframe;
680 else if (sig) 680 else if (sig)
681 force_sig(sig, current); 681 force_sig(sig);
682 682
683 if (restore_altstack(&frame->rs_uc.uc_stack)) 683 if (restore_altstack(&frame->rs_uc.uc_stack))
684 goto badframe; 684 goto badframe;
@@ -694,7 +694,7 @@ asmlinkage void sys_rt_sigreturn(void)
694 /* Unreached */ 694 /* Unreached */
695 695
696badframe: 696badframe:
697 force_sig(SIGSEGV, current); 697 force_sig(SIGSEGV);
698} 698}
699 699
700#ifdef CONFIG_TRAD_SIGNALS 700#ifdef CONFIG_TRAD_SIGNALS
diff --git a/arch/mips/kernel/signal_n32.c b/arch/mips/kernel/signal_n32.c
index 9a6e58b48bb6..7bd00fad61af 100644
--- a/arch/mips/kernel/signal_n32.c
+++ b/arch/mips/kernel/signal_n32.c
@@ -71,7 +71,7 @@ asmlinkage void sysn32_rt_sigreturn(void)
71 if (sig < 0) 71 if (sig < 0)
72 goto badframe; 72 goto badframe;
73 else if (sig) 73 else if (sig)
74 force_sig(sig, current); 74 force_sig(sig);
75 75
76 if (compat_restore_altstack(&frame->rs_uc.uc_stack)) 76 if (compat_restore_altstack(&frame->rs_uc.uc_stack))
77 goto badframe; 77 goto badframe;
@@ -87,7 +87,7 @@ asmlinkage void sysn32_rt_sigreturn(void)
87 /* Unreached */ 87 /* Unreached */
88 88
89badframe: 89badframe:
90 force_sig(SIGSEGV, current); 90 force_sig(SIGSEGV);
91} 91}
92 92
93static int setup_rt_frame_n32(void *sig_return, struct ksignal *ksig, 93static int setup_rt_frame_n32(void *sig_return, struct ksignal *ksig,
diff --git a/arch/mips/kernel/signal_o32.c b/arch/mips/kernel/signal_o32.c
index df259618e834..299a7a28ca33 100644
--- a/arch/mips/kernel/signal_o32.c
+++ b/arch/mips/kernel/signal_o32.c
@@ -171,7 +171,7 @@ asmlinkage void sys32_rt_sigreturn(void)
171 if (sig < 0) 171 if (sig < 0)
172 goto badframe; 172 goto badframe;
173 else if (sig) 173 else if (sig)
174 force_sig(sig, current); 174 force_sig(sig);
175 175
176 if (compat_restore_altstack(&frame->rs_uc.uc_stack)) 176 if (compat_restore_altstack(&frame->rs_uc.uc_stack))
177 goto badframe; 177 goto badframe;
@@ -187,7 +187,7 @@ asmlinkage void sys32_rt_sigreturn(void)
187 /* Unreached */ 187 /* Unreached */
188 188
189badframe: 189badframe:
190 force_sig(SIGSEGV, current); 190 force_sig(SIGSEGV);
191} 191}
192 192
193static int setup_rt_frame_32(void *sig_return, struct ksignal *ksig, 193static int setup_rt_frame_32(void *sig_return, struct ksignal *ksig,
@@ -273,7 +273,7 @@ asmlinkage void sys32_sigreturn(void)
273 if (sig < 0) 273 if (sig < 0)
274 goto badframe; 274 goto badframe;
275 else if (sig) 275 else if (sig)
276 force_sig(sig, current); 276 force_sig(sig);
277 277
278 /* 278 /*
279 * Don't let your children do this ... 279 * Don't let your children do this ...
@@ -286,5 +286,5 @@ asmlinkage void sys32_sigreturn(void)
286 /* Unreached */ 286 /* Unreached */
287 287
288badframe: 288badframe:
289 force_sig(SIGSEGV, current); 289 force_sig(SIGSEGV);
290} 290}
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c
index ac7159263da0..342e41de9d64 100644
--- a/arch/mips/kernel/traps.c
+++ b/arch/mips/kernel/traps.c
@@ -482,7 +482,7 @@ asmlinkage void do_be(struct pt_regs *regs)
482 goto out; 482 goto out;
483 483
484 die_if_kernel("Oops", regs); 484 die_if_kernel("Oops", regs);
485 force_sig(SIGBUS, current); 485 force_sig(SIGBUS);
486 486
487out: 487out:
488 exception_exit(prev_state); 488 exception_exit(prev_state);
@@ -705,7 +705,7 @@ asmlinkage void do_ov(struct pt_regs *regs)
705 prev_state = exception_enter(); 705 prev_state = exception_enter();
706 die_if_kernel("Integer overflow", regs); 706 die_if_kernel("Integer overflow", regs);
707 707
708 force_sig_fault(SIGFPE, FPE_INTOVF, (void __user *)regs->cp0_epc, current); 708 force_sig_fault(SIGFPE, FPE_INTOVF, (void __user *)regs->cp0_epc);
709 exception_exit(prev_state); 709 exception_exit(prev_state);
710} 710}
711 711
@@ -733,7 +733,7 @@ void force_fcr31_sig(unsigned long fcr31, void __user *fault_addr,
733 else if (fcr31 & FPU_CSR_INE_X) 733 else if (fcr31 & FPU_CSR_INE_X)
734 si_code = FPE_FLTRES; 734 si_code = FPE_FLTRES;
735 735
736 force_sig_fault(SIGFPE, si_code, fault_addr, tsk); 736 force_sig_fault_to_task(SIGFPE, si_code, fault_addr, tsk);
737} 737}
738 738
739int process_fpemu_return(int sig, void __user *fault_addr, unsigned long fcr31) 739int process_fpemu_return(int sig, void __user *fault_addr, unsigned long fcr31)
@@ -750,7 +750,7 @@ int process_fpemu_return(int sig, void __user *fault_addr, unsigned long fcr31)
750 return 1; 750 return 1;
751 751
752 case SIGBUS: 752 case SIGBUS:
753 force_sig_fault(SIGBUS, BUS_ADRERR, fault_addr, current); 753 force_sig_fault(SIGBUS, BUS_ADRERR, fault_addr);
754 return 1; 754 return 1;
755 755
756 case SIGSEGV: 756 case SIGSEGV:
@@ -761,11 +761,11 @@ int process_fpemu_return(int sig, void __user *fault_addr, unsigned long fcr31)
761 else 761 else
762 si_code = SEGV_MAPERR; 762 si_code = SEGV_MAPERR;
763 up_read(&current->mm->mmap_sem); 763 up_read(&current->mm->mmap_sem);
764 force_sig_fault(SIGSEGV, si_code, fault_addr, current); 764 force_sig_fault(SIGSEGV, si_code, fault_addr);
765 return 1; 765 return 1;
766 766
767 default: 767 default:
768 force_sig(sig, current); 768 force_sig(sig);
769 return 1; 769 return 1;
770 } 770 }
771} 771}
@@ -943,11 +943,11 @@ void do_trap_or_bp(struct pt_regs *regs, unsigned int code, int si_code,
943 die_if_kernel(b, regs); 943 die_if_kernel(b, regs);
944 force_sig_fault(SIGFPE, 944 force_sig_fault(SIGFPE,
945 code == BRK_DIVZERO ? FPE_INTDIV : FPE_INTOVF, 945 code == BRK_DIVZERO ? FPE_INTDIV : FPE_INTOVF,
946 (void __user *) regs->cp0_epc, current); 946 (void __user *) regs->cp0_epc);
947 break; 947 break;
948 case BRK_BUG: 948 case BRK_BUG:
949 die_if_kernel("Kernel bug detected", regs); 949 die_if_kernel("Kernel bug detected", regs);
950 force_sig(SIGTRAP, current); 950 force_sig(SIGTRAP);
951 break; 951 break;
952 case BRK_MEMU: 952 case BRK_MEMU:
953 /* 953 /*
@@ -962,15 +962,15 @@ void do_trap_or_bp(struct pt_regs *regs, unsigned int code, int si_code,
962 return; 962 return;
963 963
964 die_if_kernel("Math emu break/trap", regs); 964 die_if_kernel("Math emu break/trap", regs);
965 force_sig(SIGTRAP, current); 965 force_sig(SIGTRAP);
966 break; 966 break;
967 default: 967 default:
968 scnprintf(b, sizeof(b), "%s instruction in kernel code", str); 968 scnprintf(b, sizeof(b), "%s instruction in kernel code", str);
969 die_if_kernel(b, regs); 969 die_if_kernel(b, regs);
970 if (si_code) { 970 if (si_code) {
971 force_sig_fault(SIGTRAP, si_code, NULL, current); 971 force_sig_fault(SIGTRAP, si_code, NULL);
972 } else { 972 } else {
973 force_sig(SIGTRAP, current); 973 force_sig(SIGTRAP);
974 } 974 }
975 } 975 }
976} 976}
@@ -1063,7 +1063,7 @@ out:
1063 return; 1063 return;
1064 1064
1065out_sigsegv: 1065out_sigsegv:
1066 force_sig(SIGSEGV, current); 1066 force_sig(SIGSEGV);
1067 goto out; 1067 goto out;
1068} 1068}
1069 1069
@@ -1105,7 +1105,7 @@ out:
1105 return; 1105 return;
1106 1106
1107out_sigsegv: 1107out_sigsegv:
1108 force_sig(SIGSEGV, current); 1108 force_sig(SIGSEGV);
1109 goto out; 1109 goto out;
1110} 1110}
1111 1111
@@ -1191,7 +1191,7 @@ no_r2_instr:
1191 if (unlikely(status > 0)) { 1191 if (unlikely(status > 0)) {
1192 regs->cp0_epc = old_epc; /* Undo skip-over. */ 1192 regs->cp0_epc = old_epc; /* Undo skip-over. */
1193 regs->regs[31] = old31; 1193 regs->regs[31] = old31;
1194 force_sig(status, current); 1194 force_sig(status);
1195 } 1195 }
1196 1196
1197out: 1197out:
@@ -1220,7 +1220,7 @@ static int default_cu2_call(struct notifier_block *nfb, unsigned long action,
1220 1220
1221 die_if_kernel("COP2: Unhandled kernel unaligned access or invalid " 1221 die_if_kernel("COP2: Unhandled kernel unaligned access or invalid "
1222 "instruction", regs); 1222 "instruction", regs);
1223 force_sig(SIGILL, current); 1223 force_sig(SIGILL);
1224 1224
1225 return NOTIFY_OK; 1225 return NOTIFY_OK;
1226} 1226}
@@ -1383,7 +1383,7 @@ asmlinkage void do_cpu(struct pt_regs *regs)
1383 if (unlikely(status > 0)) { 1383 if (unlikely(status > 0)) {
1384 regs->cp0_epc = old_epc; /* Undo skip-over. */ 1384 regs->cp0_epc = old_epc; /* Undo skip-over. */
1385 regs->regs[31] = old31; 1385 regs->regs[31] = old31;
1386 force_sig(status, current); 1386 force_sig(status);
1387 } 1387 }
1388 1388
1389 break; 1389 break;
@@ -1403,7 +1403,7 @@ asmlinkage void do_cpu(struct pt_regs *regs)
1403 * emulator too. 1403 * emulator too.
1404 */ 1404 */
1405 if (raw_cpu_has_fpu || !cpu_has_mips_4_5_64_r2_r6) { 1405 if (raw_cpu_has_fpu || !cpu_has_mips_4_5_64_r2_r6) {
1406 force_sig(SIGILL, current); 1406 force_sig(SIGILL);
1407 break; 1407 break;
1408 } 1408 }
1409 /* Fall through. */ 1409 /* Fall through. */
@@ -1437,7 +1437,7 @@ asmlinkage void do_cpu(struct pt_regs *regs)
1437#else /* CONFIG_MIPS_FP_SUPPORT */ 1437#else /* CONFIG_MIPS_FP_SUPPORT */
1438 case 1: 1438 case 1:
1439 case 3: 1439 case 3:
1440 force_sig(SIGILL, current); 1440 force_sig(SIGILL);
1441 break; 1441 break;
1442#endif /* CONFIG_MIPS_FP_SUPPORT */ 1442#endif /* CONFIG_MIPS_FP_SUPPORT */
1443 1443
@@ -1464,7 +1464,7 @@ asmlinkage void do_msa_fpe(struct pt_regs *regs, unsigned int msacsr)
1464 local_irq_enable(); 1464 local_irq_enable();
1465 1465
1466 die_if_kernel("do_msa_fpe invoked from kernel context!", regs); 1466 die_if_kernel("do_msa_fpe invoked from kernel context!", regs);
1467 force_sig(SIGFPE, current); 1467 force_sig(SIGFPE);
1468out: 1468out:
1469 exception_exit(prev_state); 1469 exception_exit(prev_state);
1470} 1470}
@@ -1477,7 +1477,7 @@ asmlinkage void do_msa(struct pt_regs *regs)
1477 prev_state = exception_enter(); 1477 prev_state = exception_enter();
1478 1478
1479 if (!cpu_has_msa || test_thread_flag(TIF_32BIT_FPREGS)) { 1479 if (!cpu_has_msa || test_thread_flag(TIF_32BIT_FPREGS)) {
1480 force_sig(SIGILL, current); 1480 force_sig(SIGILL);
1481 goto out; 1481 goto out;
1482 } 1482 }
1483 1483
@@ -1485,7 +1485,7 @@ asmlinkage void do_msa(struct pt_regs *regs)
1485 1485
1486 err = enable_restore_fp_context(1); 1486 err = enable_restore_fp_context(1);
1487 if (err) 1487 if (err)
1488 force_sig(SIGILL, current); 1488 force_sig(SIGILL);
1489out: 1489out:
1490 exception_exit(prev_state); 1490 exception_exit(prev_state);
1491} 1491}
@@ -1495,7 +1495,7 @@ asmlinkage void do_mdmx(struct pt_regs *regs)
1495 enum ctx_state prev_state; 1495 enum ctx_state prev_state;
1496 1496
1497 prev_state = exception_enter(); 1497 prev_state = exception_enter();
1498 force_sig(SIGILL, current); 1498 force_sig(SIGILL);
1499 exception_exit(prev_state); 1499 exception_exit(prev_state);
1500} 1500}
1501 1501
@@ -1521,7 +1521,7 @@ asmlinkage void do_watch(struct pt_regs *regs)
1521 if (test_tsk_thread_flag(current, TIF_LOAD_WATCH)) { 1521 if (test_tsk_thread_flag(current, TIF_LOAD_WATCH)) {
1522 mips_read_watch_registers(); 1522 mips_read_watch_registers();
1523 local_irq_enable(); 1523 local_irq_enable();
1524 force_sig_fault(SIGTRAP, TRAP_HWBKPT, NULL, current); 1524 force_sig_fault(SIGTRAP, TRAP_HWBKPT, NULL);
1525 } else { 1525 } else {
1526 mips_clear_watch_registers(); 1526 mips_clear_watch_registers();
1527 local_irq_enable(); 1527 local_irq_enable();
@@ -1592,7 +1592,7 @@ asmlinkage void do_mt(struct pt_regs *regs)
1592 } 1592 }
1593 die_if_kernel("MIPS MT Thread exception in kernel", regs); 1593 die_if_kernel("MIPS MT Thread exception in kernel", regs);
1594 1594
1595 force_sig(SIGILL, current); 1595 force_sig(SIGILL);
1596} 1596}
1597 1597
1598 1598
@@ -1601,7 +1601,7 @@ asmlinkage void do_dsp(struct pt_regs *regs)
1601 if (cpu_has_dsp) 1601 if (cpu_has_dsp)
1602 panic("Unexpected DSP exception"); 1602 panic("Unexpected DSP exception");
1603 1603
1604 force_sig(SIGILL, current); 1604 force_sig(SIGILL);
1605} 1605}
1606 1606
1607asmlinkage void do_reserved(struct pt_regs *regs) 1607asmlinkage void do_reserved(struct pt_regs *regs)
diff --git a/arch/mips/kernel/unaligned.c b/arch/mips/kernel/unaligned.c
index 76e33f940971..92bd2b0f0548 100644
--- a/arch/mips/kernel/unaligned.c
+++ b/arch/mips/kernel/unaligned.c
@@ -1365,20 +1365,20 @@ fault:
1365 return; 1365 return;
1366 1366
1367 die_if_kernel("Unhandled kernel unaligned access", regs); 1367 die_if_kernel("Unhandled kernel unaligned access", regs);
1368 force_sig(SIGSEGV, current); 1368 force_sig(SIGSEGV);
1369 1369
1370 return; 1370 return;
1371 1371
1372sigbus: 1372sigbus:
1373 die_if_kernel("Unhandled kernel unaligned access", regs); 1373 die_if_kernel("Unhandled kernel unaligned access", regs);
1374 force_sig(SIGBUS, current); 1374 force_sig(SIGBUS);
1375 1375
1376 return; 1376 return;
1377 1377
1378sigill: 1378sigill:
1379 die_if_kernel 1379 die_if_kernel
1380 ("Unhandled kernel unaligned access or invalid instruction", regs); 1380 ("Unhandled kernel unaligned access or invalid instruction", regs);
1381 force_sig(SIGILL, current); 1381 force_sig(SIGILL);
1382} 1382}
1383 1383
1384/* Recode table from 16-bit register notation to 32-bit GPR. */ 1384/* Recode table from 16-bit register notation to 32-bit GPR. */
@@ -1991,20 +1991,20 @@ fault:
1991 return; 1991 return;
1992 1992
1993 die_if_kernel("Unhandled kernel unaligned access", regs); 1993 die_if_kernel("Unhandled kernel unaligned access", regs);
1994 force_sig(SIGSEGV, current); 1994 force_sig(SIGSEGV);
1995 1995
1996 return; 1996 return;
1997 1997
1998sigbus: 1998sigbus:
1999 die_if_kernel("Unhandled kernel unaligned access", regs); 1999 die_if_kernel("Unhandled kernel unaligned access", regs);
2000 force_sig(SIGBUS, current); 2000 force_sig(SIGBUS);
2001 2001
2002 return; 2002 return;
2003 2003
2004sigill: 2004sigill:
2005 die_if_kernel 2005 die_if_kernel
2006 ("Unhandled kernel unaligned access or invalid instruction", regs); 2006 ("Unhandled kernel unaligned access or invalid instruction", regs);
2007 force_sig(SIGILL, current); 2007 force_sig(SIGILL);
2008} 2008}
2009 2009
2010static void emulate_load_store_MIPS16e(struct pt_regs *regs, void __user * addr) 2010static void emulate_load_store_MIPS16e(struct pt_regs *regs, void __user * addr)
@@ -2271,20 +2271,20 @@ fault:
2271 return; 2271 return;
2272 2272
2273 die_if_kernel("Unhandled kernel unaligned access", regs); 2273 die_if_kernel("Unhandled kernel unaligned access", regs);
2274 force_sig(SIGSEGV, current); 2274 force_sig(SIGSEGV);
2275 2275
2276 return; 2276 return;
2277 2277
2278sigbus: 2278sigbus:
2279 die_if_kernel("Unhandled kernel unaligned access", regs); 2279 die_if_kernel("Unhandled kernel unaligned access", regs);
2280 force_sig(SIGBUS, current); 2280 force_sig(SIGBUS);
2281 2281
2282 return; 2282 return;
2283 2283
2284sigill: 2284sigill:
2285 die_if_kernel 2285 die_if_kernel
2286 ("Unhandled kernel unaligned access or invalid instruction", regs); 2286 ("Unhandled kernel unaligned access or invalid instruction", regs);
2287 force_sig(SIGILL, current); 2287 force_sig(SIGILL);
2288} 2288}
2289 2289
2290asmlinkage void do_ade(struct pt_regs *regs) 2290asmlinkage void do_ade(struct pt_regs *regs)
@@ -2364,7 +2364,7 @@ asmlinkage void do_ade(struct pt_regs *regs)
2364 2364
2365sigbus: 2365sigbus:
2366 die_if_kernel("Kernel unaligned instruction access", regs); 2366 die_if_kernel("Kernel unaligned instruction access", regs);
2367 force_sig(SIGBUS, current); 2367 force_sig(SIGBUS);
2368 2368
2369 /* 2369 /*
2370 * XXX On return from the signal handler we should advance the epc 2370 * XXX On return from the signal handler we should advance the epc
diff --git a/arch/mips/mm/fault.c b/arch/mips/mm/fault.c
index 73d8a0f0b810..f589aa8f47d9 100644
--- a/arch/mips/mm/fault.c
+++ b/arch/mips/mm/fault.c
@@ -223,7 +223,7 @@ bad_area_nosemaphore:
223 pr_cont("\n"); 223 pr_cont("\n");
224 } 224 }
225 current->thread.trap_nr = (regs->cp0_cause >> 2) & 0x1f; 225 current->thread.trap_nr = (regs->cp0_cause >> 2) & 0x1f;
226 force_sig_fault(SIGSEGV, si_code, (void __user *)address, tsk); 226 force_sig_fault(SIGSEGV, si_code, (void __user *)address);
227 return; 227 return;
228 } 228 }
229 229
@@ -279,7 +279,7 @@ do_sigbus:
279#endif 279#endif
280 current->thread.trap_nr = (regs->cp0_cause >> 2) & 0x1f; 280 current->thread.trap_nr = (regs->cp0_cause >> 2) & 0x1f;
281 tsk->thread.cp0_badvaddr = address; 281 tsk->thread.cp0_badvaddr = address;
282 force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address, tsk); 282 force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address);
283 283
284 return; 284 return;
285#ifndef CONFIG_64BIT 285#ifndef CONFIG_64BIT
diff --git a/arch/mips/sgi-ip22/ip22-berr.c b/arch/mips/sgi-ip22/ip22-berr.c
index 34bb9801d5ff..dc0110a607a5 100644
--- a/arch/mips/sgi-ip22/ip22-berr.c
+++ b/arch/mips/sgi-ip22/ip22-berr.c
@@ -98,7 +98,7 @@ void ip22_be_interrupt(int irq)
98 field, regs->cp0_epc, field, regs->regs[31]); 98 field, regs->cp0_epc, field, regs->regs[31]);
99 /* Assume it would be too dangerous to continue ... */ 99 /* Assume it would be too dangerous to continue ... */
100 die_if_kernel("Oops", regs); 100 die_if_kernel("Oops", regs);
101 force_sig(SIGBUS, current); 101 force_sig(SIGBUS);
102} 102}
103 103
104static int ip22_be_handler(struct pt_regs *regs, int is_fixup) 104static int ip22_be_handler(struct pt_regs *regs, int is_fixup)
diff --git a/arch/mips/sgi-ip22/ip28-berr.c b/arch/mips/sgi-ip22/ip28-berr.c
index 082541d33161..c0cf7baee36d 100644
--- a/arch/mips/sgi-ip22/ip28-berr.c
+++ b/arch/mips/sgi-ip22/ip28-berr.c
@@ -462,7 +462,7 @@ void ip22_be_interrupt(int irq)
462 if (ip28_be_interrupt(regs) != MIPS_BE_DISCARD) { 462 if (ip28_be_interrupt(regs) != MIPS_BE_DISCARD) {
463 /* Assume it would be too dangerous to continue ... */ 463 /* Assume it would be too dangerous to continue ... */
464 die_if_kernel("Oops", regs); 464 die_if_kernel("Oops", regs);
465 force_sig(SIGBUS, current); 465 force_sig(SIGBUS);
466 } else if (debug_be_interrupt) 466 } else if (debug_be_interrupt)
467 show_regs(regs); 467 show_regs(regs);
468} 468}
diff --git a/arch/mips/sgi-ip27/ip27-berr.c b/arch/mips/sgi-ip27/ip27-berr.c
index 83efe03d5c60..73ad29b180fb 100644
--- a/arch/mips/sgi-ip27/ip27-berr.c
+++ b/arch/mips/sgi-ip27/ip27-berr.c
@@ -74,7 +74,7 @@ int ip27_be_handler(struct pt_regs *regs, int is_fixup)
74 show_regs(regs); 74 show_regs(regs);
75 dump_tlb_all(); 75 dump_tlb_all();
76 while(1); 76 while(1);
77 force_sig(SIGBUS, current); 77 force_sig(SIGBUS);
78} 78}
79 79
80void __init ip27_be_init(void) 80void __init ip27_be_init(void)
diff --git a/arch/mips/sgi-ip32/ip32-berr.c b/arch/mips/sgi-ip32/ip32-berr.c
index c1f12a9cf305..c860f95ab7ed 100644
--- a/arch/mips/sgi-ip32/ip32-berr.c
+++ b/arch/mips/sgi-ip32/ip32-berr.c
@@ -29,7 +29,7 @@ static int ip32_be_handler(struct pt_regs *regs, int is_fixup)
29 show_regs(regs); 29 show_regs(regs);
30 dump_tlb_all(); 30 dump_tlb_all();
31 while(1); 31 while(1);
32 force_sig(SIGBUS, current); 32 force_sig(SIGBUS);
33} 33}
34 34
35void __init ip32_be_init(void) 35void __init ip32_be_init(void)
diff --git a/arch/nds32/kernel/fpu.c b/arch/nds32/kernel/fpu.c
index cf0b8760f261..62bdafbc53f4 100644
--- a/arch/nds32/kernel/fpu.c
+++ b/arch/nds32/kernel/fpu.c
@@ -243,7 +243,7 @@ inline void handle_fpu_exception(struct pt_regs *regs)
243 } 243 }
244 244
245 force_sig_fault(si_signo, si_code, 245 force_sig_fault(si_signo, si_code,
246 (void __user *)instruction_pointer(regs), current); 246 (void __user *)instruction_pointer(regs));
247done: 247done:
248 own_fpu(); 248 own_fpu();
249} 249}
diff --git a/arch/nds32/kernel/signal.c b/arch/nds32/kernel/signal.c
index 5f7660aa2d68..fe61513982b4 100644
--- a/arch/nds32/kernel/signal.c
+++ b/arch/nds32/kernel/signal.c
@@ -163,7 +163,7 @@ asmlinkage long sys_rt_sigreturn(struct pt_regs *regs)
163 return regs->uregs[0]; 163 return regs->uregs[0];
164 164
165badframe: 165badframe:
166 force_sig(SIGSEGV, current); 166 force_sig(SIGSEGV);
167 return 0; 167 return 0;
168} 168}
169 169
diff --git a/arch/nds32/kernel/traps.c b/arch/nds32/kernel/traps.c
index 5aa7c17da27a..f4d386b52622 100644
--- a/arch/nds32/kernel/traps.c
+++ b/arch/nds32/kernel/traps.c
@@ -205,7 +205,7 @@ int bad_syscall(int n, struct pt_regs *regs)
205 } 205 }
206 206
207 force_sig_fault(SIGILL, ILL_ILLTRP, 207 force_sig_fault(SIGILL, ILL_ILLTRP,
208 (void __user *)instruction_pointer(regs) - 4, current); 208 (void __user *)instruction_pointer(regs) - 4);
209 die_if_kernel("Oops - bad syscall", regs, n); 209 die_if_kernel("Oops - bad syscall", regs, n);
210 return regs->uregs[0]; 210 return regs->uregs[0];
211} 211}
@@ -255,14 +255,15 @@ void __init early_trap_init(void)
255 cpu_cache_wbinval_page(base, true); 255 cpu_cache_wbinval_page(base, true);
256} 256}
257 257
258void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs, 258static void send_sigtrap(struct pt_regs *regs, int error_code, int si_code)
259 int error_code, int si_code)
260{ 259{
260 struct task_struct *tsk = current;
261
261 tsk->thread.trap_no = ENTRY_DEBUG_RELATED; 262 tsk->thread.trap_no = ENTRY_DEBUG_RELATED;
262 tsk->thread.error_code = error_code; 263 tsk->thread.error_code = error_code;
263 264
264 force_sig_fault(SIGTRAP, si_code, 265 force_sig_fault(SIGTRAP, si_code,
265 (void __user *)instruction_pointer(regs), tsk); 266 (void __user *)instruction_pointer(regs));
266} 267}
267 268
268void do_debug_trap(unsigned long entry, unsigned long addr, 269void do_debug_trap(unsigned long entry, unsigned long addr,
@@ -274,7 +275,7 @@ void do_debug_trap(unsigned long entry, unsigned long addr,
274 275
275 if (user_mode(regs)) { 276 if (user_mode(regs)) {
276 /* trap_signal */ 277 /* trap_signal */
277 send_sigtrap(current, regs, 0, TRAP_BRKPT); 278 send_sigtrap(regs, 0, TRAP_BRKPT);
278 } else { 279 } else {
279 /* kernel_trap */ 280 /* kernel_trap */
280 if (!fixup_exception(regs)) 281 if (!fixup_exception(regs))
@@ -288,7 +289,7 @@ void unhandled_interruption(struct pt_regs *regs)
288 show_regs(regs); 289 show_regs(regs);
289 if (!user_mode(regs)) 290 if (!user_mode(regs))
290 do_exit(SIGKILL); 291 do_exit(SIGKILL);
291 force_sig(SIGKILL, current); 292 force_sig(SIGKILL);
292} 293}
293 294
294void unhandled_exceptions(unsigned long entry, unsigned long addr, 295void unhandled_exceptions(unsigned long entry, unsigned long addr,
@@ -299,7 +300,7 @@ void unhandled_exceptions(unsigned long entry, unsigned long addr,
299 show_regs(regs); 300 show_regs(regs);
300 if (!user_mode(regs)) 301 if (!user_mode(regs))
301 do_exit(SIGKILL); 302 do_exit(SIGKILL);
302 force_sig(SIGKILL, current); 303 force_sig(SIGKILL);
303} 304}
304 305
305extern int do_page_fault(unsigned long entry, unsigned long addr, 306extern int do_page_fault(unsigned long entry, unsigned long addr,
@@ -326,7 +327,7 @@ void do_revinsn(struct pt_regs *regs)
326 show_regs(regs); 327 show_regs(regs);
327 if (!user_mode(regs)) 328 if (!user_mode(regs))
328 do_exit(SIGILL); 329 do_exit(SIGILL);
329 force_sig(SIGILL, current); 330 force_sig(SIGILL);
330} 331}
331 332
332#ifdef CONFIG_ALIGNMENT_TRAP 333#ifdef CONFIG_ALIGNMENT_TRAP
diff --git a/arch/nds32/mm/fault.c b/arch/nds32/mm/fault.c
index 68d5f2a27f38..064ae5d2159d 100644
--- a/arch/nds32/mm/fault.c
+++ b/arch/nds32/mm/fault.c
@@ -271,7 +271,7 @@ bad_area_nosemaphore:
271 tsk->thread.address = addr; 271 tsk->thread.address = addr;
272 tsk->thread.error_code = error_code; 272 tsk->thread.error_code = error_code;
273 tsk->thread.trap_no = entry; 273 tsk->thread.trap_no = entry;
274 force_sig_fault(SIGSEGV, si_code, (void __user *)addr, tsk); 274 force_sig_fault(SIGSEGV, si_code, (void __user *)addr);
275 return; 275 return;
276 } 276 }
277 277
@@ -340,7 +340,7 @@ do_sigbus:
340 tsk->thread.address = addr; 340 tsk->thread.address = addr;
341 tsk->thread.error_code = error_code; 341 tsk->thread.error_code = error_code;
342 tsk->thread.trap_no = entry; 342 tsk->thread.trap_no = entry;
343 force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)addr, tsk); 343 force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)addr);
344 344
345 return; 345 return;
346 346
diff --git a/arch/nios2/kernel/signal.c b/arch/nios2/kernel/signal.c
index 4a81876b6086..a42dd09c6578 100644
--- a/arch/nios2/kernel/signal.c
+++ b/arch/nios2/kernel/signal.c
@@ -120,7 +120,7 @@ asmlinkage int do_rt_sigreturn(struct switch_stack *sw)
120 return rval; 120 return rval;
121 121
122badframe: 122badframe:
123 force_sig(SIGSEGV, current); 123 force_sig(SIGSEGV);
124 return 0; 124 return 0;
125} 125}
126 126
@@ -211,7 +211,7 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set,
211 return 0; 211 return 0;
212 212
213give_sigsegv: 213give_sigsegv:
214 force_sigsegv(ksig->sig, current); 214 force_sigsegv(ksig->sig);
215 return -EFAULT; 215 return -EFAULT;
216} 216}
217 217
diff --git a/arch/nios2/kernel/traps.c b/arch/nios2/kernel/traps.c
index 3bc3cd22b750..486db793923c 100644
--- a/arch/nios2/kernel/traps.c
+++ b/arch/nios2/kernel/traps.c
@@ -26,7 +26,7 @@ static DEFINE_SPINLOCK(die_lock);
26 26
27static void _send_sig(int signo, int code, unsigned long addr) 27static void _send_sig(int signo, int code, unsigned long addr)
28{ 28{
29 force_sig_fault(signo, code, (void __user *) addr, current); 29 force_sig_fault(signo, code, (void __user *) addr);
30} 30}
31 31
32void die(const char *str, struct pt_regs *regs, long err) 32void die(const char *str, struct pt_regs *regs, long err)
diff --git a/arch/openrisc/kernel/signal.c b/arch/openrisc/kernel/signal.c
index 801cad03a4c7..4f0754874d78 100644
--- a/arch/openrisc/kernel/signal.c
+++ b/arch/openrisc/kernel/signal.c
@@ -95,7 +95,7 @@ asmlinkage long _sys_rt_sigreturn(struct pt_regs *regs)
95 return regs->gpr[11]; 95 return regs->gpr[11];
96 96
97badframe: 97badframe:
98 force_sig(SIGSEGV, current); 98 force_sig(SIGSEGV);
99 return 0; 99 return 0;
100} 100}
101 101
diff --git a/arch/openrisc/kernel/traps.c b/arch/openrisc/kernel/traps.c
index e859bfb118a6..932a8ec2b520 100644
--- a/arch/openrisc/kernel/traps.c
+++ b/arch/openrisc/kernel/traps.c
@@ -244,7 +244,7 @@ void __init trap_init(void)
244 244
245asmlinkage void do_trap(struct pt_regs *regs, unsigned long address) 245asmlinkage void do_trap(struct pt_regs *regs, unsigned long address)
246{ 246{
247 force_sig_fault(SIGTRAP, TRAP_TRACE, (void __user *)address, current); 247 force_sig_fault(SIGTRAP, TRAP_TRACE, (void __user *)address);
248 248
249 regs->pc += 4; 249 regs->pc += 4;
250} 250}
@@ -253,7 +253,7 @@ asmlinkage void do_unaligned_access(struct pt_regs *regs, unsigned long address)
253{ 253{
254 if (user_mode(regs)) { 254 if (user_mode(regs)) {
255 /* Send a SIGBUS */ 255 /* Send a SIGBUS */
256 force_sig_fault(SIGBUS, BUS_ADRALN, (void __user *)address, current); 256 force_sig_fault(SIGBUS, BUS_ADRALN, (void __user *)address);
257 } else { 257 } else {
258 printk("KERNEL: Unaligned Access 0x%.8lx\n", address); 258 printk("KERNEL: Unaligned Access 0x%.8lx\n", address);
259 show_registers(regs); 259 show_registers(regs);
@@ -266,7 +266,7 @@ asmlinkage void do_bus_fault(struct pt_regs *regs, unsigned long address)
266{ 266{
267 if (user_mode(regs)) { 267 if (user_mode(regs)) {
268 /* Send a SIGBUS */ 268 /* Send a SIGBUS */
269 force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address, current); 269 force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address);
270 } else { /* Kernel mode */ 270 } else { /* Kernel mode */
271 printk("KERNEL: Bus error (SIGBUS) 0x%.8lx\n", address); 271 printk("KERNEL: Bus error (SIGBUS) 0x%.8lx\n", address);
272 show_registers(regs); 272 show_registers(regs);
@@ -371,7 +371,7 @@ static inline void simulate_lwa(struct pt_regs *regs, unsigned long address,
371 371
372 if (get_user(value, lwa_addr)) { 372 if (get_user(value, lwa_addr)) {
373 if (user_mode(regs)) { 373 if (user_mode(regs)) {
374 force_sig(SIGSEGV, current); 374 force_sig(SIGSEGV);
375 return; 375 return;
376 } 376 }
377 377
@@ -418,7 +418,7 @@ static inline void simulate_swa(struct pt_regs *regs, unsigned long address,
418 418
419 if (put_user(regs->gpr[rb], vaddr)) { 419 if (put_user(regs->gpr[rb], vaddr)) {
420 if (user_mode(regs)) { 420 if (user_mode(regs)) {
421 force_sig(SIGSEGV, current); 421 force_sig(SIGSEGV);
422 return; 422 return;
423 } 423 }
424 424
@@ -461,7 +461,7 @@ asmlinkage void do_illegal_instruction(struct pt_regs *regs,
461 461
462 if (user_mode(regs)) { 462 if (user_mode(regs)) {
463 /* Send a SIGILL */ 463 /* Send a SIGILL */
464 force_sig_fault(SIGILL, ILL_ILLOPC, (void __user *)address, current); 464 force_sig_fault(SIGILL, ILL_ILLOPC, (void __user *)address);
465 } else { /* Kernel mode */ 465 } else { /* Kernel mode */
466 printk("KERNEL: Illegal instruction (SIGILL) 0x%.8lx\n", 466 printk("KERNEL: Illegal instruction (SIGILL) 0x%.8lx\n",
467 address); 467 address);
diff --git a/arch/openrisc/mm/fault.c b/arch/openrisc/mm/fault.c
index 9eee5bf3db27..5d4d3a9691d0 100644
--- a/arch/openrisc/mm/fault.c
+++ b/arch/openrisc/mm/fault.c
@@ -209,7 +209,7 @@ bad_area_nosemaphore:
209 /* User mode accesses just cause a SIGSEGV */ 209 /* User mode accesses just cause a SIGSEGV */
210 210
211 if (user_mode(regs)) { 211 if (user_mode(regs)) {
212 force_sig_fault(SIGSEGV, si_code, (void __user *)address, tsk); 212 force_sig_fault(SIGSEGV, si_code, (void __user *)address);
213 return; 213 return;
214 } 214 }
215 215
@@ -274,7 +274,7 @@ do_sigbus:
274 * Send a sigbus, regardless of whether we were in kernel 274 * Send a sigbus, regardless of whether we were in kernel
275 * or user mode. 275 * or user mode.
276 */ 276 */
277 force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address, tsk); 277 force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address);
278 278
279 /* Kernel mode? Handle exceptions or die */ 279 /* Kernel mode? Handle exceptions or die */
280 if (!user_mode(regs)) 280 if (!user_mode(regs))
diff --git a/arch/parisc/kernel/ptrace.c b/arch/parisc/kernel/ptrace.c
index a3d2fb4e6dd2..f642ba378ffa 100644
--- a/arch/parisc/kernel/ptrace.c
+++ b/arch/parisc/kernel/ptrace.c
@@ -88,9 +88,9 @@ void user_enable_single_step(struct task_struct *task)
88 ptrace_disable(task); 88 ptrace_disable(task);
89 /* Don't wake up the task, but let the 89 /* Don't wake up the task, but let the
90 parent know something happened. */ 90 parent know something happened. */
91 force_sig_fault(SIGTRAP, TRAP_TRACE, 91 force_sig_fault_to_task(SIGTRAP, TRAP_TRACE,
92 (void __user *) (task_regs(task)->iaoq[0] & ~3), 92 (void __user *) (task_regs(task)->iaoq[0] & ~3),
93 task); 93 task);
94 /* notify_parent(task, SIGCHLD); */ 94 /* notify_parent(task, SIGCHLD); */
95 return; 95 return;
96 } 96 }
diff --git a/arch/parisc/kernel/signal.c b/arch/parisc/kernel/signal.c
index 848c1934680b..02895a8f2c55 100644
--- a/arch/parisc/kernel/signal.c
+++ b/arch/parisc/kernel/signal.c
@@ -164,7 +164,7 @@ sys_rt_sigreturn(struct pt_regs *regs, int in_syscall)
164 164
165give_sigsegv: 165give_sigsegv:
166 DBG(1,"sys_rt_sigreturn: Sending SIGSEGV\n"); 166 DBG(1,"sys_rt_sigreturn: Sending SIGSEGV\n");
167 force_sig(SIGSEGV, current); 167 force_sig(SIGSEGV);
168 return; 168 return;
169} 169}
170 170
diff --git a/arch/parisc/kernel/traps.c b/arch/parisc/kernel/traps.c
index 096e319adeb3..58dcf445e32f 100644
--- a/arch/parisc/kernel/traps.c
+++ b/arch/parisc/kernel/traps.c
@@ -275,7 +275,7 @@ void die_if_kernel(char *str, struct pt_regs *regs, long err)
275static void handle_gdb_break(struct pt_regs *regs, int wot) 275static void handle_gdb_break(struct pt_regs *regs, int wot)
276{ 276{
277 force_sig_fault(SIGTRAP, wot, 277 force_sig_fault(SIGTRAP, wot,
278 (void __user *) (regs->iaoq[0] & ~3), current); 278 (void __user *) (regs->iaoq[0] & ~3));
279} 279}
280 280
281static void handle_break(struct pt_regs *regs) 281static void handle_break(struct pt_regs *regs)
@@ -609,13 +609,13 @@ void notrace handle_interruption(int code, struct pt_regs *regs)
609 si_code = ILL_PRVREG; 609 si_code = ILL_PRVREG;
610 give_sigill: 610 give_sigill:
611 force_sig_fault(SIGILL, si_code, 611 force_sig_fault(SIGILL, si_code,
612 (void __user *) regs->iaoq[0], current); 612 (void __user *) regs->iaoq[0]);
613 return; 613 return;
614 614
615 case 12: 615 case 12:
616 /* Overflow Trap, let the userland signal handler do the cleanup */ 616 /* Overflow Trap, let the userland signal handler do the cleanup */
617 force_sig_fault(SIGFPE, FPE_INTOVF, 617 force_sig_fault(SIGFPE, FPE_INTOVF,
618 (void __user *) regs->iaoq[0], current); 618 (void __user *) regs->iaoq[0]);
619 return; 619 return;
620 620
621 case 13: 621 case 13:
@@ -627,7 +627,7 @@ void notrace handle_interruption(int code, struct pt_regs *regs)
627 * to by si_addr. 627 * to by si_addr.
628 */ 628 */
629 force_sig_fault(SIGFPE, FPE_CONDTRAP, 629 force_sig_fault(SIGFPE, FPE_CONDTRAP,
630 (void __user *) regs->iaoq[0], current); 630 (void __user *) regs->iaoq[0]);
631 return; 631 return;
632 } 632 }
633 /* The kernel doesn't want to handle condition codes */ 633 /* The kernel doesn't want to handle condition codes */
@@ -739,7 +739,7 @@ void notrace handle_interruption(int code, struct pt_regs *regs)
739 force_sig_fault(SIGSEGV, SEGV_MAPERR, 739 force_sig_fault(SIGSEGV, SEGV_MAPERR,
740 (code == 7)? 740 (code == 7)?
741 ((void __user *) regs->iaoq[0]) : 741 ((void __user *) regs->iaoq[0]) :
742 ((void __user *) regs->ior), current); 742 ((void __user *) regs->ior));
743 return; 743 return;
744 744
745 case 28: 745 case 28:
@@ -754,7 +754,7 @@ void notrace handle_interruption(int code, struct pt_regs *regs)
754 task_pid_nr(current), current->comm); 754 task_pid_nr(current), current->comm);
755 /* SIGBUS, for lack of a better one. */ 755 /* SIGBUS, for lack of a better one. */
756 force_sig_fault(SIGBUS, BUS_OBJERR, 756 force_sig_fault(SIGBUS, BUS_OBJERR,
757 (void __user *)regs->ior, current); 757 (void __user *)regs->ior);
758 return; 758 return;
759 } 759 }
760 pdc_chassis_send_status(PDC_CHASSIS_DIRECT_PANIC); 760 pdc_chassis_send_status(PDC_CHASSIS_DIRECT_PANIC);
@@ -770,7 +770,7 @@ void notrace handle_interruption(int code, struct pt_regs *regs)
770 code, fault_space, 770 code, fault_space,
771 task_pid_nr(current), current->comm); 771 task_pid_nr(current), current->comm);
772 force_sig_fault(SIGSEGV, SEGV_MAPERR, 772 force_sig_fault(SIGSEGV, SEGV_MAPERR,
773 (void __user *)regs->ior, current); 773 (void __user *)regs->ior);
774 return; 774 return;
775 } 775 }
776 } 776 }
diff --git a/arch/parisc/kernel/unaligned.c b/arch/parisc/kernel/unaligned.c
index 30161b7c9ac2..237d20dd5622 100644
--- a/arch/parisc/kernel/unaligned.c
+++ b/arch/parisc/kernel/unaligned.c
@@ -676,14 +676,14 @@ void handle_unaligned(struct pt_regs *regs)
676 if (ret == ERR_PAGEFAULT) 676 if (ret == ERR_PAGEFAULT)
677 { 677 {
678 force_sig_fault(SIGSEGV, SEGV_MAPERR, 678 force_sig_fault(SIGSEGV, SEGV_MAPERR,
679 (void __user *)regs->ior, current); 679 (void __user *)regs->ior);
680 } 680 }
681 else 681 else
682 { 682 {
683force_sigbus: 683force_sigbus:
684 /* couldn't handle it ... */ 684 /* couldn't handle it ... */
685 force_sig_fault(SIGBUS, BUS_ADRALN, 685 force_sig_fault(SIGBUS, BUS_ADRALN,
686 (void __user *)regs->ior, current); 686 (void __user *)regs->ior);
687 } 687 }
688 688
689 return; 689 return;
diff --git a/arch/parisc/math-emu/driver.c b/arch/parisc/math-emu/driver.c
index c83237c0cbc1..6ce427b58836 100644
--- a/arch/parisc/math-emu/driver.c
+++ b/arch/parisc/math-emu/driver.c
@@ -104,7 +104,7 @@ handle_fpe(struct pt_regs *regs)
104 memcpy(regs->fr, frcopy, sizeof regs->fr); 104 memcpy(regs->fr, frcopy, sizeof regs->fr);
105 if (signalcode != 0) { 105 if (signalcode != 0) {
106 force_sig_fault(signalcode >> 24, signalcode & 0xffffff, 106 force_sig_fault(signalcode >> 24, signalcode & 0xffffff,
107 (void __user *) regs->iaoq[0], current); 107 (void __user *) regs->iaoq[0]);
108 return -1; 108 return -1;
109 } 109 }
110 110
diff --git a/arch/parisc/mm/fault.c b/arch/parisc/mm/fault.c
index c8e8b7c05558..6dd4669ce7a5 100644
--- a/arch/parisc/mm/fault.c
+++ b/arch/parisc/mm/fault.c
@@ -403,13 +403,13 @@ bad_area:
403 lsb = PAGE_SHIFT; 403 lsb = PAGE_SHIFT;
404 404
405 force_sig_mceerr(BUS_MCEERR_AR, (void __user *) address, 405 force_sig_mceerr(BUS_MCEERR_AR, (void __user *) address,
406 lsb, current); 406 lsb);
407 return; 407 return;
408 } 408 }
409#endif 409#endif
410 show_signal_msg(regs, code, address, tsk, vma); 410 show_signal_msg(regs, code, address, tsk, vma);
411 411
412 force_sig_fault(signo, si_code, (void __user *) address, current); 412 force_sig_fault(signo, si_code, (void __user *) address);
413 return; 413 return;
414 } 414 }
415 415
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
index f0fbbf6a6a1f..b448b0938299 100644
--- a/arch/powerpc/kernel/process.c
+++ b/arch/powerpc/kernel/process.c
@@ -639,7 +639,7 @@ void do_break (struct pt_regs *regs, unsigned long address,
639 hw_breakpoint_disable(); 639 hw_breakpoint_disable();
640 640
641 /* Deliver the signal to userspace */ 641 /* Deliver the signal to userspace */
642 force_sig_fault(SIGTRAP, TRAP_HWBKPT, (void __user *)address, current); 642 force_sig_fault(SIGTRAP, TRAP_HWBKPT, (void __user *)address);
643} 643}
644#endif /* CONFIG_PPC_ADV_DEBUG_REGS */ 644#endif /* CONFIG_PPC_ADV_DEBUG_REGS */
645 645
diff --git a/arch/powerpc/kernel/signal_32.c b/arch/powerpc/kernel/signal_32.c
index a2b74e057904..f50b708d6d77 100644
--- a/arch/powerpc/kernel/signal_32.c
+++ b/arch/powerpc/kernel/signal_32.c
@@ -1245,7 +1245,7 @@ SYSCALL_DEFINE0(rt_sigreturn)
1245 current->comm, current->pid, 1245 current->comm, current->pid,
1246 rt_sf, regs->nip, regs->link); 1246 rt_sf, regs->nip, regs->link);
1247 1247
1248 force_sig(SIGSEGV, current); 1248 force_sig(SIGSEGV);
1249 return 0; 1249 return 0;
1250} 1250}
1251 1251
@@ -1334,7 +1334,7 @@ SYSCALL_DEFINE3(debug_setcontext, struct ucontext __user *, ctx,
1334 current->comm, current->pid, 1334 current->comm, current->pid,
1335 ctx, regs->nip, regs->link); 1335 ctx, regs->nip, regs->link);
1336 1336
1337 force_sig(SIGSEGV, current); 1337 force_sig(SIGSEGV);
1338 goto out; 1338 goto out;
1339 } 1339 }
1340 1340
@@ -1512,6 +1512,6 @@ badframe:
1512 current->comm, current->pid, 1512 current->comm, current->pid,
1513 addr, regs->nip, regs->link); 1513 addr, regs->nip, regs->link);
1514 1514
1515 force_sig(SIGSEGV, current); 1515 force_sig(SIGSEGV);
1516 return 0; 1516 return 0;
1517} 1517}
diff --git a/arch/powerpc/kernel/signal_64.c b/arch/powerpc/kernel/signal_64.c
index 4292ea39baa4..2f80e270c7b0 100644
--- a/arch/powerpc/kernel/signal_64.c
+++ b/arch/powerpc/kernel/signal_64.c
@@ -808,7 +808,7 @@ badframe:
808 current->comm, current->pid, "rt_sigreturn", 808 current->comm, current->pid, "rt_sigreturn",
809 (long)uc, regs->nip, regs->link); 809 (long)uc, regs->nip, regs->link);
810 810
811 force_sig(SIGSEGV, current); 811 force_sig(SIGSEGV);
812 return 0; 812 return 0;
813} 813}
814 814
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c
index 47df30982de1..11caa0291254 100644
--- a/arch/powerpc/kernel/traps.c
+++ b/arch/powerpc/kernel/traps.c
@@ -297,7 +297,7 @@ NOKPROBE_SYMBOL(die);
297 297
298void user_single_step_report(struct pt_regs *regs) 298void user_single_step_report(struct pt_regs *regs)
299{ 299{
300 force_sig_fault(SIGTRAP, TRAP_TRACE, (void __user *)regs->nip, current); 300 force_sig_fault(SIGTRAP, TRAP_TRACE, (void __user *)regs->nip);
301} 301}
302 302
303static void show_signal_msg(int signr, struct pt_regs *regs, int code, 303static void show_signal_msg(int signr, struct pt_regs *regs, int code,
@@ -363,7 +363,7 @@ void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr)
363 if (!exception_common(signr, regs, code, addr)) 363 if (!exception_common(signr, regs, code, addr))
364 return; 364 return;
365 365
366 force_sig_fault(signr, code, (void __user *)addr, current); 366 force_sig_fault(signr, code, (void __user *)addr);
367} 367}
368 368
369/* 369/*
diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c
index ec6b7ad70659..d989592b6fc8 100644
--- a/arch/powerpc/mm/fault.c
+++ b/arch/powerpc/mm/fault.c
@@ -178,13 +178,12 @@ static int do_sigbus(struct pt_regs *regs, unsigned long address,
178 if (fault & VM_FAULT_HWPOISON) 178 if (fault & VM_FAULT_HWPOISON)
179 lsb = PAGE_SHIFT; 179 lsb = PAGE_SHIFT;
180 180
181 force_sig_mceerr(BUS_MCEERR_AR, (void __user *)address, lsb, 181 force_sig_mceerr(BUS_MCEERR_AR, (void __user *)address, lsb);
182 current);
183 return 0; 182 return 0;
184 } 183 }
185 184
186#endif 185#endif
187 force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address, current); 186 force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address);
188 return 0; 187 return 0;
189} 188}
190 189
diff --git a/arch/powerpc/platforms/cell/spufs/fault.c b/arch/powerpc/platforms/cell/spufs/fault.c
index 6dfd2cb1bce7..24adbe3c605c 100644
--- a/arch/powerpc/platforms/cell/spufs/fault.c
+++ b/arch/powerpc/platforms/cell/spufs/fault.c
@@ -31,22 +31,21 @@ static void spufs_handle_event(struct spu_context *ctx,
31 31
32 switch (type) { 32 switch (type) {
33 case SPE_EVENT_INVALID_DMA: 33 case SPE_EVENT_INVALID_DMA:
34 force_sig_fault(SIGBUS, BUS_OBJERR, NULL, current); 34 force_sig_fault(SIGBUS, BUS_OBJERR, NULL);
35 break; 35 break;
36 case SPE_EVENT_SPE_DATA_STORAGE: 36 case SPE_EVENT_SPE_DATA_STORAGE:
37 ctx->ops->restart_dma(ctx); 37 ctx->ops->restart_dma(ctx);
38 force_sig_fault(SIGSEGV, SEGV_ACCERR, (void __user *)ea, 38 force_sig_fault(SIGSEGV, SEGV_ACCERR, (void __user *)ea);
39 current);
40 break; 39 break;
41 case SPE_EVENT_DMA_ALIGNMENT: 40 case SPE_EVENT_DMA_ALIGNMENT:
42 /* DAR isn't set for an alignment fault :( */ 41 /* DAR isn't set for an alignment fault :( */
43 force_sig_fault(SIGBUS, BUS_ADRALN, NULL, current); 42 force_sig_fault(SIGBUS, BUS_ADRALN, NULL);
44 break; 43 break;
45 case SPE_EVENT_SPE_ERROR: 44 case SPE_EVENT_SPE_ERROR:
46 force_sig_fault( 45 force_sig_fault(
47 SIGILL, ILL_ILLOPC, 46 SIGILL, ILL_ILLOPC,
48 (void __user *)(unsigned long) 47 (void __user *)(unsigned long)
49 ctx->ops->npc_read(ctx) - 4, current); 48 ctx->ops->npc_read(ctx) - 4);
50 break; 49 break;
51 } 50 }
52} 51}
diff --git a/arch/powerpc/platforms/cell/spufs/run.c b/arch/powerpc/platforms/cell/spufs/run.c
index 07f82d7395ff..3f2380f40f99 100644
--- a/arch/powerpc/platforms/cell/spufs/run.c
+++ b/arch/powerpc/platforms/cell/spufs/run.c
@@ -443,7 +443,7 @@ long spufs_run_spu(struct spu_context *ctx, u32 *npc, u32 *event)
443 443
444 else if (unlikely((status & SPU_STATUS_STOPPED_BY_STOP) 444 else if (unlikely((status & SPU_STATUS_STOPPED_BY_STOP)
445 && (status >> SPU_STOP_STATUS_SHIFT) == 0x3fff)) { 445 && (status >> SPU_STOP_STATUS_SHIFT) == 0x3fff)) {
446 force_sig(SIGTRAP, current); 446 force_sig(SIGTRAP);
447 ret = -ERESTARTSYS; 447 ret = -ERESTARTSYS;
448 } 448 }
449 449
diff --git a/arch/riscv/include/asm/bug.h b/arch/riscv/include/asm/bug.h
index f653bfc8a83b..07ceee8b1747 100644
--- a/arch/riscv/include/asm/bug.h
+++ b/arch/riscv/include/asm/bug.h
@@ -86,7 +86,7 @@ struct task_struct;
86 86
87extern void die(struct pt_regs *regs, const char *str); 87extern void die(struct pt_regs *regs, const char *str);
88extern void do_trap(struct pt_regs *regs, int signo, int code, 88extern void do_trap(struct pt_regs *regs, int signo, int code,
89 unsigned long addr, struct task_struct *tsk); 89 unsigned long addr);
90 90
91#endif /* !__ASSEMBLY__ */ 91#endif /* !__ASSEMBLY__ */
92 92
diff --git a/arch/riscv/kernel/signal.c b/arch/riscv/kernel/signal.c
index 1fe1b02e44d0..b14d7647d800 100644
--- a/arch/riscv/kernel/signal.c
+++ b/arch/riscv/kernel/signal.c
@@ -126,7 +126,7 @@ badframe:
126 task->comm, task_pid_nr(task), __func__, 126 task->comm, task_pid_nr(task), __func__,
127 frame, (void *)regs->sepc, (void *)regs->sp); 127 frame, (void *)regs->sepc, (void *)regs->sp);
128 } 128 }
129 force_sig(SIGSEGV, task); 129 force_sig(SIGSEGV);
130 return 0; 130 return 0;
131} 131}
132 132
diff --git a/arch/riscv/kernel/traps.c b/arch/riscv/kernel/traps.c
index 6b32190ba73c..424eb72d56b1 100644
--- a/arch/riscv/kernel/traps.c
+++ b/arch/riscv/kernel/traps.c
@@ -55,9 +55,10 @@ void die(struct pt_regs *regs, const char *str)
55 do_exit(SIGSEGV); 55 do_exit(SIGSEGV);
56} 56}
57 57
58void do_trap(struct pt_regs *regs, int signo, int code, 58void do_trap(struct pt_regs *regs, int signo, int code, unsigned long addr)
59 unsigned long addr, struct task_struct *tsk)
60{ 59{
60 struct task_struct *tsk = current;
61
61 if (show_unhandled_signals && unhandled_signal(tsk, signo) 62 if (show_unhandled_signals && unhandled_signal(tsk, signo)
62 && printk_ratelimit()) { 63 && printk_ratelimit()) {
63 pr_info("%s[%d]: unhandled signal %d code 0x%x at 0x" REG_FMT, 64 pr_info("%s[%d]: unhandled signal %d code 0x%x at 0x" REG_FMT,
@@ -67,14 +68,14 @@ void do_trap(struct pt_regs *regs, int signo, int code,
67 show_regs(regs); 68 show_regs(regs);
68 } 69 }
69 70
70 force_sig_fault(signo, code, (void __user *)addr, tsk); 71 force_sig_fault(signo, code, (void __user *)addr);
71} 72}
72 73
73static void do_trap_error(struct pt_regs *regs, int signo, int code, 74static void do_trap_error(struct pt_regs *regs, int signo, int code,
74 unsigned long addr, const char *str) 75 unsigned long addr, const char *str)
75{ 76{
76 if (user_mode(regs)) { 77 if (user_mode(regs)) {
77 do_trap(regs, signo, code, addr, current); 78 do_trap(regs, signo, code, addr);
78 } else { 79 } else {
79 if (!fixup_exception(regs)) 80 if (!fixup_exception(regs))
80 die(regs, str); 81 die(regs, str);
@@ -140,7 +141,7 @@ asmlinkage void do_trap_break(struct pt_regs *regs)
140 } 141 }
141#endif /* CONFIG_GENERIC_BUG */ 142#endif /* CONFIG_GENERIC_BUG */
142 143
143 force_sig_fault(SIGTRAP, TRAP_BRKPT, (void __user *)(regs->sepc), current); 144 force_sig_fault(SIGTRAP, TRAP_BRKPT, (void __user *)(regs->sepc));
144} 145}
145 146
146#ifdef CONFIG_GENERIC_BUG 147#ifdef CONFIG_GENERIC_BUG
diff --git a/arch/riscv/mm/fault.c b/arch/riscv/mm/fault.c
index f960c3f4ce47..96add1427a75 100644
--- a/arch/riscv/mm/fault.c
+++ b/arch/riscv/mm/fault.c
@@ -169,7 +169,7 @@ bad_area:
169 up_read(&mm->mmap_sem); 169 up_read(&mm->mmap_sem);
170 /* User mode accesses just cause a SIGSEGV */ 170 /* User mode accesses just cause a SIGSEGV */
171 if (user_mode(regs)) { 171 if (user_mode(regs)) {
172 do_trap(regs, SIGSEGV, code, addr, tsk); 172 do_trap(regs, SIGSEGV, code, addr);
173 return; 173 return;
174 } 174 }
175 175
@@ -205,7 +205,7 @@ do_sigbus:
205 /* Kernel mode? Handle exceptions or die */ 205 /* Kernel mode? Handle exceptions or die */
206 if (!user_mode(regs)) 206 if (!user_mode(regs))
207 goto no_context; 207 goto no_context;
208 do_trap(regs, SIGBUS, BUS_ADRERR, addr, tsk); 208 do_trap(regs, SIGBUS, BUS_ADRERR, addr);
209 return; 209 return;
210 210
211vmalloc_fault: 211vmalloc_fault:
@@ -219,7 +219,7 @@ vmalloc_fault:
219 219
220 /* User mode accesses just cause a SIGSEGV */ 220 /* User mode accesses just cause a SIGSEGV */
221 if (user_mode(regs)) 221 if (user_mode(regs))
222 return do_trap(regs, SIGSEGV, code, addr, tsk); 222 return do_trap(regs, SIGSEGV, code, addr);
223 223
224 /* 224 /*
225 * Synchronize this task's top level page-table 225 * Synchronize this task's top level page-table
diff --git a/arch/s390/kernel/compat_signal.c b/arch/s390/kernel/compat_signal.c
index 6f2a193ccccc..38d4bdbc34b9 100644
--- a/arch/s390/kernel/compat_signal.c
+++ b/arch/s390/kernel/compat_signal.c
@@ -194,7 +194,7 @@ COMPAT_SYSCALL_DEFINE0(sigreturn)
194 load_sigregs(); 194 load_sigregs();
195 return regs->gprs[2]; 195 return regs->gprs[2];
196badframe: 196badframe:
197 force_sig(SIGSEGV, current); 197 force_sig(SIGSEGV);
198 return 0; 198 return 0;
199} 199}
200 200
@@ -217,7 +217,7 @@ COMPAT_SYSCALL_DEFINE0(rt_sigreturn)
217 load_sigregs(); 217 load_sigregs();
218 return regs->gprs[2]; 218 return regs->gprs[2];
219badframe: 219badframe:
220 force_sig(SIGSEGV, current); 220 force_sig(SIGSEGV);
221 return 0; 221 return 0;
222} 222}
223 223
diff --git a/arch/s390/kernel/signal.c b/arch/s390/kernel/signal.c
index 22f08245aa5d..e6fca5498e1f 100644
--- a/arch/s390/kernel/signal.c
+++ b/arch/s390/kernel/signal.c
@@ -232,7 +232,7 @@ SYSCALL_DEFINE0(sigreturn)
232 load_sigregs(); 232 load_sigregs();
233 return regs->gprs[2]; 233 return regs->gprs[2];
234badframe: 234badframe:
235 force_sig(SIGSEGV, current); 235 force_sig(SIGSEGV);
236 return 0; 236 return 0;
237} 237}
238 238
@@ -256,7 +256,7 @@ SYSCALL_DEFINE0(rt_sigreturn)
256 load_sigregs(); 256 load_sigregs();
257 return regs->gprs[2]; 257 return regs->gprs[2];
258badframe: 258badframe:
259 force_sig(SIGSEGV, current); 259 force_sig(SIGSEGV);
260 return 0; 260 return 0;
261} 261}
262 262
diff --git a/arch/s390/kernel/traps.c b/arch/s390/kernel/traps.c
index 4736b6ec0ad2..164c0282b41a 100644
--- a/arch/s390/kernel/traps.c
+++ b/arch/s390/kernel/traps.c
@@ -45,7 +45,7 @@ int is_valid_bugaddr(unsigned long addr)
45void do_report_trap(struct pt_regs *regs, int si_signo, int si_code, char *str) 45void do_report_trap(struct pt_regs *regs, int si_signo, int si_code, char *str)
46{ 46{
47 if (user_mode(regs)) { 47 if (user_mode(regs)) {
48 force_sig_fault(si_signo, si_code, get_trap_ip(regs), current); 48 force_sig_fault(si_signo, si_code, get_trap_ip(regs));
49 report_user_fault(regs, si_signo, 0); 49 report_user_fault(regs, si_signo, 0);
50 } else { 50 } else {
51 const struct exception_table_entry *fixup; 51 const struct exception_table_entry *fixup;
@@ -79,7 +79,7 @@ void do_per_trap(struct pt_regs *regs)
79 if (!current->ptrace) 79 if (!current->ptrace)
80 return; 80 return;
81 force_sig_fault(SIGTRAP, TRAP_HWBKPT, 81 force_sig_fault(SIGTRAP, TRAP_HWBKPT,
82 (void __force __user *) current->thread.per_event.address, current); 82 (void __force __user *) current->thread.per_event.address);
83} 83}
84NOKPROBE_SYMBOL(do_per_trap); 84NOKPROBE_SYMBOL(do_per_trap);
85 85
@@ -165,7 +165,7 @@ void illegal_op(struct pt_regs *regs)
165 return; 165 return;
166 if (*((__u16 *) opcode) == S390_BREAKPOINT_U16) { 166 if (*((__u16 *) opcode) == S390_BREAKPOINT_U16) {
167 if (current->ptrace) 167 if (current->ptrace)
168 force_sig_fault(SIGTRAP, TRAP_BRKPT, location, current); 168 force_sig_fault(SIGTRAP, TRAP_BRKPT, location);
169 else 169 else
170 signal = SIGILL; 170 signal = SIGILL;
171#ifdef CONFIG_UPROBES 171#ifdef CONFIG_UPROBES
diff --git a/arch/s390/mm/fault.c b/arch/s390/mm/fault.c
index df75d574246d..0ba174f779da 100644
--- a/arch/s390/mm/fault.c
+++ b/arch/s390/mm/fault.c
@@ -248,8 +248,7 @@ static noinline void do_sigsegv(struct pt_regs *regs, int si_code)
248{ 248{
249 report_user_fault(regs, SIGSEGV, 1); 249 report_user_fault(regs, SIGSEGV, 1);
250 force_sig_fault(SIGSEGV, si_code, 250 force_sig_fault(SIGSEGV, si_code,
251 (void __user *)(regs->int_parm_long & __FAIL_ADDR_MASK), 251 (void __user *)(regs->int_parm_long & __FAIL_ADDR_MASK));
252 current);
253} 252}
254 253
255const struct exception_table_entry *s390_search_extables(unsigned long addr) 254const struct exception_table_entry *s390_search_extables(unsigned long addr)
@@ -310,8 +309,7 @@ static noinline void do_sigbus(struct pt_regs *regs)
310 * or user mode. 309 * or user mode.
311 */ 310 */
312 force_sig_fault(SIGBUS, BUS_ADRERR, 311 force_sig_fault(SIGBUS, BUS_ADRERR,
313 (void __user *)(regs->int_parm_long & __FAIL_ADDR_MASK), 312 (void __user *)(regs->int_parm_long & __FAIL_ADDR_MASK));
314 current);
315} 313}
316 314
317static noinline int signal_return(struct pt_regs *regs) 315static noinline int signal_return(struct pt_regs *regs)
diff --git a/arch/sh/kernel/cpu/sh2a/fpu.c b/arch/sh/kernel/cpu/sh2a/fpu.c
index 74b48db86dd7..0bcff11a4843 100644
--- a/arch/sh/kernel/cpu/sh2a/fpu.c
+++ b/arch/sh/kernel/cpu/sh2a/fpu.c
@@ -568,5 +568,5 @@ BUILD_TRAP_HANDLER(fpu_error)
568 return; 568 return;
569 } 569 }
570 570
571 force_sig(SIGFPE, tsk); 571 force_sig(SIGFPE);
572} 572}
diff --git a/arch/sh/kernel/cpu/sh4/fpu.c b/arch/sh/kernel/cpu/sh4/fpu.c
index 1ff56e5ba990..03ffd8cdf542 100644
--- a/arch/sh/kernel/cpu/sh4/fpu.c
+++ b/arch/sh/kernel/cpu/sh4/fpu.c
@@ -421,5 +421,5 @@ BUILD_TRAP_HANDLER(fpu_error)
421 } 421 }
422 } 422 }
423 423
424 force_sig(SIGFPE, tsk); 424 force_sig(SIGFPE);
425} 425}
diff --git a/arch/sh/kernel/cpu/sh5/fpu.c b/arch/sh/kernel/cpu/sh5/fpu.c
index 9218d9ed787e..3966b5ee8e93 100644
--- a/arch/sh/kernel/cpu/sh5/fpu.c
+++ b/arch/sh/kernel/cpu/sh5/fpu.c
@@ -100,9 +100,7 @@ void restore_fpu(struct task_struct *tsk)
100 100
101asmlinkage void do_fpu_error(unsigned long ex, struct pt_regs *regs) 101asmlinkage void do_fpu_error(unsigned long ex, struct pt_regs *regs)
102{ 102{
103 struct task_struct *tsk = current;
104
105 regs->pc += 4; 103 regs->pc += 4;
106 104
107 force_sig(SIGFPE, tsk); 105 force_sig(SIGFPE);
108} 106}
diff --git a/arch/sh/kernel/hw_breakpoint.c b/arch/sh/kernel/hw_breakpoint.c
index bc96b16288c1..3bd010b4c55f 100644
--- a/arch/sh/kernel/hw_breakpoint.c
+++ b/arch/sh/kernel/hw_breakpoint.c
@@ -338,7 +338,7 @@ static int __kprobes hw_breakpoint_handler(struct die_args *args)
338 /* Deliver the signal to userspace */ 338 /* Deliver the signal to userspace */
339 if (!arch_check_bp_in_kernelspace(&bp->hw.info)) { 339 if (!arch_check_bp_in_kernelspace(&bp->hw.info)) {
340 force_sig_fault(SIGTRAP, TRAP_HWBKPT, 340 force_sig_fault(SIGTRAP, TRAP_HWBKPT,
341 (void __user *)NULL, current); 341 (void __user *)NULL);
342 } 342 }
343 343
344 rcu_read_unlock(); 344 rcu_read_unlock();
diff --git a/arch/sh/kernel/ptrace_64.c b/arch/sh/kernel/ptrace_64.c
index 3390349ff976..11085e48eaa6 100644
--- a/arch/sh/kernel/ptrace_64.c
+++ b/arch/sh/kernel/ptrace_64.c
@@ -550,7 +550,7 @@ asmlinkage void do_single_step(unsigned long long vec, struct pt_regs *regs)
550 continually stepping. */ 550 continually stepping. */
551 local_irq_enable(); 551 local_irq_enable();
552 regs->sr &= ~SR_SSTEP; 552 regs->sr &= ~SR_SSTEP;
553 force_sig(SIGTRAP, current); 553 force_sig(SIGTRAP);
554} 554}
555 555
556/* Called with interrupts disabled */ 556/* Called with interrupts disabled */
@@ -561,7 +561,7 @@ BUILD_TRAP_HANDLER(breakpoint)
561 /* We need to forward step the PC, to counteract the backstep done 561 /* We need to forward step the PC, to counteract the backstep done
562 in signal.c. */ 562 in signal.c. */
563 local_irq_enable(); 563 local_irq_enable();
564 force_sig(SIGTRAP, current); 564 force_sig(SIGTRAP);
565 regs->pc += 4; 565 regs->pc += 4;
566} 566}
567 567
diff --git a/arch/sh/kernel/signal_32.c b/arch/sh/kernel/signal_32.c
index 2a2121ba8ebe..24473fa6c3b6 100644
--- a/arch/sh/kernel/signal_32.c
+++ b/arch/sh/kernel/signal_32.c
@@ -176,7 +176,7 @@ asmlinkage int sys_sigreturn(void)
176 return r0; 176 return r0;
177 177
178badframe: 178badframe:
179 force_sig(SIGSEGV, current); 179 force_sig(SIGSEGV);
180 return 0; 180 return 0;
181} 181}
182 182
@@ -207,7 +207,7 @@ asmlinkage int sys_rt_sigreturn(void)
207 return r0; 207 return r0;
208 208
209badframe: 209badframe:
210 force_sig(SIGSEGV, current); 210 force_sig(SIGSEGV);
211 return 0; 211 return 0;
212} 212}
213 213
diff --git a/arch/sh/kernel/signal_64.c b/arch/sh/kernel/signal_64.c
index f1f1598879c2..b9aaa9266b34 100644
--- a/arch/sh/kernel/signal_64.c
+++ b/arch/sh/kernel/signal_64.c
@@ -277,7 +277,7 @@ asmlinkage int sys_sigreturn(unsigned long r2, unsigned long r3,
277 return (int) ret; 277 return (int) ret;
278 278
279badframe: 279badframe:
280 force_sig(SIGSEGV, current); 280 force_sig(SIGSEGV);
281 return 0; 281 return 0;
282} 282}
283 283
@@ -311,7 +311,7 @@ asmlinkage int sys_rt_sigreturn(unsigned long r2, unsigned long r3,
311 return (int) ret; 311 return (int) ret;
312 312
313badframe: 313badframe:
314 force_sig(SIGSEGV, current); 314 force_sig(SIGSEGV);
315 return 0; 315 return 0;
316} 316}
317 317
diff --git a/arch/sh/kernel/traps.c b/arch/sh/kernel/traps.c
index 8b49cced663d..63cf17bc760d 100644
--- a/arch/sh/kernel/traps.c
+++ b/arch/sh/kernel/traps.c
@@ -141,7 +141,7 @@ BUILD_TRAP_HANDLER(debug)
141 SIGTRAP) == NOTIFY_STOP) 141 SIGTRAP) == NOTIFY_STOP)
142 return; 142 return;
143 143
144 force_sig(SIGTRAP, current); 144 force_sig(SIGTRAP);
145} 145}
146 146
147/* 147/*
@@ -167,7 +167,7 @@ BUILD_TRAP_HANDLER(bug)
167 } 167 }
168#endif 168#endif
169 169
170 force_sig(SIGTRAP, current); 170 force_sig(SIGTRAP);
171} 171}
172 172
173BUILD_TRAP_HANDLER(nmi) 173BUILD_TRAP_HANDLER(nmi)
diff --git a/arch/sh/kernel/traps_32.c b/arch/sh/kernel/traps_32.c
index f2a18b5fafd8..058c6181bb30 100644
--- a/arch/sh/kernel/traps_32.c
+++ b/arch/sh/kernel/traps_32.c
@@ -533,7 +533,7 @@ uspace_segv:
533 "access (PC %lx PR %lx)\n", current->comm, regs->pc, 533 "access (PC %lx PR %lx)\n", current->comm, regs->pc,
534 regs->pr); 534 regs->pr);
535 535
536 force_sig_fault(SIGBUS, si_code, (void __user *)address, current); 536 force_sig_fault(SIGBUS, si_code, (void __user *)address);
537 } else { 537 } else {
538 inc_unaligned_kernel_access(); 538 inc_unaligned_kernel_access();
539 539
@@ -603,7 +603,7 @@ asmlinkage void do_divide_error(unsigned long r4)
603 /* Let gcc know unhandled cases don't make it past here */ 603 /* Let gcc know unhandled cases don't make it past here */
604 return; 604 return;
605 } 605 }
606 force_sig_fault(SIGFPE, code, NULL, current); 606 force_sig_fault(SIGFPE, code, NULL);
607} 607}
608#endif 608#endif
609 609
@@ -611,7 +611,6 @@ asmlinkage void do_reserved_inst(void)
611{ 611{
612 struct pt_regs *regs = current_pt_regs(); 612 struct pt_regs *regs = current_pt_regs();
613 unsigned long error_code; 613 unsigned long error_code;
614 struct task_struct *tsk = current;
615 614
616#ifdef CONFIG_SH_FPU_EMU 615#ifdef CONFIG_SH_FPU_EMU
617 unsigned short inst = 0; 616 unsigned short inst = 0;
@@ -633,7 +632,7 @@ asmlinkage void do_reserved_inst(void)
633 /* Enable DSP mode, and restart instruction. */ 632 /* Enable DSP mode, and restart instruction. */
634 regs->sr |= SR_DSP; 633 regs->sr |= SR_DSP;
635 /* Save DSP mode */ 634 /* Save DSP mode */
636 tsk->thread.dsp_status.status |= SR_DSP; 635 current->thread.dsp_status.status |= SR_DSP;
637 return; 636 return;
638 } 637 }
639#endif 638#endif
@@ -641,7 +640,7 @@ asmlinkage void do_reserved_inst(void)
641 error_code = lookup_exception_vector(); 640 error_code = lookup_exception_vector();
642 641
643 local_irq_enable(); 642 local_irq_enable();
644 force_sig(SIGILL, tsk); 643 force_sig(SIGILL);
645 die_if_no_fixup("reserved instruction", regs, error_code); 644 die_if_no_fixup("reserved instruction", regs, error_code);
646} 645}
647 646
@@ -697,7 +696,6 @@ asmlinkage void do_illegal_slot_inst(void)
697{ 696{
698 struct pt_regs *regs = current_pt_regs(); 697 struct pt_regs *regs = current_pt_regs();
699 unsigned long inst; 698 unsigned long inst;
700 struct task_struct *tsk = current;
701 699
702 if (kprobe_handle_illslot(regs->pc) == 0) 700 if (kprobe_handle_illslot(regs->pc) == 0)
703 return; 701 return;
@@ -716,7 +714,7 @@ asmlinkage void do_illegal_slot_inst(void)
716 inst = lookup_exception_vector(); 714 inst = lookup_exception_vector();
717 715
718 local_irq_enable(); 716 local_irq_enable();
719 force_sig(SIGILL, tsk); 717 force_sig(SIGILL);
720 die_if_no_fixup("illegal slot instruction", regs, inst); 718 die_if_no_fixup("illegal slot instruction", regs, inst);
721} 719}
722 720
diff --git a/arch/sh/kernel/traps_64.c b/arch/sh/kernel/traps_64.c
index 8ce90a7da67d..37046f3a26d3 100644
--- a/arch/sh/kernel/traps_64.c
+++ b/arch/sh/kernel/traps_64.c
@@ -599,7 +599,7 @@ static void do_unhandled_exception(int signr, char *str, unsigned long error,
599 struct pt_regs *regs) 599 struct pt_regs *regs)
600{ 600{
601 if (user_mode(regs)) 601 if (user_mode(regs))
602 force_sig(signr, current); 602 force_sig(signr);
603 603
604 die_if_no_fixup(str, regs, error); 604 die_if_no_fixup(str, regs, error);
605} 605}
diff --git a/arch/sh/math-emu/math.c b/arch/sh/math-emu/math.c
index a0fa8fc88739..e8be0eca0444 100644
--- a/arch/sh/math-emu/math.c
+++ b/arch/sh/math-emu/math.c
@@ -560,7 +560,7 @@ static int ieee_fpe_handler(struct pt_regs *regs)
560 task_thread_info(tsk)->status |= TS_USEDFPU; 560 task_thread_info(tsk)->status |= TS_USEDFPU;
561 } else { 561 } else {
562 force_sig_fault(SIGFPE, FPE_FLTINV, 562 force_sig_fault(SIGFPE, FPE_FLTINV,
563 (void __user *)regs->pc, tsk); 563 (void __user *)regs->pc);
564 } 564 }
565 565
566 regs->pc = nextpc; 566 regs->pc = nextpc;
diff --git a/arch/sh/mm/fault.c b/arch/sh/mm/fault.c
index 6defd2c6d9b1..3093bc372138 100644
--- a/arch/sh/mm/fault.c
+++ b/arch/sh/mm/fault.c
@@ -39,10 +39,9 @@ static inline int notify_page_fault(struct pt_regs *regs, int trap)
39} 39}
40 40
41static void 41static void
42force_sig_info_fault(int si_signo, int si_code, unsigned long address, 42force_sig_info_fault(int si_signo, int si_code, unsigned long address)
43 struct task_struct *tsk)
44{ 43{
45 force_sig_fault(si_signo, si_code, (void __user *)address, tsk); 44 force_sig_fault(si_signo, si_code, (void __user *)address);
46} 45}
47 46
48/* 47/*
@@ -244,8 +243,6 @@ static void
244__bad_area_nosemaphore(struct pt_regs *regs, unsigned long error_code, 243__bad_area_nosemaphore(struct pt_regs *regs, unsigned long error_code,
245 unsigned long address, int si_code) 244 unsigned long address, int si_code)
246{ 245{
247 struct task_struct *tsk = current;
248
249 /* User mode accesses just cause a SIGSEGV */ 246 /* User mode accesses just cause a SIGSEGV */
250 if (user_mode(regs)) { 247 if (user_mode(regs)) {
251 /* 248 /*
@@ -253,7 +250,7 @@ __bad_area_nosemaphore(struct pt_regs *regs, unsigned long error_code,
253 */ 250 */
254 local_irq_enable(); 251 local_irq_enable();
255 252
256 force_sig_info_fault(SIGSEGV, si_code, address, tsk); 253 force_sig_info_fault(SIGSEGV, si_code, address);
257 254
258 return; 255 return;
259 } 256 }
@@ -308,7 +305,7 @@ do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address)
308 if (!user_mode(regs)) 305 if (!user_mode(regs))
309 no_context(regs, error_code, address); 306 no_context(regs, error_code, address);
310 307
311 force_sig_info_fault(SIGBUS, BUS_ADRERR, address, tsk); 308 force_sig_info_fault(SIGBUS, BUS_ADRERR, address);
312} 309}
313 310
314static noinline int 311static noinline int
diff --git a/arch/sparc/kernel/process_64.c b/arch/sparc/kernel/process_64.c
index 59eaf6227af1..4282116e28e7 100644
--- a/arch/sparc/kernel/process_64.c
+++ b/arch/sparc/kernel/process_64.c
@@ -519,7 +519,7 @@ void synchronize_user_stack(void)
519 519
520static void stack_unaligned(unsigned long sp) 520static void stack_unaligned(unsigned long sp)
521{ 521{
522 force_sig_fault(SIGBUS, BUS_ADRALN, (void __user *) sp, 0, current); 522 force_sig_fault(SIGBUS, BUS_ADRALN, (void __user *) sp, 0);
523} 523}
524 524
525static const char uwfault32[] = KERN_INFO \ 525static const char uwfault32[] = KERN_INFO \
@@ -570,7 +570,7 @@ void fault_in_user_windows(struct pt_regs *regs)
570 570
571barf: 571barf:
572 set_thread_wsaved(window + 1); 572 set_thread_wsaved(window + 1);
573 force_sig(SIGSEGV, current); 573 force_sig(SIGSEGV);
574} 574}
575 575
576asmlinkage long sparc_do_fork(unsigned long clone_flags, 576asmlinkage long sparc_do_fork(unsigned long clone_flags,
diff --git a/arch/sparc/kernel/signal32.c b/arch/sparc/kernel/signal32.c
index e800ce13cc6e..a237810aa9f4 100644
--- a/arch/sparc/kernel/signal32.c
+++ b/arch/sparc/kernel/signal32.c
@@ -170,7 +170,7 @@ void do_sigreturn32(struct pt_regs *regs)
170 return; 170 return;
171 171
172segv: 172segv:
173 force_sig(SIGSEGV, current); 173 force_sig(SIGSEGV);
174} 174}
175 175
176asmlinkage void do_rt_sigreturn32(struct pt_regs *regs) 176asmlinkage void do_rt_sigreturn32(struct pt_regs *regs)
@@ -256,7 +256,7 @@ asmlinkage void do_rt_sigreturn32(struct pt_regs *regs)
256 set_current_blocked(&set); 256 set_current_blocked(&set);
257 return; 257 return;
258segv: 258segv:
259 force_sig(SIGSEGV, current); 259 force_sig(SIGSEGV);
260} 260}
261 261
262static void __user *get_sigframe(struct ksignal *ksig, struct pt_regs *regs, unsigned long framesize) 262static void __user *get_sigframe(struct ksignal *ksig, struct pt_regs *regs, unsigned long framesize)
@@ -375,7 +375,7 @@ static int setup_frame32(struct ksignal *ksig, struct pt_regs *regs,
375 pr_info("%s[%d] bad frame in setup_frame32: %08lx TPC %08lx O7 %08lx\n", 375 pr_info("%s[%d] bad frame in setup_frame32: %08lx TPC %08lx O7 %08lx\n",
376 current->comm, current->pid, (unsigned long)sf, 376 current->comm, current->pid, (unsigned long)sf,
377 regs->tpc, regs->u_regs[UREG_I7]); 377 regs->tpc, regs->u_regs[UREG_I7]);
378 force_sigsegv(ksig->sig, current); 378 force_sigsegv(ksig->sig);
379 return -EINVAL; 379 return -EINVAL;
380 } 380 }
381 381
@@ -509,7 +509,7 @@ static int setup_rt_frame32(struct ksignal *ksig, struct pt_regs *regs,
509 pr_info("%s[%d] bad frame in setup_rt_frame32: %08lx TPC %08lx O7 %08lx\n", 509 pr_info("%s[%d] bad frame in setup_rt_frame32: %08lx TPC %08lx O7 %08lx\n",
510 current->comm, current->pid, (unsigned long)sf, 510 current->comm, current->pid, (unsigned long)sf,
511 regs->tpc, regs->u_regs[UREG_I7]); 511 regs->tpc, regs->u_regs[UREG_I7]);
512 force_sigsegv(ksig->sig, current); 512 force_sigsegv(ksig->sig);
513 return -EINVAL; 513 return -EINVAL;
514 } 514 }
515 515
diff --git a/arch/sparc/kernel/signal_32.c b/arch/sparc/kernel/signal_32.c
index 83953780ca01..42c3de313fd6 100644
--- a/arch/sparc/kernel/signal_32.c
+++ b/arch/sparc/kernel/signal_32.c
@@ -137,7 +137,7 @@ asmlinkage void do_sigreturn(struct pt_regs *regs)
137 return; 137 return;
138 138
139segv_and_exit: 139segv_and_exit:
140 force_sig(SIGSEGV, current); 140 force_sig(SIGSEGV);
141} 141}
142 142
143asmlinkage void do_rt_sigreturn(struct pt_regs *regs) 143asmlinkage void do_rt_sigreturn(struct pt_regs *regs)
@@ -196,7 +196,7 @@ asmlinkage void do_rt_sigreturn(struct pt_regs *regs)
196 set_current_blocked(&set); 196 set_current_blocked(&set);
197 return; 197 return;
198segv: 198segv:
199 force_sig(SIGSEGV, current); 199 force_sig(SIGSEGV);
200} 200}
201 201
202static inline void __user *get_sigframe(struct ksignal *ksig, struct pt_regs *regs, unsigned long framesize) 202static inline void __user *get_sigframe(struct ksignal *ksig, struct pt_regs *regs, unsigned long framesize)
diff --git a/arch/sparc/kernel/signal_64.c b/arch/sparc/kernel/signal_64.c
index ca70787efd8e..69ae814b7e90 100644
--- a/arch/sparc/kernel/signal_64.c
+++ b/arch/sparc/kernel/signal_64.c
@@ -134,7 +134,7 @@ out:
134 exception_exit(prev_state); 134 exception_exit(prev_state);
135 return; 135 return;
136do_sigsegv: 136do_sigsegv:
137 force_sig(SIGSEGV, current); 137 force_sig(SIGSEGV);
138 goto out; 138 goto out;
139} 139}
140 140
@@ -228,7 +228,7 @@ out:
228 exception_exit(prev_state); 228 exception_exit(prev_state);
229 return; 229 return;
230do_sigsegv: 230do_sigsegv:
231 force_sig(SIGSEGV, current); 231 force_sig(SIGSEGV);
232 goto out; 232 goto out;
233} 233}
234 234
@@ -320,7 +320,7 @@ void do_rt_sigreturn(struct pt_regs *regs)
320 set_current_blocked(&set); 320 set_current_blocked(&set);
321 return; 321 return;
322segv: 322segv:
323 force_sig(SIGSEGV, current); 323 force_sig(SIGSEGV);
324} 324}
325 325
326static inline void __user *get_sigframe(struct ksignal *ksig, struct pt_regs *regs, unsigned long framesize) 326static inline void __user *get_sigframe(struct ksignal *ksig, struct pt_regs *regs, unsigned long framesize)
@@ -374,7 +374,7 @@ setup_rt_frame(struct ksignal *ksig, struct pt_regs *regs)
374 pr_info("%s[%d] bad frame in setup_rt_frame: %016lx TPC %016lx O7 %016lx\n", 374 pr_info("%s[%d] bad frame in setup_rt_frame: %016lx TPC %016lx O7 %016lx\n",
375 current->comm, current->pid, (unsigned long)sf, 375 current->comm, current->pid, (unsigned long)sf,
376 regs->tpc, regs->u_regs[UREG_I7]); 376 regs->tpc, regs->u_regs[UREG_I7]);
377 force_sigsegv(ksig->sig, current); 377 force_sigsegv(ksig->sig);
378 return -EINVAL; 378 return -EINVAL;
379 } 379 }
380 380
diff --git a/arch/sparc/kernel/sys_sparc_32.c b/arch/sparc/kernel/sys_sparc_32.c
index 452e4d080855..be77538bc038 100644
--- a/arch/sparc/kernel/sys_sparc_32.c
+++ b/arch/sparc/kernel/sys_sparc_32.c
@@ -151,7 +151,7 @@ sparc_breakpoint (struct pt_regs *regs)
151#ifdef DEBUG_SPARC_BREAKPOINT 151#ifdef DEBUG_SPARC_BREAKPOINT
152 printk ("TRAP: Entering kernel PC=%x, nPC=%x\n", regs->pc, regs->npc); 152 printk ("TRAP: Entering kernel PC=%x, nPC=%x\n", regs->pc, regs->npc);
153#endif 153#endif
154 force_sig_fault(SIGTRAP, TRAP_BRKPT, (void __user *)regs->pc, 0, current); 154 force_sig_fault(SIGTRAP, TRAP_BRKPT, (void __user *)regs->pc, 0);
155 155
156#ifdef DEBUG_SPARC_BREAKPOINT 156#ifdef DEBUG_SPARC_BREAKPOINT
157 printk ("TRAP: Returning to space: PC=%x nPC=%x\n", regs->pc, regs->npc); 157 printk ("TRAP: Returning to space: PC=%x nPC=%x\n", regs->pc, regs->npc);
diff --git a/arch/sparc/kernel/sys_sparc_64.c b/arch/sparc/kernel/sys_sparc_64.c
index 9825ca6a6020..ccc88926bc00 100644
--- a/arch/sparc/kernel/sys_sparc_64.c
+++ b/arch/sparc/kernel/sys_sparc_64.c
@@ -511,7 +511,7 @@ asmlinkage void sparc_breakpoint(struct pt_regs *regs)
511#ifdef DEBUG_SPARC_BREAKPOINT 511#ifdef DEBUG_SPARC_BREAKPOINT
512 printk ("TRAP: Entering kernel PC=%lx, nPC=%lx\n", regs->tpc, regs->tnpc); 512 printk ("TRAP: Entering kernel PC=%lx, nPC=%lx\n", regs->tpc, regs->tnpc);
513#endif 513#endif
514 force_sig_fault(SIGTRAP, TRAP_BRKPT, (void __user *)regs->tpc, 0, current); 514 force_sig_fault(SIGTRAP, TRAP_BRKPT, (void __user *)regs->tpc, 0);
515#ifdef DEBUG_SPARC_BREAKPOINT 515#ifdef DEBUG_SPARC_BREAKPOINT
516 printk ("TRAP: Returning to space: PC=%lx nPC=%lx\n", regs->tpc, regs->tnpc); 516 printk ("TRAP: Returning to space: PC=%lx nPC=%lx\n", regs->tpc, regs->tnpc);
517#endif 517#endif
diff --git a/arch/sparc/kernel/traps_32.c b/arch/sparc/kernel/traps_32.c
index bcdfc6168dd5..4ceecad556a9 100644
--- a/arch/sparc/kernel/traps_32.c
+++ b/arch/sparc/kernel/traps_32.c
@@ -103,7 +103,7 @@ void do_hw_interrupt(struct pt_regs *regs, unsigned long type)
103 die_if_kernel("Kernel bad trap", regs); 103 die_if_kernel("Kernel bad trap", regs);
104 104
105 force_sig_fault(SIGILL, ILL_ILLTRP, 105 force_sig_fault(SIGILL, ILL_ILLTRP,
106 (void __user *)regs->pc, type - 0x80, current); 106 (void __user *)regs->pc, type - 0x80);
107} 107}
108 108
109void do_illegal_instruction(struct pt_regs *regs, unsigned long pc, unsigned long npc, 109void do_illegal_instruction(struct pt_regs *regs, unsigned long pc, unsigned long npc,
@@ -327,7 +327,7 @@ void handle_reg_access(struct pt_regs *regs, unsigned long pc, unsigned long npc
327 printk("Register Access Exception at PC %08lx NPC %08lx PSR %08lx\n", 327 printk("Register Access Exception at PC %08lx NPC %08lx PSR %08lx\n",
328 pc, npc, psr); 328 pc, npc, psr);
329#endif 329#endif
330 force_sig_fault(SIGBUS, BUS_OBJERR, (void __user *)pc, 0, current); 330 force_sig_fault(SIGBUS, BUS_OBJERR, (void __user *)pc, 0);
331} 331}
332 332
333void handle_cp_disabled(struct pt_regs *regs, unsigned long pc, unsigned long npc, 333void handle_cp_disabled(struct pt_regs *regs, unsigned long pc, unsigned long npc,
diff --git a/arch/sparc/kernel/traps_64.c b/arch/sparc/kernel/traps_64.c
index 04aa588d5dd1..27778b65a965 100644
--- a/arch/sparc/kernel/traps_64.c
+++ b/arch/sparc/kernel/traps_64.c
@@ -108,7 +108,7 @@ void bad_trap(struct pt_regs *regs, long lvl)
108 regs->tnpc &= 0xffffffff; 108 regs->tnpc &= 0xffffffff;
109 } 109 }
110 force_sig_fault(SIGILL, ILL_ILLTRP, 110 force_sig_fault(SIGILL, ILL_ILLTRP,
111 (void __user *)regs->tpc, lvl, current); 111 (void __user *)regs->tpc, lvl);
112} 112}
113 113
114void bad_trap_tl1(struct pt_regs *regs, long lvl) 114void bad_trap_tl1(struct pt_regs *regs, long lvl)
@@ -202,7 +202,7 @@ void spitfire_insn_access_exception(struct pt_regs *regs, unsigned long sfsr, un
202 regs->tnpc &= 0xffffffff; 202 regs->tnpc &= 0xffffffff;
203 } 203 }
204 force_sig_fault(SIGSEGV, SEGV_MAPERR, 204 force_sig_fault(SIGSEGV, SEGV_MAPERR,
205 (void __user *)regs->tpc, 0, current); 205 (void __user *)regs->tpc, 0);
206out: 206out:
207 exception_exit(prev_state); 207 exception_exit(prev_state);
208} 208}
@@ -237,7 +237,7 @@ void sun4v_insn_access_exception(struct pt_regs *regs, unsigned long addr, unsig
237 regs->tpc &= 0xffffffff; 237 regs->tpc &= 0xffffffff;
238 regs->tnpc &= 0xffffffff; 238 regs->tnpc &= 0xffffffff;
239 } 239 }
240 force_sig_fault(SIGSEGV, SEGV_MAPERR, (void __user *) addr, 0, current); 240 force_sig_fault(SIGSEGV, SEGV_MAPERR, (void __user *) addr, 0);
241} 241}
242 242
243void sun4v_insn_access_exception_tl1(struct pt_regs *regs, unsigned long addr, unsigned long type_ctx) 243void sun4v_insn_access_exception_tl1(struct pt_regs *regs, unsigned long addr, unsigned long type_ctx)
@@ -322,7 +322,7 @@ void spitfire_data_access_exception(struct pt_regs *regs, unsigned long sfsr, un
322 if (is_no_fault_exception(regs)) 322 if (is_no_fault_exception(regs))
323 return; 323 return;
324 324
325 force_sig_fault(SIGSEGV, SEGV_MAPERR, (void __user *)sfar, 0, current); 325 force_sig_fault(SIGSEGV, SEGV_MAPERR, (void __user *)sfar, 0);
326out: 326out:
327 exception_exit(prev_state); 327 exception_exit(prev_state);
328} 328}
@@ -386,16 +386,13 @@ void sun4v_data_access_exception(struct pt_regs *regs, unsigned long addr, unsig
386 */ 386 */
387 switch (type) { 387 switch (type) {
388 case HV_FAULT_TYPE_INV_ASI: 388 case HV_FAULT_TYPE_INV_ASI:
389 force_sig_fault(SIGILL, ILL_ILLADR, (void __user *)addr, 0, 389 force_sig_fault(SIGILL, ILL_ILLADR, (void __user *)addr, 0);
390 current);
391 break; 390 break;
392 case HV_FAULT_TYPE_MCD_DIS: 391 case HV_FAULT_TYPE_MCD_DIS:
393 force_sig_fault(SIGSEGV, SEGV_ACCADI, (void __user *)addr, 0, 392 force_sig_fault(SIGSEGV, SEGV_ACCADI, (void __user *)addr, 0);
394 current);
395 break; 393 break;
396 default: 394 default:
397 force_sig_fault(SIGSEGV, SEGV_MAPERR, (void __user *)addr, 0, 395 force_sig_fault(SIGSEGV, SEGV_MAPERR, (void __user *)addr, 0);
398 current);
399 break; 396 break;
400 } 397 }
401} 398}
@@ -572,7 +569,7 @@ static void spitfire_ue_log(unsigned long afsr, unsigned long afar, unsigned lon
572 regs->tpc &= 0xffffffff; 569 regs->tpc &= 0xffffffff;
573 regs->tnpc &= 0xffffffff; 570 regs->tnpc &= 0xffffffff;
574 } 571 }
575 force_sig_fault(SIGBUS, BUS_OBJERR, (void *)0, 0, current); 572 force_sig_fault(SIGBUS, BUS_OBJERR, (void *)0, 0);
576} 573}
577 574
578void spitfire_access_error(struct pt_regs *regs, unsigned long status_encoded, unsigned long afar) 575void spitfire_access_error(struct pt_regs *regs, unsigned long status_encoded, unsigned long afar)
@@ -2074,7 +2071,7 @@ void do_mcd_err(struct pt_regs *regs, struct sun4v_error_entry ent)
2074 * code 2071 * code
2075 */ 2072 */
2076 force_sig_fault(SIGSEGV, SEGV_ADIDERR, (void __user *)ent.err_raddr, 2073 force_sig_fault(SIGSEGV, SEGV_ADIDERR, (void __user *)ent.err_raddr,
2077 0, current); 2074 0);
2078} 2075}
2079 2076
2080/* We run with %pil set to PIL_NORMAL_MAX and PSTATE_IE enabled in %pstate. 2077/* We run with %pil set to PIL_NORMAL_MAX and PSTATE_IE enabled in %pstate.
@@ -2182,13 +2179,13 @@ bool sun4v_nonresum_error_user_handled(struct pt_regs *regs,
2182 addr += PAGE_SIZE; 2179 addr += PAGE_SIZE;
2183 } 2180 }
2184 } 2181 }
2185 force_sig(SIGKILL, current); 2182 force_sig(SIGKILL);
2186 2183
2187 return true; 2184 return true;
2188 } 2185 }
2189 if (attrs & SUN4V_ERR_ATTRS_PIO) { 2186 if (attrs & SUN4V_ERR_ATTRS_PIO) {
2190 force_sig_fault(SIGBUS, BUS_ADRERR, 2187 force_sig_fault(SIGBUS, BUS_ADRERR,
2191 (void __user *)sun4v_get_vaddr(regs), 0, current); 2188 (void __user *)sun4v_get_vaddr(regs), 0);
2192 return true; 2189 return true;
2193 } 2190 }
2194 2191
@@ -2345,7 +2342,7 @@ static void do_fpe_common(struct pt_regs *regs)
2345 code = FPE_FLTRES; 2342 code = FPE_FLTRES;
2346 } 2343 }
2347 force_sig_fault(SIGFPE, code, 2344 force_sig_fault(SIGFPE, code,
2348 (void __user *)regs->tpc, 0, current); 2345 (void __user *)regs->tpc, 0);
2349 } 2346 }
2350} 2347}
2351 2348
@@ -2400,7 +2397,7 @@ void do_tof(struct pt_regs *regs)
2400 regs->tnpc &= 0xffffffff; 2397 regs->tnpc &= 0xffffffff;
2401 } 2398 }
2402 force_sig_fault(SIGEMT, EMT_TAGOVF, 2399 force_sig_fault(SIGEMT, EMT_TAGOVF,
2403 (void __user *)regs->tpc, 0, current); 2400 (void __user *)regs->tpc, 0);
2404out: 2401out:
2405 exception_exit(prev_state); 2402 exception_exit(prev_state);
2406} 2403}
@@ -2420,7 +2417,7 @@ void do_div0(struct pt_regs *regs)
2420 regs->tnpc &= 0xffffffff; 2417 regs->tnpc &= 0xffffffff;
2421 } 2418 }
2422 force_sig_fault(SIGFPE, FPE_INTDIV, 2419 force_sig_fault(SIGFPE, FPE_INTDIV,
2423 (void __user *)regs->tpc, 0, current); 2420 (void __user *)regs->tpc, 0);
2424out: 2421out:
2425 exception_exit(prev_state); 2422 exception_exit(prev_state);
2426} 2423}
@@ -2616,7 +2613,7 @@ void do_illegal_instruction(struct pt_regs *regs)
2616 } 2613 }
2617 } 2614 }
2618 } 2615 }
2619 force_sig_fault(SIGILL, ILL_ILLOPC, (void __user *)pc, 0, current); 2616 force_sig_fault(SIGILL, ILL_ILLOPC, (void __user *)pc, 0);
2620out: 2617out:
2621 exception_exit(prev_state); 2618 exception_exit(prev_state);
2622} 2619}
@@ -2636,7 +2633,7 @@ void mem_address_unaligned(struct pt_regs *regs, unsigned long sfar, unsigned lo
2636 if (is_no_fault_exception(regs)) 2633 if (is_no_fault_exception(regs))
2637 return; 2634 return;
2638 2635
2639 force_sig_fault(SIGBUS, BUS_ADRALN, (void __user *)sfar, 0, current); 2636 force_sig_fault(SIGBUS, BUS_ADRALN, (void __user *)sfar, 0);
2640out: 2637out:
2641 exception_exit(prev_state); 2638 exception_exit(prev_state);
2642} 2639}
@@ -2654,7 +2651,7 @@ void sun4v_do_mna(struct pt_regs *regs, unsigned long addr, unsigned long type_c
2654 if (is_no_fault_exception(regs)) 2651 if (is_no_fault_exception(regs))
2655 return; 2652 return;
2656 2653
2657 force_sig_fault(SIGBUS, BUS_ADRALN, (void __user *) addr, 0, current); 2654 force_sig_fault(SIGBUS, BUS_ADRALN, (void __user *) addr, 0);
2658} 2655}
2659 2656
2660/* sun4v_mem_corrupt_detect_precise() - Handle precise exception on an ADI 2657/* sun4v_mem_corrupt_detect_precise() - Handle precise exception on an ADI
@@ -2701,7 +2698,7 @@ void sun4v_mem_corrupt_detect_precise(struct pt_regs *regs, unsigned long addr,
2701 regs->tpc &= 0xffffffff; 2698 regs->tpc &= 0xffffffff;
2702 regs->tnpc &= 0xffffffff; 2699 regs->tnpc &= 0xffffffff;
2703 } 2700 }
2704 force_sig_fault(SIGSEGV, SEGV_ADIPERR, (void __user *)addr, 0, current); 2701 force_sig_fault(SIGSEGV, SEGV_ADIPERR, (void __user *)addr, 0);
2705} 2702}
2706 2703
2707void do_privop(struct pt_regs *regs) 2704void do_privop(struct pt_regs *regs)
@@ -2717,7 +2714,7 @@ void do_privop(struct pt_regs *regs)
2717 regs->tnpc &= 0xffffffff; 2714 regs->tnpc &= 0xffffffff;
2718 } 2715 }
2719 force_sig_fault(SIGILL, ILL_PRVOPC, 2716 force_sig_fault(SIGILL, ILL_PRVOPC,
2720 (void __user *)regs->tpc, 0, current); 2717 (void __user *)regs->tpc, 0);
2721out: 2718out:
2722 exception_exit(prev_state); 2719 exception_exit(prev_state);
2723} 2720}
diff --git a/arch/sparc/mm/fault_32.c b/arch/sparc/mm/fault_32.c
index b0440b0edd97..8d69de111470 100644
--- a/arch/sparc/mm/fault_32.c
+++ b/arch/sparc/mm/fault_32.c
@@ -131,7 +131,7 @@ static void __do_fault_siginfo(int code, int sig, struct pt_regs *regs,
131 show_signal_msg(regs, sig, code, 131 show_signal_msg(regs, sig, code,
132 addr, current); 132 addr, current);
133 133
134 force_sig_fault(sig, code, (void __user *) addr, 0, current); 134 force_sig_fault(sig, code, (void __user *) addr, 0);
135} 135}
136 136
137static unsigned long compute_si_addr(struct pt_regs *regs, int text_fault) 137static unsigned long compute_si_addr(struct pt_regs *regs, int text_fault)
@@ -425,7 +425,7 @@ do_sigbus:
425static void check_stack_aligned(unsigned long sp) 425static void check_stack_aligned(unsigned long sp)
426{ 426{
427 if (sp & 0x7UL) 427 if (sp & 0x7UL)
428 force_sig(SIGILL, current); 428 force_sig(SIGILL);
429} 429}
430 430
431void window_overflow_fault(void) 431void window_overflow_fault(void)
diff --git a/arch/sparc/mm/fault_64.c b/arch/sparc/mm/fault_64.c
index 8f8a604c1300..83fda4d9c3b2 100644
--- a/arch/sparc/mm/fault_64.c
+++ b/arch/sparc/mm/fault_64.c
@@ -187,7 +187,7 @@ static void do_fault_siginfo(int code, int sig, struct pt_regs *regs,
187 if (unlikely(show_unhandled_signals)) 187 if (unlikely(show_unhandled_signals))
188 show_signal_msg(regs, sig, code, addr, current); 188 show_signal_msg(regs, sig, code, addr, current);
189 189
190 force_sig_fault(sig, code, (void __user *) addr, 0, current); 190 force_sig_fault(sig, code, (void __user *) addr, 0);
191} 191}
192 192
193static unsigned int get_fault_insn(struct pt_regs *regs, unsigned int insn) 193static unsigned int get_fault_insn(struct pt_regs *regs, unsigned int insn)
diff --git a/arch/um/kernel/exec.c b/arch/um/kernel/exec.c
index a43d42bf0a86..783b9247161f 100644
--- a/arch/um/kernel/exec.c
+++ b/arch/um/kernel/exec.c
@@ -32,7 +32,7 @@ void flush_thread(void)
32 if (ret) { 32 if (ret) {
33 printk(KERN_ERR "flush_thread - clearing address space failed, " 33 printk(KERN_ERR "flush_thread - clearing address space failed, "
34 "err = %d\n", ret); 34 "err = %d\n", ret);
35 force_sig(SIGKILL, current); 35 force_sig(SIGKILL);
36 } 36 }
37 get_safe_registers(current_pt_regs()->regs.gp, 37 get_safe_registers(current_pt_regs()->regs.gp,
38 current_pt_regs()->regs.fp); 38 current_pt_regs()->regs.fp);
diff --git a/arch/um/kernel/ptrace.c b/arch/um/kernel/ptrace.c
index 5f47422401e1..da1e96b1ec3e 100644
--- a/arch/um/kernel/ptrace.c
+++ b/arch/um/kernel/ptrace.c
@@ -112,13 +112,12 @@ long arch_ptrace(struct task_struct *child, long request,
112 return ret; 112 return ret;
113} 113}
114 114
115static void send_sigtrap(struct task_struct *tsk, struct uml_pt_regs *regs, 115static void send_sigtrap(struct uml_pt_regs *regs, int error_code)
116 int error_code)
117{ 116{
118 /* Send us the fake SIGTRAP */ 117 /* Send us the fake SIGTRAP */
119 force_sig_fault(SIGTRAP, TRAP_BRKPT, 118 force_sig_fault(SIGTRAP, TRAP_BRKPT,
120 /* User-mode eip? */ 119 /* User-mode eip? */
121 UPT_IS_USER(regs) ? (void __user *) UPT_IP(regs) : NULL, tsk); 120 UPT_IS_USER(regs) ? (void __user *) UPT_IP(regs) : NULL);
122} 121}
123 122
124/* 123/*
@@ -147,7 +146,7 @@ void syscall_trace_leave(struct pt_regs *regs)
147 146
148 /* Fake a debug trap */ 147 /* Fake a debug trap */
149 if (ptraced & PT_DTRACE) 148 if (ptraced & PT_DTRACE)
150 send_sigtrap(current, &regs->regs, 0); 149 send_sigtrap(&regs->regs, 0);
151 150
152 if (!test_thread_flag(TIF_SYSCALL_TRACE)) 151 if (!test_thread_flag(TIF_SYSCALL_TRACE))
153 return; 152 return;
diff --git a/arch/um/kernel/skas/mmu.c b/arch/um/kernel/skas/mmu.c
index 7a1f2a936fd1..29e7f5f9f188 100644
--- a/arch/um/kernel/skas/mmu.c
+++ b/arch/um/kernel/skas/mmu.c
@@ -119,7 +119,7 @@ void uml_setup_stubs(struct mm_struct *mm)
119 return; 119 return;
120 120
121out: 121out:
122 force_sigsegv(SIGSEGV, current); 122 force_sigsegv(SIGSEGV);
123} 123}
124 124
125void arch_exit_mmap(struct mm_struct *mm) 125void arch_exit_mmap(struct mm_struct *mm)
diff --git a/arch/um/kernel/tlb.c b/arch/um/kernel/tlb.c
index 8347161c2ae0..45f739bf302f 100644
--- a/arch/um/kernel/tlb.c
+++ b/arch/um/kernel/tlb.c
@@ -329,7 +329,7 @@ void fix_range_common(struct mm_struct *mm, unsigned long start_addr,
329 "process: %d\n", task_tgid_vnr(current)); 329 "process: %d\n", task_tgid_vnr(current));
330 /* We are under mmap_sem, release it such that current can terminate */ 330 /* We are under mmap_sem, release it such that current can terminate */
331 up_write(&current->mm->mmap_sem); 331 up_write(&current->mm->mmap_sem);
332 force_sig(SIGKILL, current); 332 force_sig(SIGKILL);
333 do_signal(&current->thread.regs); 333 do_signal(&current->thread.regs);
334 } 334 }
335} 335}
@@ -487,7 +487,7 @@ void flush_tlb_page(struct vm_area_struct *vma, unsigned long address)
487 487
488kill: 488kill:
489 printk(KERN_ERR "Failed to flush page for address 0x%lx\n", address); 489 printk(KERN_ERR "Failed to flush page for address 0x%lx\n", address);
490 force_sig(SIGKILL, current); 490 force_sig(SIGKILL);
491} 491}
492 492
493pgd_t *pgd_offset_proc(struct mm_struct *mm, unsigned long address) 493pgd_t *pgd_offset_proc(struct mm_struct *mm, unsigned long address)
diff --git a/arch/um/kernel/trap.c b/arch/um/kernel/trap.c
index 0e8b6158f224..58fe36856182 100644
--- a/arch/um/kernel/trap.c
+++ b/arch/um/kernel/trap.c
@@ -163,13 +163,12 @@ static void show_segv_info(struct uml_pt_regs *regs)
163static void bad_segv(struct faultinfo fi, unsigned long ip) 163static void bad_segv(struct faultinfo fi, unsigned long ip)
164{ 164{
165 current->thread.arch.faultinfo = fi; 165 current->thread.arch.faultinfo = fi;
166 force_sig_fault(SIGSEGV, SEGV_ACCERR, (void __user *) FAULT_ADDRESS(fi), 166 force_sig_fault(SIGSEGV, SEGV_ACCERR, (void __user *) FAULT_ADDRESS(fi));
167 current);
168} 167}
169 168
170void fatal_sigsegv(void) 169void fatal_sigsegv(void)
171{ 170{
172 force_sigsegv(SIGSEGV, current); 171 force_sigsegv(SIGSEGV);
173 do_signal(&current->thread.regs); 172 do_signal(&current->thread.regs);
174 /* 173 /*
175 * This is to tell gcc that we're not returning - do_signal 174 * This is to tell gcc that we're not returning - do_signal
@@ -268,13 +267,11 @@ unsigned long segv(struct faultinfo fi, unsigned long ip, int is_user,
268 267
269 if (err == -EACCES) { 268 if (err == -EACCES) {
270 current->thread.arch.faultinfo = fi; 269 current->thread.arch.faultinfo = fi;
271 force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address, 270 force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address);
272 current);
273 } else { 271 } else {
274 BUG_ON(err != -EFAULT); 272 BUG_ON(err != -EFAULT);
275 current->thread.arch.faultinfo = fi; 273 current->thread.arch.faultinfo = fi;
276 force_sig_fault(SIGSEGV, si_code, (void __user *) address, 274 force_sig_fault(SIGSEGV, si_code, (void __user *) address);
277 current);
278 } 275 }
279 276
280out: 277out:
@@ -304,12 +301,11 @@ void relay_signal(int sig, struct siginfo *si, struct uml_pt_regs *regs)
304 if ((err == 0) && (siginfo_layout(sig, code) == SIL_FAULT)) { 301 if ((err == 0) && (siginfo_layout(sig, code) == SIL_FAULT)) {
305 struct faultinfo *fi = UPT_FAULTINFO(regs); 302 struct faultinfo *fi = UPT_FAULTINFO(regs);
306 current->thread.arch.faultinfo = *fi; 303 current->thread.arch.faultinfo = *fi;
307 force_sig_fault(sig, code, (void __user *)FAULT_ADDRESS(*fi), 304 force_sig_fault(sig, code, (void __user *)FAULT_ADDRESS(*fi));
308 current);
309 } else { 305 } else {
310 printk(KERN_ERR "Attempted to relay unknown signal %d (si_code = %d) with errno %d\n", 306 printk(KERN_ERR "Attempted to relay unknown signal %d (si_code = %d) with errno %d\n",
311 sig, code, err); 307 sig, code, err);
312 force_sig(sig, current); 308 force_sig(sig);
313 } 309 }
314} 310}
315 311
diff --git a/arch/unicore32/kernel/signal.c b/arch/unicore32/kernel/signal.c
index e62f82bd1339..3946182a835d 100644
--- a/arch/unicore32/kernel/signal.c
+++ b/arch/unicore32/kernel/signal.c
@@ -126,7 +126,7 @@ asmlinkage int __sys_rt_sigreturn(struct pt_regs *regs)
126 return regs->UCreg_00; 126 return regs->UCreg_00;
127 127
128badframe: 128badframe:
129 force_sig(SIGSEGV, current); 129 force_sig(SIGSEGV);
130 return 0; 130 return 0;
131} 131}
132 132
@@ -383,7 +383,7 @@ static void do_signal(struct pt_regs *regs, int syscall)
383 regs->UCreg_pc = KERN_RESTART_CODE; 383 regs->UCreg_pc = KERN_RESTART_CODE;
384 } else { 384 } else {
385 regs->UCreg_sp += 4; 385 regs->UCreg_sp += 4;
386 force_sigsegv(0, current); 386 force_sigsegv(0);
387 } 387 }
388 } 388 }
389 if (regs->UCreg_00 == -ERESTARTNOHAND || 389 if (regs->UCreg_00 == -ERESTARTNOHAND ||
diff --git a/arch/unicore32/kernel/traps.c b/arch/unicore32/kernel/traps.c
index 1c1f0ce20e19..e24f67283864 100644
--- a/arch/unicore32/kernel/traps.c
+++ b/arch/unicore32/kernel/traps.c
@@ -245,7 +245,7 @@ void uc32_notify_die(const char *str, struct pt_regs *regs,
245 current->thread.error_code = err; 245 current->thread.error_code = err;
246 current->thread.trap_no = trap; 246 current->thread.trap_no = trap;
247 247
248 force_sig_fault(sig, code, addr, current); 248 force_sig_fault(sig, code, addr);
249 } else 249 } else
250 die(str, regs, err); 250 die(str, regs, err);
251} 251}
diff --git a/arch/unicore32/mm/fault.c b/arch/unicore32/mm/fault.c
index 33e0d8a267e8..76342de9cf8c 100644
--- a/arch/unicore32/mm/fault.c
+++ b/arch/unicore32/mm/fault.c
@@ -113,14 +113,15 @@ static void __do_kernel_fault(struct mm_struct *mm, unsigned long addr,
113 * Something tried to access memory that isn't in our memory map.. 113 * Something tried to access memory that isn't in our memory map..
114 * User mode accesses just cause a SIGSEGV 114 * User mode accesses just cause a SIGSEGV
115 */ 115 */
116static void __do_user_fault(struct task_struct *tsk, unsigned long addr, 116static void __do_user_fault(unsigned long addr, unsigned int fsr,
117 unsigned int fsr, unsigned int sig, int code, 117 unsigned int sig, int code, struct pt_regs *regs)
118 struct pt_regs *regs)
119{ 118{
119 struct task_struct *tsk = current;
120
120 tsk->thread.address = addr; 121 tsk->thread.address = addr;
121 tsk->thread.error_code = fsr; 122 tsk->thread.error_code = fsr;
122 tsk->thread.trap_no = 14; 123 tsk->thread.trap_no = 14;
123 force_sig_fault(sig, code, (void __user *)addr, tsk); 124 force_sig_fault(sig, code, (void __user *)addr);
124} 125}
125 126
126void do_bad_area(unsigned long addr, unsigned int fsr, struct pt_regs *regs) 127void do_bad_area(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
@@ -133,7 +134,7 @@ void do_bad_area(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
133 * have no context to handle this fault with. 134 * have no context to handle this fault with.
134 */ 135 */
135 if (user_mode(regs)) 136 if (user_mode(regs))
136 __do_user_fault(tsk, addr, fsr, SIGSEGV, SEGV_MAPERR, regs); 137 __do_user_fault(addr, fsr, SIGSEGV, SEGV_MAPERR, regs);
137 else 138 else
138 __do_kernel_fault(mm, addr, fsr, regs); 139 __do_kernel_fault(mm, addr, fsr, regs);
139} 140}
@@ -307,7 +308,7 @@ retry:
307 code = fault == VM_FAULT_BADACCESS ? SEGV_ACCERR : SEGV_MAPERR; 308 code = fault == VM_FAULT_BADACCESS ? SEGV_ACCERR : SEGV_MAPERR;
308 } 309 }
309 310
310 __do_user_fault(tsk, addr, fsr, sig, code, regs); 311 __do_user_fault(addr, fsr, sig, code, regs);
311 return 0; 312 return 0;
312 313
313no_context: 314no_context:
diff --git a/arch/x86/entry/vsyscall/vsyscall_64.c b/arch/x86/entry/vsyscall/vsyscall_64.c
index 07003f3f1bfc..e7c596dea947 100644
--- a/arch/x86/entry/vsyscall/vsyscall_64.c
+++ b/arch/x86/entry/vsyscall/vsyscall_64.c
@@ -110,7 +110,7 @@ static bool write_ok_or_segv(unsigned long ptr, size_t size)
110 thread->cr2 = ptr; 110 thread->cr2 = ptr;
111 thread->trap_nr = X86_TRAP_PF; 111 thread->trap_nr = X86_TRAP_PF;
112 112
113 force_sig_fault(SIGSEGV, SEGV_MAPERR, (void __user *)ptr, current); 113 force_sig_fault(SIGSEGV, SEGV_MAPERR, (void __user *)ptr);
114 return false; 114 return false;
115 } else { 115 } else {
116 return true; 116 return true;
@@ -289,7 +289,7 @@ do_ret:
289 return true; 289 return true;
290 290
291sigsegv: 291sigsegv:
292 force_sig(SIGSEGV, current); 292 force_sig(SIGSEGV);
293 return true; 293 return true;
294} 294}
295 295
diff --git a/arch/x86/include/asm/ptrace.h b/arch/x86/include/asm/ptrace.h
index 3703c91f441e..78cf265c5b58 100644
--- a/arch/x86/include/asm/ptrace.h
+++ b/arch/x86/include/asm/ptrace.h
@@ -102,8 +102,7 @@ extern unsigned long profile_pc(struct pt_regs *regs);
102 102
103extern unsigned long 103extern unsigned long
104convert_ip_to_linear(struct task_struct *child, struct pt_regs *regs); 104convert_ip_to_linear(struct task_struct *child, struct pt_regs *regs);
105extern void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs, 105extern void send_sigtrap(struct pt_regs *regs, int error_code, int si_code);
106 int error_code, int si_code);
107 106
108 107
109static inline unsigned long regs_return_value(struct pt_regs *regs) 108static inline unsigned long regs_return_value(struct pt_regs *regs)
diff --git a/arch/x86/kernel/cpu/mce/core.c b/arch/x86/kernel/cpu/mce/core.c
index 066562a1ea20..743370ee4983 100644
--- a/arch/x86/kernel/cpu/mce/core.c
+++ b/arch/x86/kernel/cpu/mce/core.c
@@ -1348,7 +1348,7 @@ void do_machine_check(struct pt_regs *regs, long error_code)
1348 local_irq_enable(); 1348 local_irq_enable();
1349 1349
1350 if (kill_it || do_memory_failure(&m)) 1350 if (kill_it || do_memory_failure(&m))
1351 force_sig(SIGBUS, current); 1351 force_sig(SIGBUS);
1352 local_irq_disable(); 1352 local_irq_disable();
1353 ist_end_non_atomic(); 1353 ist_end_non_atomic();
1354 } else { 1354 } else {
diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c
index 8eb1e58de043..71691a8310e7 100644
--- a/arch/x86/kernel/ptrace.c
+++ b/arch/x86/kernel/ptrace.c
@@ -1321,18 +1321,19 @@ const struct user_regset_view *task_user_regset_view(struct task_struct *task)
1321#endif 1321#endif
1322} 1322}
1323 1323
1324void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs, 1324void send_sigtrap(struct pt_regs *regs, int error_code, int si_code)
1325 int error_code, int si_code)
1326{ 1325{
1326 struct task_struct *tsk = current;
1327
1327 tsk->thread.trap_nr = X86_TRAP_DB; 1328 tsk->thread.trap_nr = X86_TRAP_DB;
1328 tsk->thread.error_code = error_code; 1329 tsk->thread.error_code = error_code;
1329 1330
1330 /* Send us the fake SIGTRAP */ 1331 /* Send us the fake SIGTRAP */
1331 force_sig_fault(SIGTRAP, si_code, 1332 force_sig_fault(SIGTRAP, si_code,
1332 user_mode(regs) ? (void __user *)regs->ip : NULL, tsk); 1333 user_mode(regs) ? (void __user *)regs->ip : NULL);
1333} 1334}
1334 1335
1335void user_single_step_report(struct pt_regs *regs) 1336void user_single_step_report(struct pt_regs *regs)
1336{ 1337{
1337 send_sigtrap(current, regs, 0, TRAP_BRKPT); 1338 send_sigtrap(regs, 0, TRAP_BRKPT);
1338} 1339}
diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c
index 364813cea647..7cf508f78c8c 100644
--- a/arch/x86/kernel/signal.c
+++ b/arch/x86/kernel/signal.c
@@ -857,7 +857,7 @@ void signal_fault(struct pt_regs *regs, void __user *frame, char *where)
857 pr_cont("\n"); 857 pr_cont("\n");
858 } 858 }
859 859
860 force_sig(SIGSEGV, me); 860 force_sig(SIGSEGV);
861} 861}
862 862
863#ifdef CONFIG_X86_X32_ABI 863#ifdef CONFIG_X86_X32_ABI
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
index 8b6d03e55d2f..87095a477154 100644
--- a/arch/x86/kernel/traps.c
+++ b/arch/x86/kernel/traps.c
@@ -254,9 +254,9 @@ do_trap(int trapnr, int signr, char *str, struct pt_regs *regs,
254 show_signal(tsk, signr, "trap ", str, regs, error_code); 254 show_signal(tsk, signr, "trap ", str, regs, error_code);
255 255
256 if (!sicode) 256 if (!sicode)
257 force_sig(signr, tsk); 257 force_sig(signr);
258 else 258 else
259 force_sig_fault(signr, sicode, addr, tsk); 259 force_sig_fault(signr, sicode, addr);
260} 260}
261NOKPROBE_SYMBOL(do_trap); 261NOKPROBE_SYMBOL(do_trap);
262 262
@@ -566,7 +566,7 @@ do_general_protection(struct pt_regs *regs, long error_code)
566 566
567 show_signal(tsk, SIGSEGV, "", desc, regs, error_code); 567 show_signal(tsk, SIGSEGV, "", desc, regs, error_code);
568 568
569 force_sig(SIGSEGV, tsk); 569 force_sig(SIGSEGV);
570} 570}
571NOKPROBE_SYMBOL(do_general_protection); 571NOKPROBE_SYMBOL(do_general_protection);
572 572
@@ -805,7 +805,7 @@ dotraplinkage void do_debug(struct pt_regs *regs, long error_code)
805 } 805 }
806 si_code = get_si_code(tsk->thread.debugreg6); 806 si_code = get_si_code(tsk->thread.debugreg6);
807 if (tsk->thread.debugreg6 & (DR_STEP | DR_TRAP_BITS) || user_icebp) 807 if (tsk->thread.debugreg6 & (DR_STEP | DR_TRAP_BITS) || user_icebp)
808 send_sigtrap(tsk, regs, error_code, si_code); 808 send_sigtrap(regs, error_code, si_code);
809 cond_local_irq_disable(regs); 809 cond_local_irq_disable(regs);
810 debug_stack_usage_dec(); 810 debug_stack_usage_dec();
811 811
@@ -856,7 +856,7 @@ static void math_error(struct pt_regs *regs, int error_code, int trapnr)
856 return; 856 return;
857 857
858 force_sig_fault(SIGFPE, si_code, 858 force_sig_fault(SIGFPE, si_code,
859 (void __user *)uprobe_get_trap_addr(regs), task); 859 (void __user *)uprobe_get_trap_addr(regs));
860} 860}
861 861
862dotraplinkage void do_coprocessor_error(struct pt_regs *regs, long error_code) 862dotraplinkage void do_coprocessor_error(struct pt_regs *regs, long error_code)
diff --git a/arch/x86/kernel/umip.c b/arch/x86/kernel/umip.c
index f8f3cfda01ae..5b345add550f 100644
--- a/arch/x86/kernel/umip.c
+++ b/arch/x86/kernel/umip.c
@@ -277,7 +277,7 @@ static void force_sig_info_umip_fault(void __user *addr, struct pt_regs *regs)
277 tsk->thread.error_code = X86_PF_USER | X86_PF_WRITE; 277 tsk->thread.error_code = X86_PF_USER | X86_PF_WRITE;
278 tsk->thread.trap_nr = X86_TRAP_PF; 278 tsk->thread.trap_nr = X86_TRAP_PF;
279 279
280 force_sig_fault(SIGSEGV, SEGV_MAPERR, addr, tsk); 280 force_sig_fault(SIGSEGV, SEGV_MAPERR, addr);
281 281
282 if (!(show_unhandled_signals && unhandled_signal(tsk, SIGSEGV))) 282 if (!(show_unhandled_signals && unhandled_signal(tsk, SIGSEGV)))
283 return; 283 return;
diff --git a/arch/x86/kernel/uprobes.c b/arch/x86/kernel/uprobes.c
index 918b5092a85f..d8359ebeea70 100644
--- a/arch/x86/kernel/uprobes.c
+++ b/arch/x86/kernel/uprobes.c
@@ -1074,7 +1074,7 @@ arch_uretprobe_hijack_return_addr(unsigned long trampoline_vaddr, struct pt_regs
1074 pr_err("return address clobbered: pid=%d, %%sp=%#lx, %%ip=%#lx\n", 1074 pr_err("return address clobbered: pid=%d, %%sp=%#lx, %%ip=%#lx\n",
1075 current->pid, regs->sp, regs->ip); 1075 current->pid, regs->sp, regs->ip);
1076 1076
1077 force_sig(SIGSEGV, current); 1077 force_sig(SIGSEGV);
1078 } 1078 }
1079 1079
1080 return -1; 1080 return -1;
diff --git a/arch/x86/kernel/vm86_32.c b/arch/x86/kernel/vm86_32.c
index 6a38717d179c..a76c12b38e92 100644
--- a/arch/x86/kernel/vm86_32.c
+++ b/arch/x86/kernel/vm86_32.c
@@ -583,7 +583,7 @@ int handle_vm86_trap(struct kernel_vm86_regs *regs, long error_code, int trapno)
583 return 1; /* we let this handle by the calling routine */ 583 return 1; /* we let this handle by the calling routine */
584 current->thread.trap_nr = trapno; 584 current->thread.trap_nr = trapno;
585 current->thread.error_code = error_code; 585 current->thread.error_code = error_code;
586 force_sig(SIGTRAP, current); 586 force_sig(SIGTRAP);
587 return 0; 587 return 0;
588} 588}
589 589
diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
index 58e4f1f00bbc..794f364cb882 100644
--- a/arch/x86/mm/fault.c
+++ b/arch/x86/mm/fault.c
@@ -760,8 +760,7 @@ no_context(struct pt_regs *regs, unsigned long error_code,
760 set_signal_archinfo(address, error_code); 760 set_signal_archinfo(address, error_code);
761 761
762 /* XXX: hwpoison faults will set the wrong code. */ 762 /* XXX: hwpoison faults will set the wrong code. */
763 force_sig_fault(signal, si_code, (void __user *)address, 763 force_sig_fault(signal, si_code, (void __user *)address);
764 tsk);
765 } 764 }
766 765
767 /* 766 /*
@@ -922,7 +921,7 @@ __bad_area_nosemaphore(struct pt_regs *regs, unsigned long error_code,
922 if (si_code == SEGV_PKUERR) 921 if (si_code == SEGV_PKUERR)
923 force_sig_pkuerr((void __user *)address, pkey); 922 force_sig_pkuerr((void __user *)address, pkey);
924 923
925 force_sig_fault(SIGSEGV, si_code, (void __user *)address, tsk); 924 force_sig_fault(SIGSEGV, si_code, (void __user *)address);
926 925
927 return; 926 return;
928 } 927 }
@@ -1019,8 +1018,6 @@ static void
1019do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address, 1018do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address,
1020 vm_fault_t fault) 1019 vm_fault_t fault)
1021{ 1020{
1022 struct task_struct *tsk = current;
1023
1024 /* Kernel mode? Handle exceptions or die: */ 1021 /* Kernel mode? Handle exceptions or die: */
1025 if (!(error_code & X86_PF_USER)) { 1022 if (!(error_code & X86_PF_USER)) {
1026 no_context(regs, error_code, address, SIGBUS, BUS_ADRERR); 1023 no_context(regs, error_code, address, SIGBUS, BUS_ADRERR);
@@ -1035,6 +1032,7 @@ do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address,
1035 1032
1036#ifdef CONFIG_MEMORY_FAILURE 1033#ifdef CONFIG_MEMORY_FAILURE
1037 if (fault & (VM_FAULT_HWPOISON|VM_FAULT_HWPOISON_LARGE)) { 1034 if (fault & (VM_FAULT_HWPOISON|VM_FAULT_HWPOISON_LARGE)) {
1035 struct task_struct *tsk = current;
1038 unsigned lsb = 0; 1036 unsigned lsb = 0;
1039 1037
1040 pr_err( 1038 pr_err(
@@ -1044,11 +1042,11 @@ do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address,
1044 lsb = hstate_index_to_shift(VM_FAULT_GET_HINDEX(fault)); 1042 lsb = hstate_index_to_shift(VM_FAULT_GET_HINDEX(fault));
1045 if (fault & VM_FAULT_HWPOISON) 1043 if (fault & VM_FAULT_HWPOISON)
1046 lsb = PAGE_SHIFT; 1044 lsb = PAGE_SHIFT;
1047 force_sig_mceerr(BUS_MCEERR_AR, (void __user *)address, lsb, tsk); 1045 force_sig_mceerr(BUS_MCEERR_AR, (void __user *)address, lsb);
1048 return; 1046 return;
1049 } 1047 }
1050#endif 1048#endif
1051 force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address, tsk); 1049 force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address);
1052} 1050}
1053 1051
1054static noinline void 1052static noinline void
diff --git a/arch/x86/mm/mpx.c b/arch/x86/mm/mpx.c
index 0d1c47cbbdd6..895fb7a9294d 100644
--- a/arch/x86/mm/mpx.c
+++ b/arch/x86/mm/mpx.c
@@ -912,7 +912,7 @@ void mpx_notify_unmap(struct mm_struct *mm, unsigned long start,
912 912
913 ret = mpx_unmap_tables(mm, start, end); 913 ret = mpx_unmap_tables(mm, start, end);
914 if (ret) 914 if (ret)
915 force_sig(SIGSEGV, current); 915 force_sig(SIGSEGV);
916} 916}
917 917
918/* MPX cannot handle addresses above 47 bits yet. */ 918/* MPX cannot handle addresses above 47 bits yet. */
diff --git a/arch/x86/um/signal.c b/arch/x86/um/signal.c
index 8b4a71efe7ee..7c11c9e5d7ea 100644
--- a/arch/x86/um/signal.c
+++ b/arch/x86/um/signal.c
@@ -471,7 +471,7 @@ long sys_sigreturn(void)
471 return PT_REGS_SYSCALL_RET(&current->thread.regs); 471 return PT_REGS_SYSCALL_RET(&current->thread.regs);
472 472
473 segfault: 473 segfault:
474 force_sig(SIGSEGV, current); 474 force_sig(SIGSEGV);
475 return 0; 475 return 0;
476} 476}
477 477
@@ -577,6 +577,6 @@ long sys_rt_sigreturn(void)
577 return PT_REGS_SYSCALL_RET(&current->thread.regs); 577 return PT_REGS_SYSCALL_RET(&current->thread.regs);
578 578
579 segfault: 579 segfault:
580 force_sig(SIGSEGV, current); 580 force_sig(SIGSEGV);
581 return 0; 581 return 0;
582} 582}
diff --git a/arch/xtensa/kernel/signal.c b/arch/xtensa/kernel/signal.c
index dc22a238ed9c..fbedf2aba09d 100644
--- a/arch/xtensa/kernel/signal.c
+++ b/arch/xtensa/kernel/signal.c
@@ -270,7 +270,7 @@ asmlinkage long xtensa_rt_sigreturn(long a0, long a1, long a2, long a3,
270 return ret; 270 return ret;
271 271
272badframe: 272badframe:
273 force_sig(SIGSEGV, current); 273 force_sig(SIGSEGV);
274 return 0; 274 return 0;
275} 275}
276 276
diff --git a/arch/xtensa/kernel/traps.c b/arch/xtensa/kernel/traps.c
index 454d53096bc9..f060348c1b23 100644
--- a/arch/xtensa/kernel/traps.c
+++ b/arch/xtensa/kernel/traps.c
@@ -184,7 +184,7 @@ void do_unhandled(struct pt_regs *regs, unsigned long exccause)
184 "\tEXCCAUSE is %ld\n", 184 "\tEXCCAUSE is %ld\n",
185 current->comm, task_pid_nr(current), regs->pc, 185 current->comm, task_pid_nr(current), regs->pc,
186 exccause); 186 exccause);
187 force_sig(SIGILL, current); 187 force_sig(SIGILL);
188} 188}
189 189
190/* 190/*
@@ -306,7 +306,7 @@ do_illegal_instruction(struct pt_regs *regs)
306 306
307 pr_info_ratelimited("Illegal Instruction in '%s' (pid = %d, pc = %#010lx)\n", 307 pr_info_ratelimited("Illegal Instruction in '%s' (pid = %d, pc = %#010lx)\n",
308 current->comm, task_pid_nr(current), regs->pc); 308 current->comm, task_pid_nr(current), regs->pc);
309 force_sig(SIGILL, current); 309 force_sig(SIGILL);
310} 310}
311 311
312 312
@@ -330,7 +330,7 @@ do_unaligned_user (struct pt_regs *regs)
330 "(pid = %d, pc = %#010lx)\n", 330 "(pid = %d, pc = %#010lx)\n",
331 regs->excvaddr, current->comm, 331 regs->excvaddr, current->comm,
332 task_pid_nr(current), regs->pc); 332 task_pid_nr(current), regs->pc);
333 force_sig_fault(SIGBUS, BUS_ADRALN, (void *) regs->excvaddr, current); 333 force_sig_fault(SIGBUS, BUS_ADRALN, (void *) regs->excvaddr);
334} 334}
335#endif 335#endif
336 336
@@ -354,7 +354,7 @@ do_debug(struct pt_regs *regs)
354 354
355 /* If in user mode, send SIGTRAP signal to current process */ 355 /* If in user mode, send SIGTRAP signal to current process */
356 356
357 force_sig(SIGTRAP, current); 357 force_sig(SIGTRAP);
358} 358}
359 359
360 360
diff --git a/arch/xtensa/mm/fault.c b/arch/xtensa/mm/fault.c
index 2ab0e0dcd166..f81b1478da61 100644
--- a/arch/xtensa/mm/fault.c
+++ b/arch/xtensa/mm/fault.c
@@ -157,7 +157,7 @@ bad_area:
157 if (user_mode(regs)) { 157 if (user_mode(regs)) {
158 current->thread.bad_vaddr = address; 158 current->thread.bad_vaddr = address;
159 current->thread.error_code = is_write; 159 current->thread.error_code = is_write;
160 force_sig_fault(SIGSEGV, code, (void *) address, current); 160 force_sig_fault(SIGSEGV, code, (void *) address);
161 return; 161 return;
162 } 162 }
163 bad_page_fault(regs, address, SIGSEGV); 163 bad_page_fault(regs, address, SIGSEGV);
@@ -182,7 +182,7 @@ do_sigbus:
182 * or user mode. 182 * or user mode.
183 */ 183 */
184 current->thread.bad_vaddr = address; 184 current->thread.bad_vaddr = address;
185 force_sig_fault(SIGBUS, BUS_ADRERR, (void *) address, current); 185 force_sig_fault(SIGBUS, BUS_ADRERR, (void *) address);
186 186
187 /* Kernel mode? Handle exceptions or die */ 187 /* Kernel mode? Handle exceptions or die */
188 if (!user_mode(regs)) 188 if (!user_mode(regs))
diff --git a/drivers/block/drbd/drbd_int.h b/drivers/block/drbd/drbd_int.h
index 31237f45247a..ddbf56014c51 100644
--- a/drivers/block/drbd/drbd_int.h
+++ b/drivers/block/drbd/drbd_int.h
@@ -1960,7 +1960,7 @@ static inline void wake_ack_receiver(struct drbd_connection *connection)
1960{ 1960{
1961 struct task_struct *task = connection->ack_receiver.task; 1961 struct task_struct *task = connection->ack_receiver.task;
1962 if (task && get_t_state(&connection->ack_receiver) == RUNNING) 1962 if (task && get_t_state(&connection->ack_receiver) == RUNNING)
1963 force_sig(SIGXCPU, task); 1963 send_sig(SIGXCPU, task, 1);
1964} 1964}
1965 1965
1966static inline void request_ping(struct drbd_connection *connection) 1966static inline void request_ping(struct drbd_connection *connection)
diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c
index 541b31fa42b3..9604127dc839 100644
--- a/drivers/block/drbd/drbd_main.c
+++ b/drivers/block/drbd/drbd_main.c
@@ -465,7 +465,7 @@ void _drbd_thread_stop(struct drbd_thread *thi, int restart, int wait)
465 smp_mb(); 465 smp_mb();
466 init_completion(&thi->stop); 466 init_completion(&thi->stop);
467 if (thi->task != current) 467 if (thi->task != current)
468 force_sig(DRBD_SIGKILL, thi->task); 468 send_sig(DRBD_SIGKILL, thi->task, 1);
469 } 469 }
470 470
471 spin_unlock_irqrestore(&thi->t_lock, flags); 471 spin_unlock_irqrestore(&thi->t_lock, flags);
diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c
index cdd748b8116d..5d52a2d32155 100644
--- a/drivers/block/drbd/drbd_nl.c
+++ b/drivers/block/drbd/drbd_nl.c
@@ -599,7 +599,7 @@ void conn_try_outdate_peer_async(struct drbd_connection *connection)
599 struct task_struct *opa; 599 struct task_struct *opa;
600 600
601 kref_get(&connection->kref); 601 kref_get(&connection->kref);
602 /* We may just have force_sig()'ed this thread 602 /* We may have just sent a signal to this thread
603 * to get it out of some blocking network function. 603 * to get it out of some blocking network function.
604 * Clear signals; otherwise kthread_run(), which internally uses 604 * Clear signals; otherwise kthread_run(), which internally uses
605 * wait_on_completion_killable(), will mistake our pending signal 605 * wait_on_completion_killable(), will mistake our pending signal
diff --git a/drivers/misc/lkdtm/bugs.c b/drivers/misc/lkdtm/bugs.c
index 17f839dee976..d9fcfd3b5af0 100644
--- a/drivers/misc/lkdtm/bugs.c
+++ b/drivers/misc/lkdtm/bugs.c
@@ -236,7 +236,7 @@ void lkdtm_CORRUPT_USER_DS(void)
236 set_fs(KERNEL_DS); 236 set_fs(KERNEL_DS);
237 237
238 /* Make sure we do not keep running with a KERNEL_DS! */ 238 /* Make sure we do not keep running with a KERNEL_DS! */
239 force_sig(SIGKILL, current); 239 force_sig(SIGKILL);
240} 240}
241 241
242/* Test that VMAP_STACK is actually allocating with a leading guard page */ 242/* Test that VMAP_STACK is actually allocating with a leading guard page */
diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
index fa783531ee88..a02448105527 100644
--- a/drivers/usb/core/devio.c
+++ b/drivers/usb/core/devio.c
@@ -63,7 +63,7 @@ struct usb_dev_state {
63 unsigned int discsignr; 63 unsigned int discsignr;
64 struct pid *disc_pid; 64 struct pid *disc_pid;
65 const struct cred *cred; 65 const struct cred *cred;
66 void __user *disccontext; 66 sigval_t disccontext;
67 unsigned long ifclaimed; 67 unsigned long ifclaimed;
68 u32 disabled_bulk_eps; 68 u32 disabled_bulk_eps;
69 bool privileges_dropped; 69 bool privileges_dropped;
@@ -90,6 +90,7 @@ struct async {
90 unsigned int ifnum; 90 unsigned int ifnum;
91 void __user *userbuffer; 91 void __user *userbuffer;
92 void __user *userurb; 92 void __user *userurb;
93 sigval_t userurb_sigval;
93 struct urb *urb; 94 struct urb *urb;
94 struct usb_memory *usbm; 95 struct usb_memory *usbm;
95 unsigned int mem_usage; 96 unsigned int mem_usage;
@@ -582,22 +583,19 @@ static void async_completed(struct urb *urb)
582{ 583{
583 struct async *as = urb->context; 584 struct async *as = urb->context;
584 struct usb_dev_state *ps = as->ps; 585 struct usb_dev_state *ps = as->ps;
585 struct kernel_siginfo sinfo;
586 struct pid *pid = NULL; 586 struct pid *pid = NULL;
587 const struct cred *cred = NULL; 587 const struct cred *cred = NULL;
588 unsigned long flags; 588 unsigned long flags;
589 int signr; 589 sigval_t addr;
590 int signr, errno;
590 591
591 spin_lock_irqsave(&ps->lock, flags); 592 spin_lock_irqsave(&ps->lock, flags);
592 list_move_tail(&as->asynclist, &ps->async_completed); 593 list_move_tail(&as->asynclist, &ps->async_completed);
593 as->status = urb->status; 594 as->status = urb->status;
594 signr = as->signr; 595 signr = as->signr;
595 if (signr) { 596 if (signr) {
596 clear_siginfo(&sinfo); 597 errno = as->status;
597 sinfo.si_signo = as->signr; 598 addr = as->userurb_sigval;
598 sinfo.si_errno = as->status;
599 sinfo.si_code = SI_ASYNCIO;
600 sinfo.si_addr = as->userurb;
601 pid = get_pid(as->pid); 599 pid = get_pid(as->pid);
602 cred = get_cred(as->cred); 600 cred = get_cred(as->cred);
603 } 601 }
@@ -615,7 +613,7 @@ static void async_completed(struct urb *urb)
615 spin_unlock_irqrestore(&ps->lock, flags); 613 spin_unlock_irqrestore(&ps->lock, flags);
616 614
617 if (signr) { 615 if (signr) {
618 kill_pid_info_as_cred(sinfo.si_signo, &sinfo, pid, cred); 616 kill_pid_usb_asyncio(signr, errno, addr, pid, cred);
619 put_pid(pid); 617 put_pid(pid);
620 put_cred(cred); 618 put_cred(cred);
621 } 619 }
@@ -1427,7 +1425,7 @@ find_memory_area(struct usb_dev_state *ps, const struct usbdevfs_urb *uurb)
1427 1425
1428static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurb, 1426static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurb,
1429 struct usbdevfs_iso_packet_desc __user *iso_frame_desc, 1427 struct usbdevfs_iso_packet_desc __user *iso_frame_desc,
1430 void __user *arg) 1428 void __user *arg, sigval_t userurb_sigval)
1431{ 1429{
1432 struct usbdevfs_iso_packet_desc *isopkt = NULL; 1430 struct usbdevfs_iso_packet_desc *isopkt = NULL;
1433 struct usb_host_endpoint *ep; 1431 struct usb_host_endpoint *ep;
@@ -1727,6 +1725,7 @@ static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurb
1727 isopkt = NULL; 1725 isopkt = NULL;
1728 as->ps = ps; 1726 as->ps = ps;
1729 as->userurb = arg; 1727 as->userurb = arg;
1728 as->userurb_sigval = userurb_sigval;
1730 if (as->usbm) { 1729 if (as->usbm) {
1731 unsigned long uurb_start = (unsigned long)uurb->buffer; 1730 unsigned long uurb_start = (unsigned long)uurb->buffer;
1732 1731
@@ -1801,13 +1800,17 @@ static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurb
1801static int proc_submiturb(struct usb_dev_state *ps, void __user *arg) 1800static int proc_submiturb(struct usb_dev_state *ps, void __user *arg)
1802{ 1801{
1803 struct usbdevfs_urb uurb; 1802 struct usbdevfs_urb uurb;
1803 sigval_t userurb_sigval;
1804 1804
1805 if (copy_from_user(&uurb, arg, sizeof(uurb))) 1805 if (copy_from_user(&uurb, arg, sizeof(uurb)))
1806 return -EFAULT; 1806 return -EFAULT;
1807 1807
1808 memset(&userurb_sigval, 0, sizeof(userurb_sigval));
1809 userurb_sigval.sival_ptr = arg;
1810
1808 return proc_do_submiturb(ps, &uurb, 1811 return proc_do_submiturb(ps, &uurb,
1809 (((struct usbdevfs_urb __user *)arg)->iso_frame_desc), 1812 (((struct usbdevfs_urb __user *)arg)->iso_frame_desc),
1810 arg); 1813 arg, userurb_sigval);
1811} 1814}
1812 1815
1813static int proc_unlinkurb(struct usb_dev_state *ps, void __user *arg) 1816static int proc_unlinkurb(struct usb_dev_state *ps, void __user *arg)
@@ -1977,7 +1980,7 @@ static int proc_disconnectsignal_compat(struct usb_dev_state *ps, void __user *a
1977 if (copy_from_user(&ds, arg, sizeof(ds))) 1980 if (copy_from_user(&ds, arg, sizeof(ds)))
1978 return -EFAULT; 1981 return -EFAULT;
1979 ps->discsignr = ds.signr; 1982 ps->discsignr = ds.signr;
1980 ps->disccontext = compat_ptr(ds.context); 1983 ps->disccontext.sival_int = ds.context;
1981 return 0; 1984 return 0;
1982} 1985}
1983 1986
@@ -2005,13 +2008,17 @@ static int get_urb32(struct usbdevfs_urb *kurb,
2005static int proc_submiturb_compat(struct usb_dev_state *ps, void __user *arg) 2008static int proc_submiturb_compat(struct usb_dev_state *ps, void __user *arg)
2006{ 2009{
2007 struct usbdevfs_urb uurb; 2010 struct usbdevfs_urb uurb;
2011 sigval_t userurb_sigval;
2008 2012
2009 if (get_urb32(&uurb, (struct usbdevfs_urb32 __user *)arg)) 2013 if (get_urb32(&uurb, (struct usbdevfs_urb32 __user *)arg))
2010 return -EFAULT; 2014 return -EFAULT;
2011 2015
2016 memset(&userurb_sigval, 0, sizeof(userurb_sigval));
2017 userurb_sigval.sival_int = ptr_to_compat(arg);
2018
2012 return proc_do_submiturb(ps, &uurb, 2019 return proc_do_submiturb(ps, &uurb,
2013 ((struct usbdevfs_urb32 __user *)arg)->iso_frame_desc, 2020 ((struct usbdevfs_urb32 __user *)arg)->iso_frame_desc,
2014 arg); 2021 arg, userurb_sigval);
2015} 2022}
2016 2023
2017static int processcompl_compat(struct async *as, void __user * __user *arg) 2024static int processcompl_compat(struct async *as, void __user * __user *arg)
@@ -2092,7 +2099,7 @@ static int proc_disconnectsignal(struct usb_dev_state *ps, void __user *arg)
2092 if (copy_from_user(&ds, arg, sizeof(ds))) 2099 if (copy_from_user(&ds, arg, sizeof(ds)))
2093 return -EFAULT; 2100 return -EFAULT;
2094 ps->discsignr = ds.signr; 2101 ps->discsignr = ds.signr;
2095 ps->disccontext = ds.context; 2102 ps->disccontext.sival_ptr = ds.context;
2096 return 0; 2103 return 0;
2097} 2104}
2098 2105
@@ -2614,22 +2621,15 @@ const struct file_operations usbdev_file_operations = {
2614static void usbdev_remove(struct usb_device *udev) 2621static void usbdev_remove(struct usb_device *udev)
2615{ 2622{
2616 struct usb_dev_state *ps; 2623 struct usb_dev_state *ps;
2617 struct kernel_siginfo sinfo;
2618 2624
2619 while (!list_empty(&udev->filelist)) { 2625 while (!list_empty(&udev->filelist)) {
2620 ps = list_entry(udev->filelist.next, struct usb_dev_state, list); 2626 ps = list_entry(udev->filelist.next, struct usb_dev_state, list);
2621 destroy_all_async(ps); 2627 destroy_all_async(ps);
2622 wake_up_all(&ps->wait); 2628 wake_up_all(&ps->wait);
2623 list_del_init(&ps->list); 2629 list_del_init(&ps->list);
2624 if (ps->discsignr) { 2630 if (ps->discsignr)
2625 clear_siginfo(&sinfo); 2631 kill_pid_usb_asyncio(ps->discsignr, EPIPE, ps->disccontext,
2626 sinfo.si_signo = ps->discsignr; 2632 ps->disc_pid, ps->cred);
2627 sinfo.si_errno = EPIPE;
2628 sinfo.si_code = SI_ASYNCIO;
2629 sinfo.si_addr = ps->disccontext;
2630 kill_pid_info_as_cred(ps->discsignr, &sinfo,
2631 ps->disc_pid, ps->cred);
2632 }
2633 } 2633 }
2634} 2634}
2635 2635
diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
index 93f7082daf52..ae6bae2ecb5d 100644
--- a/fs/cifs/connect.c
+++ b/fs/cifs/connect.c
@@ -2631,7 +2631,7 @@ cifs_put_tcp_session(struct TCP_Server_Info *server, int from_reconnect)
2631 2631
2632 task = xchg(&server->tsk, NULL); 2632 task = xchg(&server->tsk, NULL);
2633 if (task) 2633 if (task)
2634 force_sig(SIGKILL, task); 2634 send_sig(SIGKILL, task, 1);
2635} 2635}
2636 2636
2637static struct TCP_Server_Info * 2637static struct TCP_Server_Info *
diff --git a/fs/exec.c b/fs/exec.c
index 89a500bb897a..c71cbfe6826a 100644
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -1663,7 +1663,7 @@ int search_binary_handler(struct linux_binprm *bprm)
1663 if (retval < 0 && !bprm->mm) { 1663 if (retval < 0 && !bprm->mm) {
1664 /* we got to flush_old_exec() and failed after it */ 1664 /* we got to flush_old_exec() and failed after it */
1665 read_unlock(&binfmt_lock); 1665 read_unlock(&binfmt_lock);
1666 force_sigsegv(SIGSEGV, current); 1666 force_sigsegv(SIGSEGV);
1667 return retval; 1667 return retval;
1668 } 1668 }
1669 if (retval != -ENOEXEC || !bprm->file) { 1669 if (retval != -ENOEXEC || !bprm->file) {
diff --git a/include/linux/ptrace.h b/include/linux/ptrace.h
index d5084ebd9f03..2a9df80ea887 100644
--- a/include/linux/ptrace.h
+++ b/include/linux/ptrace.h
@@ -355,7 +355,7 @@ static inline void user_single_step_report(struct pt_regs *regs)
355 info.si_code = SI_USER; 355 info.si_code = SI_USER;
356 info.si_pid = 0; 356 info.si_pid = 0;
357 info.si_uid = 0; 357 info.si_uid = 0;
358 force_sig_info(info.si_signo, &info, current); 358 force_sig_info(&info);
359} 359}
360#endif 360#endif
361 361
diff --git a/include/linux/sched/signal.h b/include/linux/sched/signal.h
index 38a0f0785323..532458698bde 100644
--- a/include/linux/sched/signal.h
+++ b/include/linux/sched/signal.h
@@ -307,16 +307,19 @@ static inline void kernel_signal_stop(void)
307# define ___ARCH_SI_IA64(_a1, _a2, _a3) 307# define ___ARCH_SI_IA64(_a1, _a2, _a3)
308#endif 308#endif
309 309
310int force_sig_fault(int sig, int code, void __user *addr 310int force_sig_fault_to_task(int sig, int code, void __user *addr
311 ___ARCH_SI_TRAPNO(int trapno) 311 ___ARCH_SI_TRAPNO(int trapno)
312 ___ARCH_SI_IA64(int imm, unsigned int flags, unsigned long isr) 312 ___ARCH_SI_IA64(int imm, unsigned int flags, unsigned long isr)
313 , struct task_struct *t); 313 , struct task_struct *t);
314int force_sig_fault(int sig, int code, void __user *addr
315 ___ARCH_SI_TRAPNO(int trapno)
316 ___ARCH_SI_IA64(int imm, unsigned int flags, unsigned long isr));
314int send_sig_fault(int sig, int code, void __user *addr 317int send_sig_fault(int sig, int code, void __user *addr
315 ___ARCH_SI_TRAPNO(int trapno) 318 ___ARCH_SI_TRAPNO(int trapno)
316 ___ARCH_SI_IA64(int imm, unsigned int flags, unsigned long isr) 319 ___ARCH_SI_IA64(int imm, unsigned int flags, unsigned long isr)
317 , struct task_struct *t); 320 , struct task_struct *t);
318 321
319int force_sig_mceerr(int code, void __user *, short, struct task_struct *); 322int force_sig_mceerr(int code, void __user *, short);
320int send_sig_mceerr(int code, void __user *, short, struct task_struct *); 323int send_sig_mceerr(int code, void __user *, short, struct task_struct *);
321 324
322int force_sig_bnderr(void __user *addr, void __user *lower, void __user *upper); 325int force_sig_bnderr(void __user *addr, void __user *lower, void __user *upper);
@@ -325,17 +328,17 @@ int force_sig_pkuerr(void __user *addr, u32 pkey);
325int force_sig_ptrace_errno_trap(int errno, void __user *addr); 328int force_sig_ptrace_errno_trap(int errno, void __user *addr);
326 329
327extern int send_sig_info(int, struct kernel_siginfo *, struct task_struct *); 330extern int send_sig_info(int, struct kernel_siginfo *, struct task_struct *);
328extern void force_sigsegv(int sig, struct task_struct *p); 331extern void force_sigsegv(int sig);
329extern int force_sig_info(int, struct kernel_siginfo *, struct task_struct *); 332extern int force_sig_info(struct kernel_siginfo *);
330extern int __kill_pgrp_info(int sig, struct kernel_siginfo *info, struct pid *pgrp); 333extern int __kill_pgrp_info(int sig, struct kernel_siginfo *info, struct pid *pgrp);
331extern int kill_pid_info(int sig, struct kernel_siginfo *info, struct pid *pid); 334extern int kill_pid_info(int sig, struct kernel_siginfo *info, struct pid *pid);
332extern int kill_pid_info_as_cred(int, struct kernel_siginfo *, struct pid *, 335extern int kill_pid_usb_asyncio(int sig, int errno, sigval_t addr, struct pid *,
333 const struct cred *); 336 const struct cred *);
334extern int kill_pgrp(struct pid *pid, int sig, int priv); 337extern int kill_pgrp(struct pid *pid, int sig, int priv);
335extern int kill_pid(struct pid *pid, int sig, int priv); 338extern int kill_pid(struct pid *pid, int sig, int priv);
336extern __must_check bool do_notify_parent(struct task_struct *, int); 339extern __must_check bool do_notify_parent(struct task_struct *, int);
337extern void __wake_up_parent(struct task_struct *p, struct task_struct *parent); 340extern void __wake_up_parent(struct task_struct *p, struct task_struct *parent);
338extern void force_sig(int, struct task_struct *); 341extern void force_sig(int);
339extern int send_sig(int, struct task_struct *, int); 342extern int send_sig(int, struct task_struct *, int);
340extern int zap_other_threads(struct task_struct *p); 343extern int zap_other_threads(struct task_struct *p);
341extern struct sigqueue *sigqueue_alloc(void); 344extern struct sigqueue *sigqueue_alloc(void);
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h
index 2bcef4c70183..bc4bbbb9ed9a 100644
--- a/include/linux/syscalls.h
+++ b/include/linux/syscalls.h
@@ -264,7 +264,7 @@ static inline void addr_limit_user_check(void)
264 264
265 if (CHECK_DATA_CORRUPTION(!segment_eq(get_fs(), USER_DS), 265 if (CHECK_DATA_CORRUPTION(!segment_eq(get_fs(), USER_DS),
266 "Invalid address limit on user-mode return")) 266 "Invalid address limit on user-mode return"))
267 force_sig(SIGKILL, current); 267 force_sig(SIGKILL);
268 268
269#ifdef TIF_FSCHECK 269#ifdef TIF_FSCHECK
270 clear_thread_flag(TIF_FSCHECK); 270 clear_thread_flag(TIF_FSCHECK);
diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c
index 97c367f0a9aa..84fa00497c49 100644
--- a/kernel/events/uprobes.c
+++ b/kernel/events/uprobes.c
@@ -2112,7 +2112,7 @@ static void handle_trampoline(struct pt_regs *regs)
2112 2112
2113 sigill: 2113 sigill:
2114 uprobe_warn(current, "handle uretprobe, sending SIGILL."); 2114 uprobe_warn(current, "handle uretprobe, sending SIGILL.");
2115 force_sig(SIGILL, current); 2115 force_sig(SIGILL);
2116 2116
2117} 2117}
2118 2118
@@ -2228,7 +2228,7 @@ static void handle_singlestep(struct uprobe_task *utask, struct pt_regs *regs)
2228 2228
2229 if (unlikely(err)) { 2229 if (unlikely(err)) {
2230 uprobe_warn(current, "execute the probed insn, sending SIGILL."); 2230 uprobe_warn(current, "execute the probed insn, sending SIGILL.");
2231 force_sig(SIGILL, current); 2231 force_sig(SIGILL);
2232 } 2232 }
2233} 2233}
2234 2234
diff --git a/kernel/pid_namespace.c b/kernel/pid_namespace.c
index f54bc7cb6c2d..6d726cef241c 100644
--- a/kernel/pid_namespace.c
+++ b/kernel/pid_namespace.c
@@ -326,7 +326,7 @@ int reboot_pid_ns(struct pid_namespace *pid_ns, int cmd)
326 } 326 }
327 327
328 read_lock(&tasklist_lock); 328 read_lock(&tasklist_lock);
329 force_sig(SIGKILL, pid_ns->child_reaper); 329 send_sig(SIGKILL, pid_ns->child_reaper, 1);
330 read_unlock(&tasklist_lock); 330 read_unlock(&tasklist_lock);
331 331
332 do_exit(0); 332 do_exit(0);
diff --git a/kernel/rseq.c b/kernel/rseq.c
index 9424ee90589e..27c48eb7de40 100644
--- a/kernel/rseq.c
+++ b/kernel/rseq.c
@@ -277,7 +277,7 @@ void __rseq_handle_notify_resume(struct ksignal *ksig, struct pt_regs *regs)
277 277
278error: 278error:
279 sig = ksig ? ksig->sig : 0; 279 sig = ksig ? ksig->sig : 0;
280 force_sigsegv(sig, t); 280 force_sigsegv(sig);
281} 281}
282 282
283#ifdef CONFIG_DEBUG_RSEQ 283#ifdef CONFIG_DEBUG_RSEQ
@@ -296,7 +296,7 @@ void rseq_syscall(struct pt_regs *regs)
296 return; 296 return;
297 if (!access_ok(t->rseq, sizeof(*t->rseq)) || 297 if (!access_ok(t->rseq, sizeof(*t->rseq)) ||
298 rseq_get_rseq_cs(t, &rseq_cs) || in_rseq_cs(ip, &rseq_cs)) 298 rseq_get_rseq_cs(t, &rseq_cs) || in_rseq_cs(ip, &rseq_cs))
299 force_sig(SIGSEGV, t); 299 force_sig(SIGSEGV);
300} 300}
301 301
302#endif 302#endif
diff --git a/kernel/seccomp.c b/kernel/seccomp.c
index 811b4a86cdf6..dba52a7db5e8 100644
--- a/kernel/seccomp.c
+++ b/kernel/seccomp.c
@@ -609,7 +609,7 @@ static void seccomp_send_sigsys(int syscall, int reason)
609{ 609{
610 struct kernel_siginfo info; 610 struct kernel_siginfo info;
611 seccomp_init_siginfo(&info, syscall, reason); 611 seccomp_init_siginfo(&info, syscall, reason);
612 force_sig_info(SIGSYS, &info, current); 612 force_sig_info(&info);
613} 613}
614#endif /* CONFIG_SECCOMP_FILTER */ 614#endif /* CONFIG_SECCOMP_FILTER */
615 615
diff --git a/kernel/signal.c b/kernel/signal.c
index 35e97f4073c2..91cb8ca41954 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -1057,29 +1057,8 @@ static inline bool legacy_queue(struct sigpending *signals, int sig)
1057 return (sig < SIGRTMIN) && sigismember(&signals->signal, sig); 1057 return (sig < SIGRTMIN) && sigismember(&signals->signal, sig);
1058} 1058}
1059 1059
1060#ifdef CONFIG_USER_NS
1061static inline void userns_fixup_signal_uid(struct kernel_siginfo *info, struct task_struct *t)
1062{
1063 if (current_user_ns() == task_cred_xxx(t, user_ns))
1064 return;
1065
1066 if (SI_FROMKERNEL(info))
1067 return;
1068
1069 rcu_read_lock();
1070 info->si_uid = from_kuid_munged(task_cred_xxx(t, user_ns),
1071 make_kuid(current_user_ns(), info->si_uid));
1072 rcu_read_unlock();
1073}
1074#else
1075static inline void userns_fixup_signal_uid(struct kernel_siginfo *info, struct task_struct *t)
1076{
1077 return;
1078}
1079#endif
1080
1081static int __send_signal(int sig, struct kernel_siginfo *info, struct task_struct *t, 1060static int __send_signal(int sig, struct kernel_siginfo *info, struct task_struct *t,
1082 enum pid_type type, int from_ancestor_ns) 1061 enum pid_type type, bool force)
1083{ 1062{
1084 struct sigpending *pending; 1063 struct sigpending *pending;
1085 struct sigqueue *q; 1064 struct sigqueue *q;
@@ -1089,8 +1068,7 @@ static int __send_signal(int sig, struct kernel_siginfo *info, struct task_struc
1089 assert_spin_locked(&t->sighand->siglock); 1068 assert_spin_locked(&t->sighand->siglock);
1090 1069
1091 result = TRACE_SIGNAL_IGNORED; 1070 result = TRACE_SIGNAL_IGNORED;
1092 if (!prepare_signal(sig, t, 1071 if (!prepare_signal(sig, t, force))
1093 from_ancestor_ns || (info == SEND_SIG_PRIV)))
1094 goto ret; 1072 goto ret;
1095 1073
1096 pending = (type != PIDTYPE_PID) ? &t->signal->shared_pending : &t->pending; 1074 pending = (type != PIDTYPE_PID) ? &t->signal->shared_pending : &t->pending;
@@ -1135,7 +1113,11 @@ static int __send_signal(int sig, struct kernel_siginfo *info, struct task_struc
1135 q->info.si_code = SI_USER; 1113 q->info.si_code = SI_USER;
1136 q->info.si_pid = task_tgid_nr_ns(current, 1114 q->info.si_pid = task_tgid_nr_ns(current,
1137 task_active_pid_ns(t)); 1115 task_active_pid_ns(t));
1138 q->info.si_uid = from_kuid_munged(current_user_ns(), current_uid()); 1116 rcu_read_lock();
1117 q->info.si_uid =
1118 from_kuid_munged(task_cred_xxx(t, user_ns),
1119 current_uid());
1120 rcu_read_unlock();
1139 break; 1121 break;
1140 case (unsigned long) SEND_SIG_PRIV: 1122 case (unsigned long) SEND_SIG_PRIV:
1141 clear_siginfo(&q->info); 1123 clear_siginfo(&q->info);
@@ -1147,30 +1129,24 @@ static int __send_signal(int sig, struct kernel_siginfo *info, struct task_struc
1147 break; 1129 break;
1148 default: 1130 default:
1149 copy_siginfo(&q->info, info); 1131 copy_siginfo(&q->info, info);
1150 if (from_ancestor_ns)
1151 q->info.si_pid = 0;
1152 break; 1132 break;
1153 } 1133 }
1154 1134 } else if (!is_si_special(info) &&
1155 userns_fixup_signal_uid(&q->info, t); 1135 sig >= SIGRTMIN && info->si_code != SI_USER) {
1156 1136 /*
1157 } else if (!is_si_special(info)) { 1137 * Queue overflow, abort. We may abort if the
1158 if (sig >= SIGRTMIN && info->si_code != SI_USER) { 1138 * signal was rt and sent by user using something
1159 /* 1139 * other than kill().
1160 * Queue overflow, abort. We may abort if the 1140 */
1161 * signal was rt and sent by user using something 1141 result = TRACE_SIGNAL_OVERFLOW_FAIL;
1162 * other than kill(). 1142 ret = -EAGAIN;
1163 */ 1143 goto ret;
1164 result = TRACE_SIGNAL_OVERFLOW_FAIL; 1144 } else {
1165 ret = -EAGAIN; 1145 /*
1166 goto ret; 1146 * This is a silent loss of information. We still
1167 } else { 1147 * send the signal, but the *info bits are lost.
1168 /* 1148 */
1169 * This is a silent loss of information. We still 1149 result = TRACE_SIGNAL_LOSE_INFO;
1170 * send the signal, but the *info bits are lost.
1171 */
1172 result = TRACE_SIGNAL_LOSE_INFO;
1173 }
1174 } 1150 }
1175 1151
1176out_set: 1152out_set:
@@ -1197,17 +1173,62 @@ ret:
1197 return ret; 1173 return ret;
1198} 1174}
1199 1175
1176static inline bool has_si_pid_and_uid(struct kernel_siginfo *info)
1177{
1178 bool ret = false;
1179 switch (siginfo_layout(info->si_signo, info->si_code)) {
1180 case SIL_KILL:
1181 case SIL_CHLD:
1182 case SIL_RT:
1183 ret = true;
1184 break;
1185 case SIL_TIMER:
1186 case SIL_POLL:
1187 case SIL_FAULT:
1188 case SIL_FAULT_MCEERR:
1189 case SIL_FAULT_BNDERR:
1190 case SIL_FAULT_PKUERR:
1191 case SIL_SYS:
1192 ret = false;
1193 break;
1194 }
1195 return ret;
1196}
1197
1200static int send_signal(int sig, struct kernel_siginfo *info, struct task_struct *t, 1198static int send_signal(int sig, struct kernel_siginfo *info, struct task_struct *t,
1201 enum pid_type type) 1199 enum pid_type type)
1202{ 1200{
1203 int from_ancestor_ns = 0; 1201 /* Should SIGKILL or SIGSTOP be received by a pid namespace init? */
1202 bool force = false;
1204 1203
1205#ifdef CONFIG_PID_NS 1204 if (info == SEND_SIG_NOINFO) {
1206 from_ancestor_ns = si_fromuser(info) && 1205 /* Force if sent from an ancestor pid namespace */
1207 !task_pid_nr_ns(current, task_active_pid_ns(t)); 1206 force = !task_pid_nr_ns(current, task_active_pid_ns(t));
1208#endif 1207 } else if (info == SEND_SIG_PRIV) {
1208 /* Don't ignore kernel generated signals */
1209 force = true;
1210 } else if (has_si_pid_and_uid(info)) {
1211 /* SIGKILL and SIGSTOP is special or has ids */
1212 struct user_namespace *t_user_ns;
1213
1214 rcu_read_lock();
1215 t_user_ns = task_cred_xxx(t, user_ns);
1216 if (current_user_ns() != t_user_ns) {
1217 kuid_t uid = make_kuid(current_user_ns(), info->si_uid);
1218 info->si_uid = from_kuid_munged(t_user_ns, uid);
1219 }
1220 rcu_read_unlock();
1209 1221
1210 return __send_signal(sig, info, t, type, from_ancestor_ns); 1222 /* A kernel generated signal? */
1223 force = (info->si_code == SI_KERNEL);
1224
1225 /* From an ancestor pid namespace? */
1226 if (!task_pid_nr_ns(current, task_active_pid_ns(t))) {
1227 info->si_pid = 0;
1228 force = true;
1229 }
1230 }
1231 return __send_signal(sig, info, t, type, force);
1211} 1232}
1212 1233
1213static void print_fatal_signal(int signr) 1234static void print_fatal_signal(int signr)
@@ -1274,12 +1295,13 @@ int do_send_sig_info(int sig, struct kernel_siginfo *info, struct task_struct *p
1274 * We don't want to have recursive SIGSEGV's etc, for example, 1295 * We don't want to have recursive SIGSEGV's etc, for example,
1275 * that is why we also clear SIGNAL_UNKILLABLE. 1296 * that is why we also clear SIGNAL_UNKILLABLE.
1276 */ 1297 */
1277int 1298static int
1278force_sig_info(int sig, struct kernel_siginfo *info, struct task_struct *t) 1299force_sig_info_to_task(struct kernel_siginfo *info, struct task_struct *t)
1279{ 1300{
1280 unsigned long int flags; 1301 unsigned long int flags;
1281 int ret, blocked, ignored; 1302 int ret, blocked, ignored;
1282 struct k_sigaction *action; 1303 struct k_sigaction *action;
1304 int sig = info->si_signo;
1283 1305
1284 spin_lock_irqsave(&t->sighand->siglock, flags); 1306 spin_lock_irqsave(&t->sighand->siglock, flags);
1285 action = &t->sighand->action[sig-1]; 1307 action = &t->sighand->action[sig-1];
@@ -1304,6 +1326,11 @@ force_sig_info(int sig, struct kernel_siginfo *info, struct task_struct *t)
1304 return ret; 1326 return ret;
1305} 1327}
1306 1328
1329int force_sig_info(struct kernel_siginfo *info)
1330{
1331 return force_sig_info_to_task(info, current);
1332}
1333
1307/* 1334/*
1308 * Nuke all other threads in the group. 1335 * Nuke all other threads in the group.
1309 */ 1336 */
@@ -1440,13 +1467,44 @@ static inline bool kill_as_cred_perm(const struct cred *cred,
1440 uid_eq(cred->uid, pcred->uid); 1467 uid_eq(cred->uid, pcred->uid);
1441} 1468}
1442 1469
1443/* like kill_pid_info(), but doesn't use uid/euid of "current" */ 1470/*
1444int kill_pid_info_as_cred(int sig, struct kernel_siginfo *info, struct pid *pid, 1471 * The usb asyncio usage of siginfo is wrong. The glibc support
1445 const struct cred *cred) 1472 * for asyncio which uses SI_ASYNCIO assumes the layout is SIL_RT.
1473 * AKA after the generic fields:
1474 * kernel_pid_t si_pid;
1475 * kernel_uid32_t si_uid;
1476 * sigval_t si_value;
1477 *
1478 * Unfortunately when usb generates SI_ASYNCIO it assumes the layout
1479 * after the generic fields is:
1480 * void __user *si_addr;
1481 *
1482 * This is a practical problem when there is a 64bit big endian kernel
1483 * and a 32bit userspace. As the 32bit address will encoded in the low
1484 * 32bits of the pointer. Those low 32bits will be stored at higher
1485 * address than appear in a 32 bit pointer. So userspace will not
1486 * see the address it was expecting for it's completions.
1487 *
1488 * There is nothing in the encoding that can allow
1489 * copy_siginfo_to_user32 to detect this confusion of formats, so
1490 * handle this by requiring the caller of kill_pid_usb_asyncio to
1491 * notice when this situration takes place and to store the 32bit
1492 * pointer in sival_int, instead of sival_addr of the sigval_t addr
1493 * parameter.
1494 */
1495int kill_pid_usb_asyncio(int sig, int errno, sigval_t addr,
1496 struct pid *pid, const struct cred *cred)
1446{ 1497{
1447 int ret = -EINVAL; 1498 struct kernel_siginfo info;
1448 struct task_struct *p; 1499 struct task_struct *p;
1449 unsigned long flags; 1500 unsigned long flags;
1501 int ret = -EINVAL;
1502
1503 clear_siginfo(&info);
1504 info.si_signo = sig;
1505 info.si_errno = errno;
1506 info.si_code = SI_ASYNCIO;
1507 *((sigval_t *)&info.si_pid) = addr;
1450 1508
1451 if (!valid_signal(sig)) 1509 if (!valid_signal(sig))
1452 return ret; 1510 return ret;
@@ -1457,17 +1515,17 @@ int kill_pid_info_as_cred(int sig, struct kernel_siginfo *info, struct pid *pid,
1457 ret = -ESRCH; 1515 ret = -ESRCH;
1458 goto out_unlock; 1516 goto out_unlock;
1459 } 1517 }
1460 if (si_fromuser(info) && !kill_as_cred_perm(cred, p)) { 1518 if (!kill_as_cred_perm(cred, p)) {
1461 ret = -EPERM; 1519 ret = -EPERM;
1462 goto out_unlock; 1520 goto out_unlock;
1463 } 1521 }
1464 ret = security_task_kill(p, info, sig, cred); 1522 ret = security_task_kill(p, &info, sig, cred);
1465 if (ret) 1523 if (ret)
1466 goto out_unlock; 1524 goto out_unlock;
1467 1525
1468 if (sig) { 1526 if (sig) {
1469 if (lock_task_sighand(p, &flags)) { 1527 if (lock_task_sighand(p, &flags)) {
1470 ret = __send_signal(sig, info, p, PIDTYPE_TGID, 0); 1528 ret = __send_signal(sig, &info, p, PIDTYPE_TGID, false);
1471 unlock_task_sighand(p, &flags); 1529 unlock_task_sighand(p, &flags);
1472 } else 1530 } else
1473 ret = -ESRCH; 1531 ret = -ESRCH;
@@ -1476,7 +1534,7 @@ out_unlock:
1476 rcu_read_unlock(); 1534 rcu_read_unlock();
1477 return ret; 1535 return ret;
1478} 1536}
1479EXPORT_SYMBOL_GPL(kill_pid_info_as_cred); 1537EXPORT_SYMBOL_GPL(kill_pid_usb_asyncio);
1480 1538
1481/* 1539/*
1482 * kill_something_info() interprets pid in interesting ways just like kill(2). 1540 * kill_something_info() interprets pid in interesting ways just like kill(2).
@@ -1552,9 +1610,17 @@ send_sig(int sig, struct task_struct *p, int priv)
1552} 1610}
1553EXPORT_SYMBOL(send_sig); 1611EXPORT_SYMBOL(send_sig);
1554 1612
1555void force_sig(int sig, struct task_struct *p) 1613void force_sig(int sig)
1556{ 1614{
1557 force_sig_info(sig, SEND_SIG_PRIV, p); 1615 struct kernel_siginfo info;
1616
1617 clear_siginfo(&info);
1618 info.si_signo = sig;
1619 info.si_errno = 0;
1620 info.si_code = SI_KERNEL;
1621 info.si_pid = 0;
1622 info.si_uid = 0;
1623 force_sig_info(&info);
1558} 1624}
1559EXPORT_SYMBOL(force_sig); 1625EXPORT_SYMBOL(force_sig);
1560 1626
@@ -1564,18 +1630,20 @@ EXPORT_SYMBOL(force_sig);
1564 * the problem was already a SIGSEGV, we'll want to 1630 * the problem was already a SIGSEGV, we'll want to
1565 * make sure we don't even try to deliver the signal.. 1631 * make sure we don't even try to deliver the signal..
1566 */ 1632 */
1567void force_sigsegv(int sig, struct task_struct *p) 1633void force_sigsegv(int sig)
1568{ 1634{
1635 struct task_struct *p = current;
1636
1569 if (sig == SIGSEGV) { 1637 if (sig == SIGSEGV) {
1570 unsigned long flags; 1638 unsigned long flags;
1571 spin_lock_irqsave(&p->sighand->siglock, flags); 1639 spin_lock_irqsave(&p->sighand->siglock, flags);
1572 p->sighand->action[sig - 1].sa.sa_handler = SIG_DFL; 1640 p->sighand->action[sig - 1].sa.sa_handler = SIG_DFL;
1573 spin_unlock_irqrestore(&p->sighand->siglock, flags); 1641 spin_unlock_irqrestore(&p->sighand->siglock, flags);
1574 } 1642 }
1575 force_sig(SIGSEGV, p); 1643 force_sig(SIGSEGV);
1576} 1644}
1577 1645
1578int force_sig_fault(int sig, int code, void __user *addr 1646int force_sig_fault_to_task(int sig, int code, void __user *addr
1579 ___ARCH_SI_TRAPNO(int trapno) 1647 ___ARCH_SI_TRAPNO(int trapno)
1580 ___ARCH_SI_IA64(int imm, unsigned int flags, unsigned long isr) 1648 ___ARCH_SI_IA64(int imm, unsigned int flags, unsigned long isr)
1581 , struct task_struct *t) 1649 , struct task_struct *t)
@@ -1595,7 +1663,16 @@ int force_sig_fault(int sig, int code, void __user *addr
1595 info.si_flags = flags; 1663 info.si_flags = flags;
1596 info.si_isr = isr; 1664 info.si_isr = isr;
1597#endif 1665#endif
1598 return force_sig_info(info.si_signo, &info, t); 1666 return force_sig_info_to_task(&info, t);
1667}
1668
1669int force_sig_fault(int sig, int code, void __user *addr
1670 ___ARCH_SI_TRAPNO(int trapno)
1671 ___ARCH_SI_IA64(int imm, unsigned int flags, unsigned long isr))
1672{
1673 return force_sig_fault_to_task(sig, code, addr
1674 ___ARCH_SI_TRAPNO(trapno)
1675 ___ARCH_SI_IA64(imm, flags, isr), current);
1599} 1676}
1600 1677
1601int send_sig_fault(int sig, int code, void __user *addr 1678int send_sig_fault(int sig, int code, void __user *addr
@@ -1621,7 +1698,7 @@ int send_sig_fault(int sig, int code, void __user *addr
1621 return send_sig_info(info.si_signo, &info, t); 1698 return send_sig_info(info.si_signo, &info, t);
1622} 1699}
1623 1700
1624int force_sig_mceerr(int code, void __user *addr, short lsb, struct task_struct *t) 1701int force_sig_mceerr(int code, void __user *addr, short lsb)
1625{ 1702{
1626 struct kernel_siginfo info; 1703 struct kernel_siginfo info;
1627 1704
@@ -1632,7 +1709,7 @@ int force_sig_mceerr(int code, void __user *addr, short lsb, struct task_struct
1632 info.si_code = code; 1709 info.si_code = code;
1633 info.si_addr = addr; 1710 info.si_addr = addr;
1634 info.si_addr_lsb = lsb; 1711 info.si_addr_lsb = lsb;
1635 return force_sig_info(info.si_signo, &info, t); 1712 return force_sig_info(&info);
1636} 1713}
1637 1714
1638int send_sig_mceerr(int code, void __user *addr, short lsb, struct task_struct *t) 1715int send_sig_mceerr(int code, void __user *addr, short lsb, struct task_struct *t)
@@ -1661,7 +1738,7 @@ int force_sig_bnderr(void __user *addr, void __user *lower, void __user *upper)
1661 info.si_addr = addr; 1738 info.si_addr = addr;
1662 info.si_lower = lower; 1739 info.si_lower = lower;
1663 info.si_upper = upper; 1740 info.si_upper = upper;
1664 return force_sig_info(info.si_signo, &info, current); 1741 return force_sig_info(&info);
1665} 1742}
1666 1743
1667#ifdef SEGV_PKUERR 1744#ifdef SEGV_PKUERR
@@ -1675,7 +1752,7 @@ int force_sig_pkuerr(void __user *addr, u32 pkey)
1675 info.si_code = SEGV_PKUERR; 1752 info.si_code = SEGV_PKUERR;
1676 info.si_addr = addr; 1753 info.si_addr = addr;
1677 info.si_pkey = pkey; 1754 info.si_pkey = pkey;
1678 return force_sig_info(info.si_signo, &info, current); 1755 return force_sig_info(&info);
1679} 1756}
1680#endif 1757#endif
1681 1758
@@ -1691,7 +1768,7 @@ int force_sig_ptrace_errno_trap(int errno, void __user *addr)
1691 info.si_errno = errno; 1768 info.si_errno = errno;
1692 info.si_code = TRAP_HWBKPT; 1769 info.si_code = TRAP_HWBKPT;
1693 info.si_addr = addr; 1770 info.si_addr = addr;
1694 return force_sig_info(info.si_signo, &info, current); 1771 return force_sig_info(&info);
1695} 1772}
1696 1773
1697int kill_pgrp(struct pid *pid, int sig, int priv) 1774int kill_pgrp(struct pid *pid, int sig, int priv)
@@ -2676,7 +2753,7 @@ static void signal_delivered(struct ksignal *ksig, int stepping)
2676void signal_setup_done(int failed, struct ksignal *ksig, int stepping) 2753void signal_setup_done(int failed, struct ksignal *ksig, int stepping)
2677{ 2754{
2678 if (failed) 2755 if (failed)
2679 force_sigsegv(ksig->sig, current); 2756 force_sigsegv(ksig->sig);
2680 else 2757 else
2681 signal_delivered(ksig, stepping); 2758 signal_delivered(ksig, stepping);
2682} 2759}
@@ -4477,6 +4554,28 @@ static inline void siginfo_buildtime_checks(void)
4477 CHECK_OFFSET(si_syscall); 4554 CHECK_OFFSET(si_syscall);
4478 CHECK_OFFSET(si_arch); 4555 CHECK_OFFSET(si_arch);
4479#undef CHECK_OFFSET 4556#undef CHECK_OFFSET
4557
4558 /* usb asyncio */
4559 BUILD_BUG_ON(offsetof(struct siginfo, si_pid) !=
4560 offsetof(struct siginfo, si_addr));
4561 if (sizeof(int) == sizeof(void __user *)) {
4562 BUILD_BUG_ON(sizeof_field(struct siginfo, si_pid) !=
4563 sizeof(void __user *));
4564 } else {
4565 BUILD_BUG_ON((sizeof_field(struct siginfo, si_pid) +
4566 sizeof_field(struct siginfo, si_uid)) !=
4567 sizeof(void __user *));
4568 BUILD_BUG_ON(offsetofend(struct siginfo, si_pid) !=
4569 offsetof(struct siginfo, si_uid));
4570 }
4571#ifdef CONFIG_COMPAT
4572 BUILD_BUG_ON(offsetof(struct compat_siginfo, si_pid) !=
4573 offsetof(struct compat_siginfo, si_addr));
4574 BUILD_BUG_ON(sizeof_field(struct compat_siginfo, si_pid) !=
4575 sizeof(compat_uptr_t));
4576 BUILD_BUG_ON(sizeof_field(struct compat_siginfo, si_pid) !=
4577 sizeof_field(struct siginfo, si_pid));
4578#endif
4480} 4579}
4481 4580
4482void __init signals_init(void) 4581void __init signals_init(void)
diff --git a/mm/memory-failure.c b/mm/memory-failure.c
index d9cc6606f409..f045514d8d20 100644
--- a/mm/memory-failure.c
+++ b/mm/memory-failure.c
@@ -218,7 +218,7 @@ static int kill_proc(struct to_kill *tk, unsigned long pfn, int flags)
218 218
219 if ((flags & MF_ACTION_REQUIRED) && t->mm == current->mm) { 219 if ((flags & MF_ACTION_REQUIRED) && t->mm == current->mm) {
220 ret = force_sig_mceerr(BUS_MCEERR_AR, (void __user *)tk->addr, 220 ret = force_sig_mceerr(BUS_MCEERR_AR, (void __user *)tk->addr,
221 addr_lsb, current); 221 addr_lsb);
222 } else { 222 } else {
223 /* 223 /*
224 * Don't use force here, it's convenient if the signal 224 * Don't use force here, it's convenient if the signal
diff --git a/net/bpfilter/bpfilter_kern.c b/net/bpfilter/bpfilter_kern.c
index 7ee4fea93637..c0f0990f30b6 100644
--- a/net/bpfilter/bpfilter_kern.c
+++ b/net/bpfilter/bpfilter_kern.c
@@ -22,7 +22,7 @@ static void shutdown_umh(void)
22 22
23 tsk = get_pid_task(find_vpid(bpfilter_ops.info.pid), PIDTYPE_PID); 23 tsk = get_pid_task(find_vpid(bpfilter_ops.info.pid), PIDTYPE_PID);
24 if (tsk) { 24 if (tsk) {
25 force_sig(SIGKILL, tsk); 25 send_sig(SIGKILL, tsk, 1);
26 put_task_struct(tsk); 26 put_task_struct(tsk);
27 } 27 }
28} 28}
diff --git a/security/safesetid/lsm.c b/security/safesetid/lsm.c
index cecd38e2ac80..06d4259f9ab1 100644
--- a/security/safesetid/lsm.c
+++ b/security/safesetid/lsm.c
@@ -111,7 +111,7 @@ static int check_uid_transition(kuid_t parent, kuid_t child)
111 * that could arise from a missing whitelist entry preventing a 111 * that could arise from a missing whitelist entry preventing a
112 * privileged process from dropping to a lesser-privileged one. 112 * privileged process from dropping to a lesser-privileged one.
113 */ 113 */
114 force_sig(SIGKILL, current); 114 force_sig(SIGKILL);
115 return -EACCES; 115 return -EACCES;
116} 116}
117 117
@@ -203,7 +203,7 @@ static int safesetid_task_fix_setuid(struct cred *new,
203 break; 203 break;
204 default: 204 default:
205 pr_warn("Unknown setid state %d\n", flags); 205 pr_warn("Unknown setid state %d\n", flags);
206 force_sig(SIGKILL, current); 206 force_sig(SIGKILL);
207 return -EINVAL; 207 return -EINVAL;
208 } 208 }
209 return 0; 209 return 0;