summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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;