Merge branch 'siginfo-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebieder...
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 9 Jul 2019 04:48:15 +0000 (21:48 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 9 Jul 2019 04:48:15 +0000 (21:48 -0700)
Pull force_sig() argument change from Eric Biederman:
 "A source of error over the years has been that force_sig has taken a
  task parameter when it is only safe to use force_sig with the current
  task.

  The force_sig function is built for delivering synchronous signals
  such as SIGSEGV where the userspace application caused a synchronous
  fault (such as a page fault) and the kernel responded with a signal.

  Because the name force_sig does not make this clear, and because the
  force_sig takes a task parameter the function force_sig has been
  abused for sending other kinds of signals over the years. Slowly those
  have been fixed when the oopses have been tracked down.

  This set of changes fixes the remaining abusers of force_sig and
  carefully rips out the task parameter from force_sig and friends
  making this kind of error almost impossible in the future"

* 'siginfo-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace: (27 commits)
  signal/x86: Move tsk inside of CONFIG_MEMORY_FAILURE in do_sigbus
  signal: Remove the signal number and task parameters from force_sig_info
  signal: Factor force_sig_info_to_task out of force_sig_info
  signal: Generate the siginfo in force_sig
  signal: Move the computation of force into send_signal and correct it.
  signal: Properly set TRACE_SIGNAL_LOSE_INFO in __send_signal
  signal: Remove the task parameter from force_sig_fault
  signal: Use force_sig_fault_to_task for the two calls that don't deliver to current
  signal: Explicitly call force_sig_fault on current
  signal/unicore32: Remove tsk parameter from __do_user_fault
  signal/arm: Remove tsk parameter from __do_user_fault
  signal/arm: Remove tsk parameter from ptrace_break
  signal/nds32: Remove tsk parameter from send_sigtrap
  signal/riscv: Remove tsk parameter from do_trap
  signal/sh: Remove tsk parameter from force_sig_info_fault
  signal/um: Remove task parameter from send_sigtrap
  signal/x86: Remove task parameter from send_sigtrap
  signal: Remove task parameter from force_sig_mceerr
  signal: Remove task parameter from force_sig
  signal: Remove task parameter from force_sigsegv
  ...

143 files changed:
arch/alpha/kernel/signal.c
arch/alpha/kernel/traps.c
arch/alpha/mm/fault.c
arch/arc/kernel/process.c
arch/arc/kernel/signal.c
arch/arc/kernel/traps.c
arch/arc/mm/fault.c
arch/arm/include/asm/traps.h
arch/arm/kernel/ptrace.c
arch/arm/kernel/signal.c
arch/arm/kernel/traps.c
arch/arm/mm/alignment.c
arch/arm/mm/fault.c
arch/arm64/kernel/traps.c
arch/c6x/kernel/signal.c
arch/c6x/kernel/traps.c
arch/csky/abiv1/alignment.c
arch/csky/abiv2/fpu.c
arch/csky/kernel/signal.c
arch/csky/kernel/traps.c
arch/csky/mm/fault.c
arch/h8300/kernel/ptrace_h.c
arch/h8300/kernel/ptrace_s.c
arch/h8300/kernel/signal.c
arch/hexagon/kernel/signal.c
arch/hexagon/kernel/traps.c
arch/hexagon/mm/vm_fault.c
arch/ia64/kernel/brl_emu.c
arch/ia64/kernel/signal.c
arch/ia64/kernel/traps.c
arch/ia64/kernel/unaligned.c
arch/ia64/mm/fault.c
arch/m68k/kernel/signal.c
arch/m68k/kernel/traps.c
arch/m68k/mm/fault.c
arch/microblaze/kernel/exceptions.c
arch/microblaze/kernel/signal.c
arch/microblaze/mm/fault.c
arch/mips/kernel/branch.c
arch/mips/kernel/kprobes.c
arch/mips/kernel/signal.c
arch/mips/kernel/signal_n32.c
arch/mips/kernel/signal_o32.c
arch/mips/kernel/traps.c
arch/mips/kernel/unaligned.c
arch/mips/mm/fault.c
arch/mips/sgi-ip22/ip22-berr.c
arch/mips/sgi-ip22/ip28-berr.c
arch/mips/sgi-ip27/ip27-berr.c
arch/mips/sgi-ip32/ip32-berr.c
arch/nds32/kernel/fpu.c
arch/nds32/kernel/signal.c
arch/nds32/kernel/traps.c
arch/nds32/mm/fault.c
arch/nios2/kernel/signal.c
arch/nios2/kernel/traps.c
arch/openrisc/kernel/signal.c
arch/openrisc/kernel/traps.c
arch/openrisc/mm/fault.c
arch/parisc/kernel/ptrace.c
arch/parisc/kernel/signal.c
arch/parisc/kernel/traps.c
arch/parisc/kernel/unaligned.c
arch/parisc/math-emu/driver.c
arch/parisc/mm/fault.c
arch/powerpc/kernel/process.c
arch/powerpc/kernel/signal_32.c
arch/powerpc/kernel/signal_64.c
arch/powerpc/kernel/traps.c
arch/powerpc/mm/fault.c
arch/powerpc/platforms/cell/spufs/fault.c
arch/powerpc/platforms/cell/spufs/run.c
arch/riscv/include/asm/bug.h
arch/riscv/kernel/signal.c
arch/riscv/kernel/traps.c
arch/riscv/mm/fault.c
arch/s390/kernel/compat_signal.c
arch/s390/kernel/signal.c
arch/s390/kernel/traps.c
arch/s390/mm/fault.c
arch/sh/kernel/cpu/sh2a/fpu.c
arch/sh/kernel/cpu/sh4/fpu.c
arch/sh/kernel/cpu/sh5/fpu.c
arch/sh/kernel/hw_breakpoint.c
arch/sh/kernel/ptrace_64.c
arch/sh/kernel/signal_32.c
arch/sh/kernel/signal_64.c
arch/sh/kernel/traps.c
arch/sh/kernel/traps_32.c
arch/sh/kernel/traps_64.c
arch/sh/math-emu/math.c
arch/sh/mm/fault.c
arch/sparc/kernel/process_64.c
arch/sparc/kernel/signal32.c
arch/sparc/kernel/signal_32.c
arch/sparc/kernel/signal_64.c
arch/sparc/kernel/sys_sparc_32.c
arch/sparc/kernel/sys_sparc_64.c
arch/sparc/kernel/traps_32.c
arch/sparc/kernel/traps_64.c
arch/sparc/mm/fault_32.c
arch/sparc/mm/fault_64.c
arch/um/kernel/exec.c
arch/um/kernel/ptrace.c
arch/um/kernel/skas/mmu.c
arch/um/kernel/tlb.c
arch/um/kernel/trap.c
arch/unicore32/kernel/signal.c
arch/unicore32/kernel/traps.c
arch/unicore32/mm/fault.c
arch/x86/entry/vsyscall/vsyscall_64.c
arch/x86/include/asm/ptrace.h
arch/x86/kernel/cpu/mce/core.c
arch/x86/kernel/ptrace.c
arch/x86/kernel/signal.c
arch/x86/kernel/traps.c
arch/x86/kernel/umip.c
arch/x86/kernel/uprobes.c
arch/x86/kernel/vm86_32.c
arch/x86/mm/fault.c
arch/x86/mm/mpx.c
arch/x86/um/signal.c
arch/xtensa/kernel/signal.c
arch/xtensa/kernel/traps.c
arch/xtensa/mm/fault.c
drivers/block/drbd/drbd_int.h
drivers/block/drbd/drbd_main.c
drivers/block/drbd/drbd_nl.c
drivers/misc/lkdtm/bugs.c
drivers/usb/core/devio.c
fs/cifs/connect.c
fs/exec.c
include/linux/ptrace.h
include/linux/sched/signal.h
include/linux/syscalls.h
kernel/events/uprobes.c
kernel/pid_namespace.c
kernel/rseq.c
kernel/seccomp.c
kernel/signal.c
mm/memory-failure.c
net/bpfilter/bpfilter_kern.c
security/safesetid/lsm.c

index 33e904a05881797481c1d95b68e56332040bf809..a813020d2f1170b3daba65ccc270718d5ea24b84 100644 (file)
@@ -225,7 +225,7 @@ do_sigreturn(struct sigcontext __user *sc)
        return;
 
 give_sigsegv:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
 }
 
 asmlinkage void
@@ -253,7 +253,7 @@ do_rt_sigreturn(struct rt_sigframe __user *frame)
        return;
 
 give_sigsegv:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
 }
 
 
index bc9627698796ee474a1290dd9c199ff13b48a893..f6b9664ac5042d7eca61c9889c321648cf532761 100644 (file)
@@ -402,7 +402,7 @@ do_entDbg(struct pt_regs *regs)
 {
        die_if_kernel("Instruction fault", regs, 0, NULL);
 
-       force_sig_fault(SIGILL, ILL_ILLOPC, (void __user *)regs->pc, 0, current);
+       force_sig_fault(SIGILL, ILL_ILLOPC, (void __user *)regs->pc, 0);
 }
 
 
index 188fc9256baf16824431cb273f588daa219b2521..741e61ef9d3fe4d11b8349f42fc0e404b60cb0fa 100644 (file)
@@ -221,13 +221,13 @@ retry:
        up_read(&mm->mmap_sem);
        /* Send a sigbus, regardless of whether we were in kernel
           or user mode.  */
-       force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *) address, 0, current);
+       force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *) address, 0);
        if (!user_mode(regs))
                goto no_context;
        return;
 
  do_sigsegv:
-       force_sig_fault(SIGSEGV, si_code, (void __user *) address, 0, current);
+       force_sig_fault(SIGSEGV, si_code, (void __user *) address, 0);
        return;
 
 #ifdef CONFIG_ALPHA_LARGE_VMALLOC
index ff321f7df7165e71cd58e9f82d3a7c8863e70d2f..e1889ce3faf96d7305768631a0e2614f852205f5 100644 (file)
@@ -97,7 +97,7 @@ fault:
                 goto again;
 
 fail:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
        return ret;
 }
 
@@ -310,7 +310,7 @@ int elf_check_arch(const struct elf32_hdr *x)
        eflags = x->e_flags;
        if ((eflags & EF_ARC_OSABI_MSK) != EF_ARC_OSABI_CURRENT) {
                pr_err("ABI mismatch - you need newer toolchain\n");
-               force_sigsegv(SIGSEGV, current);
+               force_sigsegv(SIGSEGV);
                return 0;
        }
 
index b895f889602a81cffac58217e0bf27ceaf3f07a2..3d57ed0d8535098d958b03091ba59c271c98f126 100644 (file)
@@ -194,7 +194,7 @@ SYSCALL_DEFINE0(rt_sigreturn)
        return regs->r0;
 
 badframe:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
        return 0;
 }
 
index e9a5b259f405a17d080e89fa6063d60cff5c8e82..57235e5c0cea9ad91707b2f406d6f92a104ac5bd 100644 (file)
@@ -47,7 +47,7 @@ unhandled_exception(const char *str, struct pt_regs *regs,
 
                tsk->thread.fault_address = (__force unsigned int)addr;
 
-               force_sig_fault(signo, si_code, addr, tsk);
+               force_sig_fault(signo, si_code, addr);
 
        } else {
                /* If not due to copy_(to|from)_user, we are doomed */
index 8cca03480bb2504f9ac16cfd270f71d49cbf48c4..81e84426fe21681b5c174d7bb5f711e919b066a6 100644 (file)
@@ -196,7 +196,7 @@ bad_area:
        /* User mode accesses just cause a SIGSEGV */
        if (user_mode(regs)) {
                tsk->thread.fault_address = address;
-               force_sig_fault(SIGSEGV, si_code, (void __user *)address, tsk);
+               force_sig_fault(SIGSEGV, si_code, (void __user *)address);
                return;
        }
 
@@ -231,5 +231,5 @@ do_sigbus:
                goto no_context;
 
        tsk->thread.fault_address = address;
-       force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address, tsk);
+       force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address);
 }
index a00288d75ee6ad7349d7813a8691b77c2a1ca7ec..172b08ff3760d43bc46306b630a64646b65d5a72 100644 (file)
@@ -30,7 +30,7 @@ static inline int __in_irqentry_text(unsigned long ptr)
 
 extern void __init early_trap_init(void *);
 extern void dump_backtrace_entry(unsigned long where, unsigned long from, unsigned long frame);
-extern void ptrace_break(struct task_struct *tsk, struct pt_regs *regs);
+extern void ptrace_break(struct pt_regs *regs);
 
 extern void *vectors_page;
 
index afcb4d3b14dcd6cc139f0f937d366a2e027d6c18..324352787aeafc2a534e18bc81774ced5c8e9cde 100644 (file)
@@ -198,15 +198,15 @@ void ptrace_disable(struct task_struct *child)
 /*
  * Handle hitting a breakpoint.
  */
-void ptrace_break(struct task_struct *tsk, struct pt_regs *regs)
+void ptrace_break(struct pt_regs *regs)
 {
        force_sig_fault(SIGTRAP, TRAP_BRKPT,
-                       (void __user *)instruction_pointer(regs), tsk);
+                       (void __user *)instruction_pointer(regs));
 }
 
 static int break_trap(struct pt_regs *regs, unsigned int instr)
 {
-       ptrace_break(current, regs);
+       ptrace_break(regs);
        return 0;
 }
 
index 3ca71d679aecd04636396bafe27f8e3d3d785d58..09f6fdd419745c891b3c9ebaf853ac8ef2b76c7f 100644 (file)
@@ -247,7 +247,7 @@ asmlinkage int sys_sigreturn(struct pt_regs *regs)
        return regs->ARM_r0;
 
 badframe:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
        return 0;
 }
 
@@ -280,7 +280,7 @@ asmlinkage int sys_rt_sigreturn(struct pt_regs *regs)
        return regs->ARM_r0;
 
 badframe:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
        return 0;
 }
 
index b6d6b1a6f1566135c5c54ab176e673b5cba4ec77..c053abd1fb5393d853fd48aca47c3ec975b27eed 100644 (file)
@@ -369,7 +369,7 @@ void arm_notify_die(const char *str, struct pt_regs *regs,
                current->thread.error_code = err;
                current->thread.trap_no = trap;
 
-               force_sig_fault(signo, si_code, addr, current);
+               force_sig_fault(signo, si_code, addr);
        } else {
                die(str, regs, err);
        }
@@ -603,7 +603,7 @@ asmlinkage int arm_syscall(int no, struct pt_regs *regs)
 
        case NR(breakpoint): /* SWI BREAK_POINT */
                regs->ARM_pc -= thumb_mode(regs) ? 2 : 4;
-               ptrace_break(current, regs);
+               ptrace_break(regs);
                return regs->ARM_r0;
 
        /*
index 6067fa4de22b32b6bd699a11f43c891070bef2f8..8cdb78642e9316612be1deb340c4bf4dd0c45e1f 100644 (file)
@@ -945,7 +945,7 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
                goto fixup;
 
        if (ai_usermode & UM_SIGNAL) {
-               force_sig_fault(SIGBUS, BUS_ADRALN, (void __user *)addr, current);
+               force_sig_fault(SIGBUS, BUS_ADRALN, (void __user *)addr);
        } else {
                /*
                 * We're about to disable the alignment trap and return to
index ec83c8fca62da1cd60794763874219fa01c3ada9..0e417233dad7209255c370d3cee65ee336ec34ab 100644 (file)
@@ -154,10 +154,11 @@ __do_kernel_fault(struct mm_struct *mm, unsigned long addr, unsigned int fsr,
  * User mode accesses just cause a SIGSEGV
  */
 static void
-__do_user_fault(struct task_struct *tsk, unsigned long addr,
-               unsigned int fsr, unsigned int sig, int code,
-               struct pt_regs *regs)
+__do_user_fault(unsigned long addr, unsigned int fsr, unsigned int sig,
+               int code, struct pt_regs *regs)
 {
+       struct task_struct *tsk = current;
+
        if (addr > TASK_SIZE)
                harden_branch_predictor();
 
@@ -181,7 +182,7 @@ __do_user_fault(struct task_struct *tsk, unsigned long addr,
        tsk->thread.address = addr;
        tsk->thread.error_code = fsr;
        tsk->thread.trap_no = 14;
-       force_sig_fault(sig, code, (void __user *)addr, tsk);
+       force_sig_fault(sig, code, (void __user *)addr);
 }
 
 void 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)
         * have no context to handle this fault with.
         */
        if (user_mode(regs))
-               __do_user_fault(tsk, addr, fsr, SIGSEGV, SEGV_MAPERR, regs);
+               __do_user_fault(addr, fsr, SIGSEGV, SEGV_MAPERR, regs);
        else
                __do_kernel_fault(mm, addr, fsr, regs);
 }
@@ -390,7 +391,7 @@ retry:
                        SEGV_ACCERR : SEGV_MAPERR;
        }
 
-       __do_user_fault(tsk, addr, fsr, sig, code, regs);
+       __do_user_fault(addr, fsr, sig, code, regs);
        return 0;
 
 no_context:
index a835a1a53826e850fb9c4210c6e87f333d055050..678af745d881f159b451622cd2783ec86a581b32 100644 (file)
@@ -233,16 +233,16 @@ void arm64_force_sig_fault(int signo, int code, void __user *addr,
 {
        arm64_show_signal(signo, str);
        if (signo == SIGKILL)
-               force_sig(SIGKILL, current);
+               force_sig(SIGKILL);
        else
-               force_sig_fault(signo, code, addr, current);
+               force_sig_fault(signo, code, addr);
 }
 
 void arm64_force_sig_mceerr(int code, void __user *addr, short lsb,
                            const char *str)
 {
        arm64_show_signal(SIGBUS, str);
-       force_sig_mceerr(code, addr, lsb, current);
+       force_sig_mceerr(code, addr, lsb);
 }
 
 void arm64_force_sig_ptrace_errno_trap(int errno, void __user *addr,
index e72d9b6bc234248cc474ea699e386b07ebd28729..e456652facce5177b975ec466d4e743c086d600c 100644 (file)
@@ -90,7 +90,7 @@ asmlinkage int do_rt_sigreturn(struct pt_regs *regs)
        return regs->a4;
 
 badframe:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
        return 0;
 }
 
index c4785c9b67a28997ae84383d893563de0e337709..ec61034fdf56ccda29df1496f06b49d1f32490ea 100644 (file)
@@ -250,7 +250,7 @@ static void do_trap(struct exception_info *except_info, struct pt_regs *regs)
        die_if_kernel(except_info->kernel_str, regs, addr);
 
        force_sig_fault(except_info->signo, except_info->code,
-                       (void __user *)addr, current);
+                       (void __user *)addr);
 }
 
 /*
index d789be36eb4f092b992d77967dec5ad11ff7865d..27ef5b2c43ab79027e12ef396c8b217194644ee9 100644 (file)
@@ -283,7 +283,7 @@ bad_area:
                do_exit(SIGKILL);
        }
 
-       force_sig_fault(SIGBUS, BUS_ADRALN, (void __user *)addr, current);
+       force_sig_fault(SIGBUS, BUS_ADRALN, (void __user *)addr);
 }
 
 static struct ctl_table alignment_tbl[4] = {
index e7e11344005af0798cd0ba57324786f232120c67..86d187d4e5af1b9efba5be1ddffbd29aeabd0ca7 100644 (file)
@@ -124,7 +124,7 @@ void fpu_fpe(struct pt_regs *regs)
                        code = FPE_FLTRES;
        }
 
-       force_sig_fault(sig, code, (void __user *)regs->pc, current);
+       force_sig_fault(sig, code, (void __user *)regs->pc);
 }
 
 #define FMFVR_FPU_REGS(vrx, vry)       \
index d47a3381aad86f591ed21c2f2792b67504a912d4..9b1b7c039ddf9c33ecf569c55b055b34de384ee3 100644 (file)
@@ -66,7 +66,6 @@ SYSCALL_DEFINE0(rt_sigreturn)
 {
        struct pt_regs *regs = current_pt_regs();
        struct rt_sigframe __user *frame;
-       struct task_struct *task;
        sigset_t set;
 
        /* Always make any pending restarted system calls return -EINTR */
@@ -91,8 +90,7 @@ SYSCALL_DEFINE0(rt_sigreturn)
        return regs->a0;
 
 badframe:
-       task = current;
-       force_sig(SIGSEGV, task);
+       force_sig(SIGSEGV);
        return 0;
 }
 
index f487a9b996ae1e4e23b33d34db193dcbf2205279..2792e9601ac5f9515d4ade0592ba78dc93ee30a1 100644 (file)
@@ -106,7 +106,7 @@ void buserr(struct pt_regs *regs)
        pr_err("User mode Bus Error\n");
        show_regs(regs);
 
-       force_sig_fault(SIGSEGV, 0, (void __user *)regs->pc, current);
+       force_sig_fault(SIGSEGV, 0, (void __user *)regs->pc);
 }
 
 #define USR_BKPT 0x1464
index 18041f46ded11df26ad5dec41c4bc68363b3bafc..f76618b630f91f96cf891514f7c165221d72878b 100644 (file)
@@ -179,7 +179,7 @@ bad_area:
 bad_area_nosemaphore:
        /* User mode accesses just cause a SIGSEGV */
        if (user_mode(regs)) {
-               force_sig_fault(SIGSEGV, si_code, (void __user *)address, current);
+               force_sig_fault(SIGSEGV, si_code, (void __user *)address);
                return;
        }
 
@@ -212,5 +212,5 @@ do_sigbus:
        if (!user_mode(regs))
                goto no_context;
 
-       force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address, current);
+       force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address);
 }
index f5ff3b794c8512ce430812fd07b5c85752294d79..15db45a03b04560fc177e799db6d591c56501c5e 100644 (file)
@@ -250,7 +250,7 @@ asmlinkage void trace_trap(unsigned long bp)
 {
        if ((unsigned long)current->thread.breakinfo.addr == bp) {
                user_disable_single_step(current);
-               force_sig(SIGTRAP, current);
+               force_sig(SIGTRAP);
        } else
-               force_sig(SIGILL, current);
+               force_sig(SIGILL);
 }
index c0af930052c019135fef2d3f346ff4f1f13b5186..ee21f37b7ed4458da802a9b80fc7f2a95bb89b69 100644 (file)
@@ -40,5 +40,5 @@ void user_enable_single_step(struct task_struct *child)
 asmlinkage void trace_trap(unsigned long bp)
 {
        (void)bp;
-       force_sig(SIGTRAP, current);
+       force_sig(SIGTRAP);
 }
index e0f2b708e5d9dbb6dd92cc7ac59c1f0a24411c96..ef7489b7c4590ac344fee651a0ef427a9f931917 100644 (file)
@@ -126,7 +126,7 @@ asmlinkage int sys_rt_sigreturn(void)
        return er0;
 
 badframe:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
        return 0;
 }
 
index 5bc36db26475e90383dc46df00c6e9f6f598d861..d48864c48e5ac49cf6210a35b793e4cfc710fa3c 100644 (file)
@@ -252,6 +252,6 @@ asmlinkage int sys_rt_sigreturn(void)
        return regs->r00;
 
 badframe:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
        return 0;
 }
index a01da26dbfe1d0b513c0a2982ab65e22f2b268aa..69c623b14ddd2808485023c83badf73f0d4019dc 100644 (file)
@@ -239,7 +239,7 @@ int die_if_kernel(char *str, struct pt_regs *regs, long err)
 static void misaligned_instruction(struct pt_regs *regs)
 {
        die_if_kernel("Misaligned Instruction", regs, 0);
-       force_sig(SIGBUS, current);
+       force_sig(SIGBUS);
 }
 
 /*
@@ -250,19 +250,19 @@ static void misaligned_instruction(struct pt_regs *regs)
 static void misaligned_data_load(struct pt_regs *regs)
 {
        die_if_kernel("Misaligned Data Load", regs, 0);
-       force_sig(SIGBUS, current);
+       force_sig(SIGBUS);
 }
 
 static void misaligned_data_store(struct pt_regs *regs)
 {
        die_if_kernel("Misaligned Data Store", regs, 0);
-       force_sig(SIGBUS, current);
+       force_sig(SIGBUS);
 }
 
 static void illegal_instruction(struct pt_regs *regs)
 {
        die_if_kernel("Illegal Instruction", regs, 0);
-       force_sig(SIGILL, current);
+       force_sig(SIGILL);
 }
 
 /*
@@ -272,7 +272,7 @@ static void illegal_instruction(struct pt_regs *regs)
 static void precise_bus_error(struct pt_regs *regs)
 {
        die_if_kernel("Precise Bus Error", regs, 0);
-       force_sig(SIGBUS, current);
+       force_sig(SIGBUS);
 }
 
 /*
@@ -407,7 +407,7 @@ void do_trap0(struct pt_regs *regs)
                         * may want to use a different trap0 flavor.
                         */
                        force_sig_fault(SIGTRAP, TRAP_BRKPT,
-                                       (void __user *) pt_elr(regs), current);
+                                       (void __user *) pt_elr(regs));
                } else {
 #ifdef CONFIG_KGDB
                        kgdb_handle_exception(pt_cause(regs), SIGTRAP,
index b7a99aa5b0baf2c5a5b085e050b87d0e0786987e..b3bc71680ae448e0b5e7b7672740f51fefc603b1 100644 (file)
@@ -135,14 +135,14 @@ good_area:
                si_signo = SIGSEGV;
                si_code  = SEGV_ACCERR;
        }
-       force_sig_fault(si_signo, si_code, (void __user *)address, current);
+       force_sig_fault(si_signo, si_code, (void __user *)address);
        return;
 
 bad_area:
        up_read(&mm->mmap_sem);
 
        if (user_mode(regs)) {
-               force_sig_fault(SIGSEGV, si_code, (void __user *)address, current);
+               force_sig_fault(SIGSEGV, si_code, (void __user *)address);
                return;
        }
        /* Kernel-mode fault falls through */
index c0239bf77a09e695577bea749083a48921a1d463..782c481d70529ea8e656842ae31263d0ff024d06 100644 (file)
@@ -197,21 +197,21 @@ ia64_emulate_brl (struct pt_regs *regs, unsigned long ar_ec)
                 */
                printk(KERN_DEBUG "Woah! Unimplemented Instruction Address Trap!\n");
                force_sig_fault(SIGILL, ILL_BADIADDR, (void __user *)NULL,
-                               0, 0, 0, current);
+                               0, 0, 0);
        } else if (ia64_psr(regs)->tb) {
                /*
                 *  Branch Tracing is enabled.
                 *  Force a taken branch signal.
                 */
                force_sig_fault(SIGTRAP, TRAP_BRANCH, (void __user *)NULL,
-                               0, 0, 0, current);
+                               0, 0, 0);
        } else if (ia64_psr(regs)->ss) {
                /*
                 *  Single Step is enabled.
                 *  Force a trace signal.
                 */
                force_sig_fault(SIGTRAP, TRAP_TRACE, (void __user *)NULL,
-                               0, 0, 0, current);
+                               0, 0, 0);
        }
        return rv;
 }
index 6062fd14e34eb0312a310698d56c85283f453b3e..e5044aed9452007435e695645f051cd8c137b3a1 100644 (file)
@@ -152,7 +152,7 @@ ia64_rt_sigreturn (struct sigscratch *scr)
        return retval;
 
   give_sigsegv:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
        return retval;
 }
 
@@ -257,7 +257,7 @@ setup_frame(struct ksignal *ksig, sigset_t *set, struct sigscratch *scr)
                         */
                        check_sp = (new_sp - sizeof(*frame)) & -STACK_ALIGN;
                        if (!likely(on_sig_stack(check_sp))) {
-                               force_sigsegv(ksig->sig, current);
+                               force_sigsegv(ksig->sig);
                                return 1;
                        }
                }
@@ -265,7 +265,7 @@ setup_frame(struct ksignal *ksig, sigset_t *set, struct sigscratch *scr)
        frame = (void __user *) ((new_sp - sizeof(*frame)) & -STACK_ALIGN);
 
        if (!access_ok(frame, sizeof(*frame))) {
-               force_sigsegv(ksig->sig, current);
+               force_sigsegv(ksig->sig);
                return 1;
        }
 
@@ -282,7 +282,7 @@ setup_frame(struct ksignal *ksig, sigset_t *set, struct sigscratch *scr)
        err |= setup_sigcontext(&frame->sc, set, scr);
 
        if (unlikely(err)) {
-               force_sigsegv(ksig->sig, current);
+               force_sigsegv(ksig->sig);
                return 1;
        }
 
index 85d8616ac4f6e1ae32ea6964a79a7323b55e7389..e13cb905930fb754bdaf899ec6c950970377b733 100644 (file)
@@ -176,7 +176,7 @@ __kprobes ia64_bad_break (unsigned long break_num, struct pt_regs *regs)
        }
        force_sig_fault(sig, code,
                        (void __user *) (regs->cr_iip + ia64_psr(regs)->ri),
-                       break_num, 0 /* clear __ISR_VALID */, 0, current);
+                       break_num, 0 /* clear __ISR_VALID */, 0);
 }
 
 /*
@@ -353,7 +353,7 @@ handle_fpu_swa (int fp_fault, struct pt_regs *regs, unsigned long isr)
                        }
                        force_sig_fault(SIGFPE, si_code,
                                        (void __user *) (regs->cr_iip + ia64_psr(regs)->ri),
-                                       0, __ISR_VALID, isr, current);
+                                       0, __ISR_VALID, isr);
                }
        } else {
                if (exception == -1) {
@@ -373,7 +373,7 @@ handle_fpu_swa (int fp_fault, struct pt_regs *regs, unsigned long isr)
                        }
                        force_sig_fault(SIGFPE, si_code,
                                        (void __user *) (regs->cr_iip + ia64_psr(regs)->ri),
-                                       0, __ISR_VALID, isr, current);
+                                       0, __ISR_VALID, isr);
                }
        }
        return 0;
@@ -408,7 +408,7 @@ ia64_illegal_op_fault (unsigned long ec, long arg1, long arg2, long arg3,
 
        force_sig_fault(SIGILL, ILL_ILLOPC,
                        (void __user *) (regs.cr_iip + ia64_psr(&regs)->ri),
-                       0, 0, 0, current);
+                       0, 0, 0);
        return rv;
 }
 
@@ -483,7 +483,7 @@ ia64_fault (unsigned long vector, unsigned long isr, unsigned long ifa,
                                                        + ia64_psr(&regs)->ri);
                        }
                        force_sig_fault(sig, code, addr,
-                                       vector, __ISR_VALID, isr, current);
+                                       vector, __ISR_VALID, isr);
                        return;
                } else if (ia64_done_with_exception(&regs))
                        return;
@@ -493,7 +493,7 @@ ia64_fault (unsigned long vector, unsigned long isr, unsigned long ifa,
              case 31: /* Unsupported Data Reference */
                if (user_mode(&regs)) {
                        force_sig_fault(SIGILL, ILL_ILLOPN, (void __user *) iip,
-                                       vector, __ISR_VALID, isr, current);
+                                       vector, __ISR_VALID, isr);
                        return;
                }
                sprintf(buf, "Unsupported data reference");
@@ -542,7 +542,7 @@ ia64_fault (unsigned long vector, unsigned long isr, unsigned long ifa,
                                == NOTIFY_STOP)
                        return;
                force_sig_fault(SIGTRAP, si_code, (void __user *) ifa,
-                               0, __ISR_VALID, isr, current);
+                               0, __ISR_VALID, isr);
                return;
 
              case 32: /* fp fault */
@@ -550,7 +550,7 @@ ia64_fault (unsigned long vector, unsigned long isr, unsigned long ifa,
                result = handle_fpu_swa((vector == 32) ? 1 : 0, &regs, isr);
                if ((result < 0) || (current->thread.flags & IA64_THREAD_FPEMU_SIGFPE)) {
                        force_sig_fault(SIGFPE, FPE_FLTINV, (void __user *) iip,
-                                       0, __ISR_VALID, isr, current);
+                                       0, __ISR_VALID, isr);
                }
                return;
 
@@ -578,7 +578,7 @@ ia64_fault (unsigned long vector, unsigned long isr, unsigned long ifa,
                        if (user_mode(&regs)) {
                                force_sig_fault(SIGILL, ILL_BADIADDR,
                                                (void __user *) iip,
-                                               0, 0, 0, current);
+                                               0, 0, 0);
                                return;
                        }
                        sprintf(buf, "Unimplemented Instruction Address fault");
@@ -589,14 +589,14 @@ ia64_fault (unsigned long vector, unsigned long isr, unsigned long ifa,
                printk(KERN_ERR "Unexpected IA-32 exception (Trap 45)\n");
                printk(KERN_ERR "  iip - 0x%lx, ifa - 0x%lx, isr - 0x%lx\n",
                       iip, ifa, isr);
-               force_sig(SIGSEGV, current);
+               force_sig(SIGSEGV);
                return;
 
              case 46:
                printk(KERN_ERR "Unexpected IA-32 intercept trap (Trap 46)\n");
                printk(KERN_ERR "  iip - 0x%lx, ifa - 0x%lx, isr - 0x%lx, iim - 0x%lx\n",
                       iip, ifa, isr, iim);
-               force_sig(SIGSEGV, current);
+               force_sig(SIGSEGV);
                return;
 
              case 47:
@@ -608,5 +608,5 @@ ia64_fault (unsigned long vector, unsigned long isr, unsigned long ifa,
                break;
        }
        if (!die_if_kernel(buf, &regs, error))
-               force_sig(SIGILL, current);
+               force_sig(SIGILL);
 }
index a167a3824b35b939fb80d576823c6433c90538bf..eb7d5df59fa32c3c804ac796c77cb6d59c4f498a 100644 (file)
@@ -1537,6 +1537,6 @@ ia64_handle_unaligned (unsigned long ifa, struct pt_regs *regs)
        }
   force_sigbus:
        force_sig_fault(SIGBUS, BUS_ADRALN, (void __user *) ifa,
-                       0, 0, 0, current);
+                       0, 0, 0);
        goto done;
 }
index 5baeb022f474253ae6a880f41d9a42ef63e97dbf..3c3a283d3172bad2109dc9de8805a68e2a3357f9 100644 (file)
@@ -249,7 +249,7 @@ retry:
        }
        if (user_mode(regs)) {
                force_sig_fault(signal, code, (void __user *) address,
-                               0, __ISR_VALID, isr, current);
+                               0, __ISR_VALID, isr);
                return;
        }
 
index 87e7f3639839f559ee6afaec04428f055ac8d56b..05610e6924c1615115a6127486e4016a20462a9c 100644 (file)
@@ -803,7 +803,7 @@ asmlinkage int do_sigreturn(struct pt_regs *regs, struct switch_stack *sw)
        return regs->d0;
 
 badframe:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
        return 0;
 }
 
@@ -825,7 +825,7 @@ asmlinkage int do_rt_sigreturn(struct pt_regs *regs, struct switch_stack *sw)
        return regs->d0;
 
 badframe:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
        return 0;
 }
 
index b2fd000b92857b0eb607fe654d6e13ebc57f3a1f..344f93d36a9a08958b0585b1f8d007875e7ad99f 100644 (file)
@@ -431,7 +431,7 @@ static inline void bus_error030 (struct frame *fp)
                        pr_err("BAD KERNEL BUSERR\n");
 
                        die_if_kernel("Oops", &fp->ptregs,0);
-                       force_sig(SIGKILL, current);
+                       force_sig(SIGKILL);
                        return;
                }
        } else {
@@ -463,7 +463,7 @@ static inline void bus_error030 (struct frame *fp)
                                 !(ssw & RW) ? "write" : "read", addr,
                                 fp->ptregs.pc);
                        die_if_kernel ("Oops", &fp->ptregs, buserr_type);
-                       force_sig (SIGBUS, current);
+                       force_sig (SIGBUS);
                        return;
                }
 
@@ -493,7 +493,7 @@ static inline void bus_error030 (struct frame *fp)
                        do_page_fault (&fp->ptregs, addr, 0);
        } else {
                pr_debug("protection fault on insn access (segv).\n");
-               force_sig (SIGSEGV, current);
+               force_sig (SIGSEGV);
        }
 }
 #else
@@ -571,7 +571,7 @@ static inline void bus_error030 (struct frame *fp)
                               !(ssw & RW) ? "write" : "read", addr,
                               fp->ptregs.pc);
                        die_if_kernel("Oops",&fp->ptregs,mmusr);
-                       force_sig(SIGSEGV, current);
+                       force_sig(SIGSEGV);
                        return;
                } else {
 #if 0
@@ -598,7 +598,7 @@ static inline void bus_error030 (struct frame *fp)
 #endif
                        pr_debug("Unknown SIGSEGV - 1\n");
                        die_if_kernel("Oops",&fp->ptregs,mmusr);
-                       force_sig(SIGSEGV, current);
+                       force_sig(SIGSEGV);
                        return;
                }
 
@@ -621,7 +621,7 @@ static inline void bus_error030 (struct frame *fp)
        buserr:
                pr_err("BAD KERNEL BUSERR\n");
                die_if_kernel("Oops",&fp->ptregs,0);
-               force_sig(SIGKILL, current);
+               force_sig(SIGKILL);
                return;
        }
 
@@ -660,7 +660,7 @@ static inline void bus_error030 (struct frame *fp)
                        addr, fp->ptregs.pc);
                pr_debug("Unknown SIGSEGV - 2\n");
                die_if_kernel("Oops",&fp->ptregs,mmusr);
-               force_sig(SIGSEGV, current);
+               force_sig(SIGSEGV);
                return;
        }
 
@@ -804,7 +804,7 @@ asmlinkage void buserr_c(struct frame *fp)
        default:
          die_if_kernel("bad frame format",&fp->ptregs,0);
          pr_debug("Unknown SIGSEGV - 4\n");
-         force_sig(SIGSEGV, current);
+         force_sig(SIGSEGV);
        }
 }
 
@@ -1127,7 +1127,7 @@ asmlinkage void trap_c(struct frame *fp)
                addr = (void __user*) fp->un.fmtb.daddr;
                break;
        }
-       force_sig_fault(sig, si_code, addr, current);
+       force_sig_fault(sig, si_code, addr);
 }
 
 void die_if_kernel (char *str, struct pt_regs *fp, int nr)
@@ -1159,6 +1159,6 @@ asmlinkage void fpsp040_die(void)
 #ifdef CONFIG_M68KFPU_EMU
 asmlinkage void fpemu_signal(int signal, int code, void *addr)
 {
-       force_sig_fault(signal, code, addr, current);
+       force_sig_fault(signal, code, addr);
 }
 #endif
index 9b6163c05a754f8d86e6508eba4fd77483f71892..e9b1d7585b43bf5aaff5bead9ee2e9b537f0e800 100644 (file)
@@ -30,13 +30,13 @@ int send_fault_sig(struct pt_regs *regs)
        pr_debug("send_fault_sig: %p,%d,%d\n", addr, signo, si_code);
 
        if (user_mode(regs)) {
-               force_sig_fault(signo, si_code, addr, current);
+               force_sig_fault(signo, si_code, addr);
        } else {
                if (fixup_exception(regs))
                        return -1;
 
                //if (signo == SIGBUS)
-               //      force_sig_fault(si_signo, si_code, addr, current);
+               //      force_sig_fault(si_signo, si_code, addr);
 
                /*
                 * Oops. The kernel tried to access some bad page. We'll have to
index eafff21fcb0e646e25fdee6f2f75640b0c01ad2c..cf99c411503e3571594a680a01bf0967d8e134b3 100644 (file)
@@ -63,7 +63,7 @@ void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr)
        if (kernel_mode(regs))
                die("Exception in kernel mode", regs, signr);
 
-       force_sig_fault(signr, code, (void __user *)addr, current);
+       force_sig_fault(signr, code, (void __user *)addr);
 }
 
 asmlinkage void full_exception(struct pt_regs *regs, unsigned int type,
index 0685696349bb4415a4c4f1c6d9d3249c54be501f..cdd4feb279c5fa8f46394dea57e0328157640db8 100644 (file)
@@ -108,7 +108,7 @@ asmlinkage long sys_rt_sigreturn(struct pt_regs *regs)
        return rval;
 
 badframe:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
        return 0;
 }
 
index 202ad6a494f595cf9185b12a9aadd887c9bdab96..e6a810b0c7ad2086fd7387c6d1952962f6fcd758 100644 (file)
@@ -289,7 +289,7 @@ out_of_memory:
 do_sigbus:
        up_read(&mm->mmap_sem);
        if (user_mode(regs)) {
-               force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address, current);
+               force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address);
                return;
        }
        bad_page_fault(regs, address, SIGBUS);
index 180ad081afcf932fe61c7431bc1b87f5ebb1cc9d..1db29957a9318f175383d17002dd64ebce8bd294 100644 (file)
@@ -32,7 +32,7 @@ int __isa_exception_epc(struct pt_regs *regs)
        /* Calculate exception PC in branch delay slot. */
        if (__get_user(inst, (u16 __user *) msk_isa16_mode(epc))) {
                /* This should never happen because delay slot was checked. */
-               force_sig(SIGSEGV, current);
+               force_sig(SIGSEGV);
                return epc;
        }
        if (cpu_has_mips16) {
@@ -305,7 +305,7 @@ int __microMIPS_compute_return_epc(struct pt_regs *regs)
        return 0;
 
 sigsegv:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
        return -EFAULT;
 }
 
@@ -328,7 +328,7 @@ int __MIPS16e_compute_return_epc(struct pt_regs *regs)
        /* Read the instruction. */
        addr = (u16 __user *)msk_isa16_mode(epc);
        if (__get_user(inst.full, addr)) {
-               force_sig(SIGSEGV, current);
+               force_sig(SIGSEGV);
                return -EFAULT;
        }
 
@@ -343,7 +343,7 @@ int __MIPS16e_compute_return_epc(struct pt_regs *regs)
        case MIPS16e_jal_op:
                addr += 1;
                if (__get_user(inst2, addr)) {
-                       force_sig(SIGSEGV, current);
+                       force_sig(SIGSEGV);
                        return -EFAULT;
                }
                fullinst = ((unsigned)inst.full << 16) | inst2;
@@ -829,17 +829,17 @@ int __compute_return_epc_for_insn(struct pt_regs *regs,
 sigill_dsp:
        pr_debug("%s: DSP branch but not DSP ASE - sending SIGILL.\n",
                 current->comm);
-       force_sig(SIGILL, current);
+       force_sig(SIGILL);
        return -EFAULT;
 sigill_r2r6:
        pr_debug("%s: R2 branch but r2-to-r6 emulator is not present - sending SIGILL.\n",
                 current->comm);
-       force_sig(SIGILL, current);
+       force_sig(SIGILL);
        return -EFAULT;
 sigill_r6:
        pr_debug("%s: R6 branch but no MIPSr6 ISA support - sending SIGILL.\n",
                 current->comm);
-       force_sig(SIGILL, current);
+       force_sig(SIGILL);
        return -EFAULT;
 }
 EXPORT_SYMBOL_GPL(__compute_return_epc_for_insn);
@@ -859,7 +859,7 @@ int __compute_return_epc(struct pt_regs *regs)
         */
        addr = (unsigned int __user *) epc;
        if (__get_user(insn.word, addr)) {
-               force_sig(SIGSEGV, current);
+               force_sig(SIGSEGV);
                return -EFAULT;
        }
 
@@ -867,7 +867,7 @@ int __compute_return_epc(struct pt_regs *regs)
 
 unaligned:
        printk("%s: unaligned epc - sending SIGBUS.\n", current->comm);
-       force_sig(SIGBUS, current);
+       force_sig(SIGBUS);
        return -EFAULT;
 }
 
index 07c941c99e922cb527b62ae7677aacf0630968fc..81ba1d3c367c96addbd795bd0d8998e5607e1895 100644 (file)
@@ -220,7 +220,7 @@ static int evaluate_branch_instruction(struct kprobe *p, struct pt_regs *regs,
 
 unaligned:
        pr_notice("%s: unaligned epc - sending SIGBUS.\n", current->comm);
-       force_sig(SIGBUS, current);
+       force_sig(SIGBUS);
        return -EFAULT;
 
 }
index d75337974ee9b8ef8b8adb223f82cb4e17598659..f6efabcb4e92054c184bc7e523b564e38ef23c7b 100644 (file)
@@ -641,7 +641,7 @@ asmlinkage void sys_sigreturn(void)
        if (sig < 0)
                goto badframe;
        else if (sig)
-               force_sig(sig, current);
+               force_sig(sig);
 
        /*
         * Don't let your children do this ...
@@ -654,7 +654,7 @@ asmlinkage void sys_sigreturn(void)
        /* Unreached */
 
 badframe:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
 }
 #endif /* CONFIG_TRAD_SIGNALS */
 
@@ -678,7 +678,7 @@ asmlinkage void sys_rt_sigreturn(void)
        if (sig < 0)
                goto badframe;
        else if (sig)
-               force_sig(sig, current);
+               force_sig(sig);
 
        if (restore_altstack(&frame->rs_uc.uc_stack))
                goto badframe;
@@ -694,7 +694,7 @@ asmlinkage void sys_rt_sigreturn(void)
        /* Unreached */
 
 badframe:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
 }
 
 #ifdef CONFIG_TRAD_SIGNALS
index 9a6e58b48bb6e8e54bc7c06f8727deb979e78515..7bd00fad61af8f037ff3e1232a3ddccb8b135a3e 100644 (file)
@@ -71,7 +71,7 @@ asmlinkage void sysn32_rt_sigreturn(void)
        if (sig < 0)
                goto badframe;
        else if (sig)
-               force_sig(sig, current);
+               force_sig(sig);
 
        if (compat_restore_altstack(&frame->rs_uc.uc_stack))
                goto badframe;
@@ -87,7 +87,7 @@ asmlinkage void sysn32_rt_sigreturn(void)
        /* Unreached */
 
 badframe:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
 }
 
 static int setup_rt_frame_n32(void *sig_return, struct ksignal *ksig,
index df259618e834bb390629b7df18e6a65225c9d109..299a7a28ca33f2b0d9937c7e29e72797d8acd6ac 100644 (file)
@@ -171,7 +171,7 @@ asmlinkage void sys32_rt_sigreturn(void)
        if (sig < 0)
                goto badframe;
        else if (sig)
-               force_sig(sig, current);
+               force_sig(sig);
 
        if (compat_restore_altstack(&frame->rs_uc.uc_stack))
                goto badframe;
@@ -187,7 +187,7 @@ asmlinkage void sys32_rt_sigreturn(void)
        /* Unreached */
 
 badframe:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
 }
 
 static int setup_rt_frame_32(void *sig_return, struct ksignal *ksig,
@@ -273,7 +273,7 @@ asmlinkage void sys32_sigreturn(void)
        if (sig < 0)
                goto badframe;
        else if (sig)
-               force_sig(sig, current);
+               force_sig(sig);
 
        /*
         * Don't let your children do this ...
@@ -286,5 +286,5 @@ asmlinkage void sys32_sigreturn(void)
        /* Unreached */
 
 badframe:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
 }
index ac7159263da071c393f3b8da886ea6b963484f5f..342e41de9d64ee5d2fa99d3ac5997f69c62954d5 100644 (file)
@@ -482,7 +482,7 @@ asmlinkage void do_be(struct pt_regs *regs)
                goto out;
 
        die_if_kernel("Oops", regs);
-       force_sig(SIGBUS, current);
+       force_sig(SIGBUS);
 
 out:
        exception_exit(prev_state);
@@ -705,7 +705,7 @@ asmlinkage void do_ov(struct pt_regs *regs)
        prev_state = exception_enter();
        die_if_kernel("Integer overflow", regs);
 
-       force_sig_fault(SIGFPE, FPE_INTOVF, (void __user *)regs->cp0_epc, current);
+       force_sig_fault(SIGFPE, FPE_INTOVF, (void __user *)regs->cp0_epc);
        exception_exit(prev_state);
 }
 
@@ -733,7 +733,7 @@ void force_fcr31_sig(unsigned long fcr31, void __user *fault_addr,
        else if (fcr31 & FPU_CSR_INE_X)
                si_code = FPE_FLTRES;
 
-       force_sig_fault(SIGFPE, si_code, fault_addr, tsk);
+       force_sig_fault_to_task(SIGFPE, si_code, fault_addr, tsk);
 }
 
 int 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)
                return 1;
 
        case SIGBUS:
-               force_sig_fault(SIGBUS, BUS_ADRERR, fault_addr, current);
+               force_sig_fault(SIGBUS, BUS_ADRERR, fault_addr);
                return 1;
 
        case SIGSEGV:
@@ -761,11 +761,11 @@ int process_fpemu_return(int sig, void __user *fault_addr, unsigned long fcr31)
                else
                        si_code = SEGV_MAPERR;
                up_read(&current->mm->mmap_sem);
-               force_sig_fault(SIGSEGV, si_code, fault_addr, current);
+               force_sig_fault(SIGSEGV, si_code, fault_addr);
                return 1;
 
        default:
-               force_sig(sig, current);
+               force_sig(sig);
                return 1;
        }
 }
@@ -943,11 +943,11 @@ void do_trap_or_bp(struct pt_regs *regs, unsigned int code, int si_code,
                die_if_kernel(b, regs);
                force_sig_fault(SIGFPE,
                                code == BRK_DIVZERO ? FPE_INTDIV : FPE_INTOVF,
-                               (void __user *) regs->cp0_epc, current);
+                               (void __user *) regs->cp0_epc);
                break;
        case BRK_BUG:
                die_if_kernel("Kernel bug detected", regs);
-               force_sig(SIGTRAP, current);
+               force_sig(SIGTRAP);
                break;
        case BRK_MEMU:
                /*
@@ -962,15 +962,15 @@ void do_trap_or_bp(struct pt_regs *regs, unsigned int code, int si_code,
                        return;
 
                die_if_kernel("Math emu break/trap", regs);
-               force_sig(SIGTRAP, current);
+               force_sig(SIGTRAP);
                break;
        default:
                scnprintf(b, sizeof(b), "%s instruction in kernel code", str);
                die_if_kernel(b, regs);
                if (si_code) {
-                       force_sig_fault(SIGTRAP, si_code, NULL, current);
+                       force_sig_fault(SIGTRAP, si_code, NULL);
                } else {
-                       force_sig(SIGTRAP, current);
+                       force_sig(SIGTRAP);
                }
        }
 }
@@ -1063,7 +1063,7 @@ out:
        return;
 
 out_sigsegv:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
        goto out;
 }
 
@@ -1105,7 +1105,7 @@ out:
        return;
 
 out_sigsegv:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
        goto out;
 }
 
@@ -1191,7 +1191,7 @@ no_r2_instr:
        if (unlikely(status > 0)) {
                regs->cp0_epc = old_epc;                /* Undo skip-over.  */
                regs->regs[31] = old31;
-               force_sig(status, current);
+               force_sig(status);
        }
 
 out:
@@ -1220,7 +1220,7 @@ static int default_cu2_call(struct notifier_block *nfb, unsigned long action,
 
        die_if_kernel("COP2: Unhandled kernel unaligned access or invalid "
                              "instruction", regs);
-       force_sig(SIGILL, current);
+       force_sig(SIGILL);
 
        return NOTIFY_OK;
 }
@@ -1383,7 +1383,7 @@ asmlinkage void do_cpu(struct pt_regs *regs)
                if (unlikely(status > 0)) {
                        regs->cp0_epc = old_epc;        /* Undo skip-over.  */
                        regs->regs[31] = old31;
-                       force_sig(status, current);
+                       force_sig(status);
                }
 
                break;
@@ -1403,7 +1403,7 @@ asmlinkage void do_cpu(struct pt_regs *regs)
                 * emulator too.
                 */
                if (raw_cpu_has_fpu || !cpu_has_mips_4_5_64_r2_r6) {
-                       force_sig(SIGILL, current);
+                       force_sig(SIGILL);
                        break;
                }
                /* Fall through.  */
@@ -1437,7 +1437,7 @@ asmlinkage void do_cpu(struct pt_regs *regs)
 #else /* CONFIG_MIPS_FP_SUPPORT */
        case 1:
        case 3:
-               force_sig(SIGILL, current);
+               force_sig(SIGILL);
                break;
 #endif /* CONFIG_MIPS_FP_SUPPORT */
 
@@ -1464,7 +1464,7 @@ asmlinkage void do_msa_fpe(struct pt_regs *regs, unsigned int msacsr)
        local_irq_enable();
 
        die_if_kernel("do_msa_fpe invoked from kernel context!", regs);
-       force_sig(SIGFPE, current);
+       force_sig(SIGFPE);
 out:
        exception_exit(prev_state);
 }
@@ -1477,7 +1477,7 @@ asmlinkage void do_msa(struct pt_regs *regs)
        prev_state = exception_enter();
 
        if (!cpu_has_msa || test_thread_flag(TIF_32BIT_FPREGS)) {
-               force_sig(SIGILL, current);
+               force_sig(SIGILL);
                goto out;
        }
 
@@ -1485,7 +1485,7 @@ asmlinkage void do_msa(struct pt_regs *regs)
 
        err = enable_restore_fp_context(1);
        if (err)
-               force_sig(SIGILL, current);
+               force_sig(SIGILL);
 out:
        exception_exit(prev_state);
 }
@@ -1495,7 +1495,7 @@ asmlinkage void do_mdmx(struct pt_regs *regs)
        enum ctx_state prev_state;
 
        prev_state = exception_enter();
-       force_sig(SIGILL, current);
+       force_sig(SIGILL);
        exception_exit(prev_state);
 }
 
@@ -1521,7 +1521,7 @@ asmlinkage void do_watch(struct pt_regs *regs)
        if (test_tsk_thread_flag(current, TIF_LOAD_WATCH)) {
                mips_read_watch_registers();
                local_irq_enable();
-               force_sig_fault(SIGTRAP, TRAP_HWBKPT, NULL, current);
+               force_sig_fault(SIGTRAP, TRAP_HWBKPT, NULL);
        } else {
                mips_clear_watch_registers();
                local_irq_enable();
@@ -1592,7 +1592,7 @@ asmlinkage void do_mt(struct pt_regs *regs)
        }
        die_if_kernel("MIPS MT Thread exception in kernel", regs);
 
-       force_sig(SIGILL, current);
+       force_sig(SIGILL);
 }
 
 
@@ -1601,7 +1601,7 @@ asmlinkage void do_dsp(struct pt_regs *regs)
        if (cpu_has_dsp)
                panic("Unexpected DSP exception");
 
-       force_sig(SIGILL, current);
+       force_sig(SIGILL);
 }
 
 asmlinkage void do_reserved(struct pt_regs *regs)
index 76e33f9409719b5094cfb53f95bba9e07d2b9c25..92bd2b0f05484f13a36768d8adb8905b20363d5b 100644 (file)
@@ -1365,20 +1365,20 @@ fault:
                return;
 
        die_if_kernel("Unhandled kernel unaligned access", regs);
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
 
        return;
 
 sigbus:
        die_if_kernel("Unhandled kernel unaligned access", regs);
-       force_sig(SIGBUS, current);
+       force_sig(SIGBUS);
 
        return;
 
 sigill:
        die_if_kernel
            ("Unhandled kernel unaligned access or invalid instruction", regs);
-       force_sig(SIGILL, current);
+       force_sig(SIGILL);
 }
 
 /* Recode table from 16-bit register notation to 32-bit GPR. */
@@ -1991,20 +1991,20 @@ fault:
                return;
 
        die_if_kernel("Unhandled kernel unaligned access", regs);
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
 
        return;
 
 sigbus:
        die_if_kernel("Unhandled kernel unaligned access", regs);
-       force_sig(SIGBUS, current);
+       force_sig(SIGBUS);
 
        return;
 
 sigill:
        die_if_kernel
            ("Unhandled kernel unaligned access or invalid instruction", regs);
-       force_sig(SIGILL, current);
+       force_sig(SIGILL);
 }
 
 static void emulate_load_store_MIPS16e(struct pt_regs *regs, void __user * addr)
@@ -2271,20 +2271,20 @@ fault:
                return;
 
        die_if_kernel("Unhandled kernel unaligned access", regs);
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
 
        return;
 
 sigbus:
        die_if_kernel("Unhandled kernel unaligned access", regs);
-       force_sig(SIGBUS, current);
+       force_sig(SIGBUS);
 
        return;
 
 sigill:
        die_if_kernel
            ("Unhandled kernel unaligned access or invalid instruction", regs);
-       force_sig(SIGILL, current);
+       force_sig(SIGILL);
 }
 
 asmlinkage void do_ade(struct pt_regs *regs)
@@ -2364,7 +2364,7 @@ asmlinkage void do_ade(struct pt_regs *regs)
 
 sigbus:
        die_if_kernel("Kernel unaligned instruction access", regs);
-       force_sig(SIGBUS, current);
+       force_sig(SIGBUS);
 
        /*
         * XXX On return from the signal handler we should advance the epc
index 73d8a0f0b810c669d7d541704ab417a386e2cb74..f589aa8f47d9704140ea23969765c539ff5c4728 100644 (file)
@@ -223,7 +223,7 @@ bad_area_nosemaphore:
                        pr_cont("\n");
                }
                current->thread.trap_nr = (regs->cp0_cause >> 2) & 0x1f;
-               force_sig_fault(SIGSEGV, si_code, (void __user *)address, tsk);
+               force_sig_fault(SIGSEGV, si_code, (void __user *)address);
                return;
        }
 
@@ -279,7 +279,7 @@ do_sigbus:
 #endif
        current->thread.trap_nr = (regs->cp0_cause >> 2) & 0x1f;
        tsk->thread.cp0_badvaddr = address;
-       force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address, tsk);
+       force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address);
 
        return;
 #ifndef CONFIG_64BIT
index 34bb9801d5ff52867093e9bff2fdd23868f8721f..dc0110a607a5b4dd469ee54e245b511c5a59538e 100644 (file)
@@ -98,7 +98,7 @@ void ip22_be_interrupt(int irq)
               field, regs->cp0_epc, field, regs->regs[31]);
        /* Assume it would be too dangerous to continue ... */
        die_if_kernel("Oops", regs);
-       force_sig(SIGBUS, current);
+       force_sig(SIGBUS);
 }
 
 static int ip22_be_handler(struct pt_regs *regs, int is_fixup)
index 082541d33161c6790e9d8fe7a840b11d4385f5b6..c0cf7baee36d4753f3d5547461278403b327871d 100644 (file)
@@ -462,7 +462,7 @@ void ip22_be_interrupt(int irq)
        if (ip28_be_interrupt(regs) != MIPS_BE_DISCARD) {
                /* Assume it would be too dangerous to continue ... */
                die_if_kernel("Oops", regs);
-               force_sig(SIGBUS, current);
+               force_sig(SIGBUS);
        } else if (debug_be_interrupt)
                show_regs(regs);
 }
index 83efe03d5c600f695d073279c1d594a7ca60b471..73ad29b180fb500e90cdde82a926475662815aed 100644 (file)
@@ -74,7 +74,7 @@ int ip27_be_handler(struct pt_regs *regs, int is_fixup)
        show_regs(regs);
        dump_tlb_all();
        while(1);
-       force_sig(SIGBUS, current);
+       force_sig(SIGBUS);
 }
 
 void __init ip27_be_init(void)
index c1f12a9cf305f4196bd23cbe01b7dc73dc852b26..c860f95ab7edd44147ac6d99a8c07b16b2d95253 100644 (file)
@@ -29,7 +29,7 @@ static int ip32_be_handler(struct pt_regs *regs, int is_fixup)
        show_regs(regs);
        dump_tlb_all();
        while(1);
-       force_sig(SIGBUS, current);
+       force_sig(SIGBUS);
 }
 
 void __init ip32_be_init(void)
index cf0b8760f2616d287fe238854dbe0b53e55a40ea..62bdafbc53f4c8183a3412ffbf6a5065346db92b 100644 (file)
@@ -243,7 +243,7 @@ inline void handle_fpu_exception(struct pt_regs *regs)
        }
 
        force_sig_fault(si_signo, si_code,
-                       (void __user *)instruction_pointer(regs), current);
+                       (void __user *)instruction_pointer(regs));
 done:
        own_fpu();
 }
index 5f7660aa2d68a7904e68d9b8ad5ad5a5389d53b2..fe61513982b4a916a8ba50b545b8c9bf207d6780 100644 (file)
@@ -163,7 +163,7 @@ asmlinkage long sys_rt_sigreturn(struct pt_regs *regs)
        return regs->uregs[0];
 
 badframe:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
        return 0;
 }
 
index 5aa7c17da27ac0ffd93fecaf06b03a5f253ad828..f4d386b52622762c7011667466ee0a632bec6fc8 100644 (file)
@@ -205,7 +205,7 @@ int bad_syscall(int n, struct pt_regs *regs)
        }
 
        force_sig_fault(SIGILL, ILL_ILLTRP,
-                       (void __user *)instruction_pointer(regs) - 4, current);
+                       (void __user *)instruction_pointer(regs) - 4);
        die_if_kernel("Oops - bad syscall", regs, n);
        return regs->uregs[0];
 }
@@ -255,14 +255,15 @@ void __init early_trap_init(void)
        cpu_cache_wbinval_page(base, true);
 }
 
-void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs,
-                 int error_code, int si_code)
+static void send_sigtrap(struct pt_regs *regs, int error_code, int si_code)
 {
+       struct task_struct *tsk = current;
+
        tsk->thread.trap_no = ENTRY_DEBUG_RELATED;
        tsk->thread.error_code = error_code;
 
        force_sig_fault(SIGTRAP, si_code,
-                       (void __user *)instruction_pointer(regs), tsk);
+                       (void __user *)instruction_pointer(regs));
 }
 
 void do_debug_trap(unsigned long entry, unsigned long addr,
@@ -274,7 +275,7 @@ void do_debug_trap(unsigned long entry, unsigned long addr,
 
        if (user_mode(regs)) {
                /* trap_signal */
-               send_sigtrap(current, regs, 0, TRAP_BRKPT);
+               send_sigtrap(regs, 0, TRAP_BRKPT);
        } else {
                /* kernel_trap */
                if (!fixup_exception(regs))
@@ -288,7 +289,7 @@ void unhandled_interruption(struct pt_regs *regs)
        show_regs(regs);
        if (!user_mode(regs))
                do_exit(SIGKILL);
-       force_sig(SIGKILL, current);
+       force_sig(SIGKILL);
 }
 
 void unhandled_exceptions(unsigned long entry, unsigned long addr,
@@ -299,7 +300,7 @@ void unhandled_exceptions(unsigned long entry, unsigned long addr,
        show_regs(regs);
        if (!user_mode(regs))
                do_exit(SIGKILL);
-       force_sig(SIGKILL, current);
+       force_sig(SIGKILL);
 }
 
 extern int do_page_fault(unsigned long entry, unsigned long addr,
@@ -326,7 +327,7 @@ void do_revinsn(struct pt_regs *regs)
        show_regs(regs);
        if (!user_mode(regs))
                do_exit(SIGILL);
-       force_sig(SIGILL, current);
+       force_sig(SIGILL);
 }
 
 #ifdef CONFIG_ALIGNMENT_TRAP
index 68d5f2a27f38b0e5a60335bd20d34f17317db1f0..064ae5d2159d076658e960a83df4574e2778ed48 100644 (file)
@@ -271,7 +271,7 @@ bad_area_nosemaphore:
                tsk->thread.address = addr;
                tsk->thread.error_code = error_code;
                tsk->thread.trap_no = entry;
-               force_sig_fault(SIGSEGV, si_code, (void __user *)addr, tsk);
+               force_sig_fault(SIGSEGV, si_code, (void __user *)addr);
                return;
        }
 
@@ -340,7 +340,7 @@ do_sigbus:
        tsk->thread.address = addr;
        tsk->thread.error_code = error_code;
        tsk->thread.trap_no = entry;
-       force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)addr, tsk);
+       force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)addr);
 
        return;
 
index 4a81876b6086e57fb066e74817d976c74cdb1a23..a42dd09c657831311dc8a570f8b932417e86be48 100644 (file)
@@ -120,7 +120,7 @@ asmlinkage int do_rt_sigreturn(struct switch_stack *sw)
        return rval;
 
 badframe:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
        return 0;
 }
 
@@ -211,7 +211,7 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set,
        return 0;
 
 give_sigsegv:
-       force_sigsegv(ksig->sig, current);
+       force_sigsegv(ksig->sig);
        return -EFAULT;
 }
 
index 3bc3cd22b750e70216e2f79890a8034ff61f59fb..486db793923c03c14845d7adcd95b63b72e04ce2 100644 (file)
@@ -26,7 +26,7 @@ static DEFINE_SPINLOCK(die_lock);
 
 static void _send_sig(int signo, int code, unsigned long addr)
 {
-       force_sig_fault(signo, code, (void __user *) addr, current);
+       force_sig_fault(signo, code, (void __user *) addr);
 }
 
 void die(const char *str, struct pt_regs *regs, long err)
index 801cad03a4c7e421e9f65c02537f203102ab02e6..4f0754874d7841b9103e66f7b83e19677b6bbf85 100644 (file)
@@ -95,7 +95,7 @@ asmlinkage long _sys_rt_sigreturn(struct pt_regs *regs)
        return regs->gpr[11];
 
 badframe:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
        return 0;
 }
 
index e859bfb118a693ee47ee070aba84812aace04b07..932a8ec2b520eefd224e871e85967033e3eaa5aa 100644 (file)
@@ -244,7 +244,7 @@ void __init trap_init(void)
 
 asmlinkage void do_trap(struct pt_regs *regs, unsigned long address)
 {
-       force_sig_fault(SIGTRAP, TRAP_TRACE, (void __user *)address, current);
+       force_sig_fault(SIGTRAP, TRAP_TRACE, (void __user *)address);
 
        regs->pc += 4;
 }
@@ -253,7 +253,7 @@ asmlinkage void do_unaligned_access(struct pt_regs *regs, unsigned long address)
 {
        if (user_mode(regs)) {
                /* Send a SIGBUS */
-               force_sig_fault(SIGBUS, BUS_ADRALN, (void __user *)address, current);
+               force_sig_fault(SIGBUS, BUS_ADRALN, (void __user *)address);
        } else {
                printk("KERNEL: Unaligned Access 0x%.8lx\n", address);
                show_registers(regs);
@@ -266,7 +266,7 @@ asmlinkage void do_bus_fault(struct pt_regs *regs, unsigned long address)
 {
        if (user_mode(regs)) {
                /* Send a SIGBUS */
-               force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address, current);
+               force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address);
        } else {                /* Kernel mode */
                printk("KERNEL: Bus error (SIGBUS) 0x%.8lx\n", address);
                show_registers(regs);
@@ -371,7 +371,7 @@ static inline void simulate_lwa(struct pt_regs *regs, unsigned long address,
 
        if (get_user(value, lwa_addr)) {
                if (user_mode(regs)) {
-                       force_sig(SIGSEGV, current);
+                       force_sig(SIGSEGV);
                        return;
                }
 
@@ -418,7 +418,7 @@ static inline void simulate_swa(struct pt_regs *regs, unsigned long address,
 
        if (put_user(regs->gpr[rb], vaddr)) {
                if (user_mode(regs)) {
-                       force_sig(SIGSEGV, current);
+                       force_sig(SIGSEGV);
                        return;
                }
 
@@ -461,7 +461,7 @@ asmlinkage void do_illegal_instruction(struct pt_regs *regs,
 
        if (user_mode(regs)) {
                /* Send a SIGILL */
-               force_sig_fault(SIGILL, ILL_ILLOPC, (void __user *)address, current);
+               force_sig_fault(SIGILL, ILL_ILLOPC, (void __user *)address);
        } else {                /* Kernel mode */
                printk("KERNEL: Illegal instruction (SIGILL) 0x%.8lx\n",
                       address);
index 9eee5bf3db27a2da698519c258e62a2b00a52571..5d4d3a9691d0fb32d3bbcd8041e05bf4fa06c5f2 100644 (file)
@@ -209,7 +209,7 @@ bad_area_nosemaphore:
        /* User mode accesses just cause a SIGSEGV */
 
        if (user_mode(regs)) {
-               force_sig_fault(SIGSEGV, si_code, (void __user *)address, tsk);
+               force_sig_fault(SIGSEGV, si_code, (void __user *)address);
                return;
        }
 
@@ -274,7 +274,7 @@ do_sigbus:
         * Send a sigbus, regardless of whether we were in kernel
         * or user mode.
         */
-       force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address, tsk);
+       force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address);
 
        /* Kernel mode? Handle exceptions or die */
        if (!user_mode(regs))
index a3d2fb4e6dd2670f05639fc6e3598096611947c1..f642ba378ffa5fdbc827678e3ec2927ddd80ebf1 100644 (file)
@@ -88,9 +88,9 @@ void user_enable_single_step(struct task_struct *task)
                ptrace_disable(task);
                /* Don't wake up the task, but let the
                   parent know something happened. */
-               force_sig_fault(SIGTRAP, TRAP_TRACE,
-                               (void __user *) (task_regs(task)->iaoq[0] & ~3),
-                               task);
+               force_sig_fault_to_task(SIGTRAP, TRAP_TRACE,
+                                       (void __user *) (task_regs(task)->iaoq[0] & ~3),
+                                       task);
                /* notify_parent(task, SIGCHLD); */
                return;
        }
index 848c1934680bb4a88610f3570e75d03d55f84429..02895a8f2c551f6963a3eaa1232ca5b8655241d1 100644 (file)
@@ -164,7 +164,7 @@ sys_rt_sigreturn(struct pt_regs *regs, int in_syscall)
 
 give_sigsegv:
        DBG(1,"sys_rt_sigreturn: Sending SIGSEGV\n");
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
        return;
 }
 
index 096e319adeb3bba28191da33c8a4d14f9e3820a2..58dcf445e32f6a41ae65c2c7f02cad7cbcba25f5 100644 (file)
@@ -275,7 +275,7 @@ void die_if_kernel(char *str, struct pt_regs *regs, long err)
 static void handle_gdb_break(struct pt_regs *regs, int wot)
 {
        force_sig_fault(SIGTRAP, wot,
-                       (void __user *) (regs->iaoq[0] & ~3), current);
+                       (void __user *) (regs->iaoq[0] & ~3));
 }
 
 static void handle_break(struct pt_regs *regs)
@@ -609,13 +609,13 @@ void notrace handle_interruption(int code, struct pt_regs *regs)
                si_code = ILL_PRVREG;
        give_sigill:
                force_sig_fault(SIGILL, si_code,
-                               (void __user *) regs->iaoq[0], current);
+                               (void __user *) regs->iaoq[0]);
                return;
 
        case 12:
                /* Overflow Trap, let the userland signal handler do the cleanup */
                force_sig_fault(SIGFPE, FPE_INTOVF,
-                               (void __user *) regs->iaoq[0], current);
+                               (void __user *) regs->iaoq[0]);
                return;
                
        case 13:
@@ -627,7 +627,7 @@ void notrace handle_interruption(int code, struct pt_regs *regs)
                         * to by si_addr.
                         */
                        force_sig_fault(SIGFPE, FPE_CONDTRAP,
-                                       (void __user *) regs->iaoq[0], current);
+                                       (void __user *) regs->iaoq[0]);
                        return;
                } 
                /* The kernel doesn't want to handle condition codes */
@@ -739,7 +739,7 @@ void notrace handle_interruption(int code, struct pt_regs *regs)
                force_sig_fault(SIGSEGV, SEGV_MAPERR,
                                (code == 7)?
                                ((void __user *) regs->iaoq[0]) :
-                               ((void __user *) regs->ior), current);
+                               ((void __user *) regs->ior));
                return;
 
        case 28: 
@@ -754,7 +754,7 @@ void notrace handle_interruption(int code, struct pt_regs *regs)
                                task_pid_nr(current), current->comm);
                        /* SIGBUS, for lack of a better one. */
                        force_sig_fault(SIGBUS, BUS_OBJERR,
-                                       (void __user *)regs->ior, current);
+                                       (void __user *)regs->ior);
                        return;
                }
                pdc_chassis_send_status(PDC_CHASSIS_DIRECT_PANIC);
@@ -770,7 +770,7 @@ void notrace handle_interruption(int code, struct pt_regs *regs)
                                code, fault_space,
                                task_pid_nr(current), current->comm);
                force_sig_fault(SIGSEGV, SEGV_MAPERR,
-                               (void __user *)regs->ior, current);
+                               (void __user *)regs->ior);
                return;
            }
        }
index 30161b7c9ac25d9bcfc8963799ec8d2c8e774cbd..237d20dd5622de53fb207ec5888f972c7237a9e3 100644 (file)
@@ -676,14 +676,14 @@ void handle_unaligned(struct pt_regs *regs)
                if (ret == ERR_PAGEFAULT)
                {
                        force_sig_fault(SIGSEGV, SEGV_MAPERR,
-                                       (void __user *)regs->ior, current);
+                                       (void __user *)regs->ior);
                }
                else
                {
 force_sigbus:
                        /* couldn't handle it ... */
                        force_sig_fault(SIGBUS, BUS_ADRALN,
-                                       (void __user *)regs->ior, current);
+                                       (void __user *)regs->ior);
                }
                
                return;
index c83237c0cbc133359e320dcfffe8e78d6640bad9..6ce427b58836c55d3166f0e98c175355b6737d50 100644 (file)
@@ -104,7 +104,7 @@ handle_fpe(struct pt_regs *regs)
        memcpy(regs->fr, frcopy, sizeof regs->fr);
        if (signalcode != 0) {
            force_sig_fault(signalcode >> 24, signalcode & 0xffffff,
-                           (void __user *) regs->iaoq[0], current);
+                           (void __user *) regs->iaoq[0]);
            return -1;
        }
 
index c8e8b7c0555837144d3427daaf395b6317d06aa6..6dd4669ce7a5572fb48dcd92f9b31b650e731af8 100644 (file)
@@ -403,13 +403,13 @@ bad_area:
                                lsb = PAGE_SHIFT;
 
                        force_sig_mceerr(BUS_MCEERR_AR, (void __user *) address,
-                                        lsb, current);
+                                        lsb);
                        return;
                }
 #endif
                show_signal_msg(regs, code, address, tsk, vma);
 
-               force_sig_fault(signo, si_code, (void __user *) address, current);
+               force_sig_fault(signo, si_code, (void __user *) address);
                return;
        }
 
index f0fbbf6a6a1fa1a8ef3e0b442b9966eaf0e4474e..b448b0938299ce9272a364d0a19539a5a6994803 100644 (file)
@@ -639,7 +639,7 @@ void do_break (struct pt_regs *regs, unsigned long address,
        hw_breakpoint_disable();
 
        /* Deliver the signal to userspace */
-       force_sig_fault(SIGTRAP, TRAP_HWBKPT, (void __user *)address, current);
+       force_sig_fault(SIGTRAP, TRAP_HWBKPT, (void __user *)address);
 }
 #endif /* CONFIG_PPC_ADV_DEBUG_REGS */
 
index a2b74e057904985820fea313e392ca39e158478e..f50b708d6d7716572c1c8e97812548bd6babdb1c 100644 (file)
@@ -1245,7 +1245,7 @@ SYSCALL_DEFINE0(rt_sigreturn)
                                   current->comm, current->pid,
                                   rt_sf, regs->nip, regs->link);
 
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
        return 0;
 }
 
@@ -1334,7 +1334,7 @@ SYSCALL_DEFINE3(debug_setcontext, struct ucontext __user *, ctx,
                                           current->comm, current->pid,
                                           ctx, regs->nip, regs->link);
 
-               force_sig(SIGSEGV, current);
+               force_sig(SIGSEGV);
                goto out;
        }
 
@@ -1512,6 +1512,6 @@ badframe:
                                   current->comm, current->pid,
                                   addr, regs->nip, regs->link);
 
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
        return 0;
 }
index 4292ea39baa46e2c3915cc36b81c4ab767b28c7b..2f80e270c7b0b7b30986b9adb884a6125d709534 100644 (file)
@@ -808,7 +808,7 @@ badframe:
                                   current->comm, current->pid, "rt_sigreturn",
                                   (long)uc, regs->nip, regs->link);
 
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
        return 0;
 }
 
index 47df30982de1b5f25cdf0f600c58cfd0ec2b43dd..11caa0291254e9e5dfde5c549cb3ec3b10f902ca 100644 (file)
@@ -297,7 +297,7 @@ NOKPROBE_SYMBOL(die);
 
 void user_single_step_report(struct pt_regs *regs)
 {
-       force_sig_fault(SIGTRAP, TRAP_TRACE, (void __user *)regs->nip, current);
+       force_sig_fault(SIGTRAP, TRAP_TRACE, (void __user *)regs->nip);
 }
 
 static 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)
        if (!exception_common(signr, regs, code, addr))
                return;
 
-       force_sig_fault(signr, code, (void __user *)addr, current);
+       force_sig_fault(signr, code, (void __user *)addr);
 }
 
 /*
index ec6b7ad706595afe3c69b3cf9a283cdcfe56a231..d989592b6fc838ac605854658e36c91b39d47bb9 100644 (file)
@@ -178,13 +178,12 @@ static int do_sigbus(struct pt_regs *regs, unsigned long address,
                if (fault & VM_FAULT_HWPOISON)
                        lsb = PAGE_SHIFT;
 
-               force_sig_mceerr(BUS_MCEERR_AR, (void __user *)address, lsb,
-                                current);
+               force_sig_mceerr(BUS_MCEERR_AR, (void __user *)address, lsb);
                return 0;
        }
 
 #endif
-       force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address, current);
+       force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address);
        return 0;
 }
 
index 6dfd2cb1bce75a675a41d517f30d2770f6cc7580..24adbe3c605c06bd88ea150fb46fc3b0559bf692 100644 (file)
@@ -31,22 +31,21 @@ static void spufs_handle_event(struct spu_context *ctx,
 
        switch (type) {
        case SPE_EVENT_INVALID_DMA:
-               force_sig_fault(SIGBUS, BUS_OBJERR, NULL, current);
+               force_sig_fault(SIGBUS, BUS_OBJERR, NULL);
                break;
        case SPE_EVENT_SPE_DATA_STORAGE:
                ctx->ops->restart_dma(ctx);
-               force_sig_fault(SIGSEGV, SEGV_ACCERR, (void __user *)ea,
-                               current);
+               force_sig_fault(SIGSEGV, SEGV_ACCERR, (void __user *)ea);
                break;
        case SPE_EVENT_DMA_ALIGNMENT:
                /* DAR isn't set for an alignment fault :( */
-               force_sig_fault(SIGBUS, BUS_ADRALN, NULL, current);
+               force_sig_fault(SIGBUS, BUS_ADRALN, NULL);
                break;
        case SPE_EVENT_SPE_ERROR:
                force_sig_fault(
                        SIGILL, ILL_ILLOPC,
                        (void __user *)(unsigned long)
-                       ctx->ops->npc_read(ctx) - 4, current);
+                       ctx->ops->npc_read(ctx) - 4);
                break;
        }
 }
index 07f82d7395ffd49b27115281604290de8bdd84e0..3f2380f40f9963610824274b69a4031e6763a0ac 100644 (file)
@@ -443,7 +443,7 @@ long spufs_run_spu(struct spu_context *ctx, u32 *npc, u32 *event)
 
        else if (unlikely((status & SPU_STATUS_STOPPED_BY_STOP)
            && (status >> SPU_STOP_STATUS_SHIFT) == 0x3fff)) {
-               force_sig(SIGTRAP, current);
+               force_sig(SIGTRAP);
                ret = -ERESTARTSYS;
        }
 
index f653bfc8a83b8c3544735ce892a672e3d6d6534e..07ceee8b17470a0e0aa9e6b4c03e378c0134d699 100644 (file)
@@ -86,7 +86,7 @@ struct task_struct;
 
 extern void die(struct pt_regs *regs, const char *str);
 extern void do_trap(struct pt_regs *regs, int signo, int code,
-       unsigned long addr, struct task_struct *tsk);
+       unsigned long addr);
 
 #endif /* !__ASSEMBLY__ */
 
index 1fe1b02e44d00b9cff61b4c4c91953c53d4e35e1..b14d7647d80014fd1982487b726b563def29775a 100644 (file)
@@ -126,7 +126,7 @@ badframe:
                        task->comm, task_pid_nr(task), __func__,
                        frame, (void *)regs->sepc, (void *)regs->sp);
        }
-       force_sig(SIGSEGV, task);
+       force_sig(SIGSEGV);
        return 0;
 }
 
index 6b32190ba73c4668898699309539f929a4307d01..424eb72d56b10c51120cf02a6618a504f37d41f9 100644 (file)
@@ -55,9 +55,10 @@ void die(struct pt_regs *regs, const char *str)
                do_exit(SIGSEGV);
 }
 
-void do_trap(struct pt_regs *regs, int signo, int code,
-       unsigned long addr, struct task_struct *tsk)
+void do_trap(struct pt_regs *regs, int signo, int code, unsigned long addr)
 {
+       struct task_struct *tsk = current;
+
        if (show_unhandled_signals && unhandled_signal(tsk, signo)
            && printk_ratelimit()) {
                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,
                show_regs(regs);
        }
 
-       force_sig_fault(signo, code, (void __user *)addr, tsk);
+       force_sig_fault(signo, code, (void __user *)addr);
 }
 
 static void do_trap_error(struct pt_regs *regs, int signo, int code,
        unsigned long addr, const char *str)
 {
        if (user_mode(regs)) {
-               do_trap(regs, signo, code, addr, current);
+               do_trap(regs, signo, code, addr);
        } else {
                if (!fixup_exception(regs))
                        die(regs, str);
@@ -140,7 +141,7 @@ asmlinkage void do_trap_break(struct pt_regs *regs)
        }
 #endif /* CONFIG_GENERIC_BUG */
 
-       force_sig_fault(SIGTRAP, TRAP_BRKPT, (void __user *)(regs->sepc), current);
+       force_sig_fault(SIGTRAP, TRAP_BRKPT, (void __user *)(regs->sepc));
 }
 
 #ifdef CONFIG_GENERIC_BUG
index f960c3f4ce47c36ea24dfa601dc82bf7a931cedd..96add1427a75a5790acd3add530f33422c0808d9 100644 (file)
@@ -169,7 +169,7 @@ bad_area:
        up_read(&mm->mmap_sem);
        /* User mode accesses just cause a SIGSEGV */
        if (user_mode(regs)) {
-               do_trap(regs, SIGSEGV, code, addr, tsk);
+               do_trap(regs, SIGSEGV, code, addr);
                return;
        }
 
@@ -205,7 +205,7 @@ do_sigbus:
        /* Kernel mode? Handle exceptions or die */
        if (!user_mode(regs))
                goto no_context;
-       do_trap(regs, SIGBUS, BUS_ADRERR, addr, tsk);
+       do_trap(regs, SIGBUS, BUS_ADRERR, addr);
        return;
 
 vmalloc_fault:
@@ -219,7 +219,7 @@ vmalloc_fault:
 
                /* User mode accesses just cause a SIGSEGV */
                if (user_mode(regs))
-                       return do_trap(regs, SIGSEGV, code, addr, tsk);
+                       return do_trap(regs, SIGSEGV, code, addr);
 
                /*
                 * Synchronize this task's top level page-table
index 6f2a193ccccc6937a4be75cd5c9f2d079896c608..38d4bdbc34b913ac50ad917f5fe6f5c1391ac681 100644 (file)
@@ -194,7 +194,7 @@ COMPAT_SYSCALL_DEFINE0(sigreturn)
        load_sigregs();
        return regs->gprs[2];
 badframe:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
        return 0;
 }
 
@@ -217,7 +217,7 @@ COMPAT_SYSCALL_DEFINE0(rt_sigreturn)
        load_sigregs();
        return regs->gprs[2];
 badframe:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
        return 0;
 }      
 
index 22f08245aa5d46ef5f80398ebcc4e064099c91a6..e6fca5498e1fda810f0aa3fb7bb3e18f55a81272 100644 (file)
@@ -232,7 +232,7 @@ SYSCALL_DEFINE0(sigreturn)
        load_sigregs();
        return regs->gprs[2];
 badframe:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
        return 0;
 }
 
@@ -256,7 +256,7 @@ SYSCALL_DEFINE0(rt_sigreturn)
        load_sigregs();
        return regs->gprs[2];
 badframe:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
        return 0;
 }
 
index 4736b6ec0ad2c62606d8e20f1dd3796a2200536f..164c0282b41ae62df2498b8082d6cabf9f40d975 100644 (file)
@@ -45,7 +45,7 @@ int is_valid_bugaddr(unsigned long addr)
 void do_report_trap(struct pt_regs *regs, int si_signo, int si_code, char *str)
 {
        if (user_mode(regs)) {
-               force_sig_fault(si_signo, si_code, get_trap_ip(regs), current);
+               force_sig_fault(si_signo, si_code, get_trap_ip(regs));
                report_user_fault(regs, si_signo, 0);
         } else {
                 const struct exception_table_entry *fixup;
@@ -79,7 +79,7 @@ void do_per_trap(struct pt_regs *regs)
        if (!current->ptrace)
                return;
        force_sig_fault(SIGTRAP, TRAP_HWBKPT,
-               (void __force __user *) current->thread.per_event.address, current);
+               (void __force __user *) current->thread.per_event.address);
 }
 NOKPROBE_SYMBOL(do_per_trap);
 
@@ -165,7 +165,7 @@ void illegal_op(struct pt_regs *regs)
                        return;
                if (*((__u16 *) opcode) == S390_BREAKPOINT_U16) {
                        if (current->ptrace)
-                               force_sig_fault(SIGTRAP, TRAP_BRKPT, location, current);
+                               force_sig_fault(SIGTRAP, TRAP_BRKPT, location);
                        else
                                signal = SIGILL;
 #ifdef CONFIG_UPROBES
index df75d574246dc3c39f3ce43ae1b1d1052eea8874..0ba174f779daf54abd2b3a4bf91fb3f9d8f8d69a 100644 (file)
@@ -248,8 +248,7 @@ static noinline void do_sigsegv(struct pt_regs *regs, int si_code)
 {
        report_user_fault(regs, SIGSEGV, 1);
        force_sig_fault(SIGSEGV, si_code,
-                       (void __user *)(regs->int_parm_long & __FAIL_ADDR_MASK),
-                       current);
+                       (void __user *)(regs->int_parm_long & __FAIL_ADDR_MASK));
 }
 
 const struct exception_table_entry *s390_search_extables(unsigned long addr)
@@ -310,8 +309,7 @@ static noinline void do_sigbus(struct pt_regs *regs)
         * or user mode.
         */
        force_sig_fault(SIGBUS, BUS_ADRERR,
-                       (void __user *)(regs->int_parm_long & __FAIL_ADDR_MASK),
-                       current);
+                       (void __user *)(regs->int_parm_long & __FAIL_ADDR_MASK));
 }
 
 static noinline int signal_return(struct pt_regs *regs)
index 74b48db86dd71350909ce40afcaee187e89ee22f..0bcff11a4843d32524843b6b15c5b94c18cd762a 100644 (file)
@@ -568,5 +568,5 @@ BUILD_TRAP_HANDLER(fpu_error)
                return;
        }
 
-       force_sig(SIGFPE, tsk);
+       force_sig(SIGFPE);
 }
index 1ff56e5ba990ff90056780733651e146bc872899..03ffd8cdf5424478a0840ad2f0903d4a318afa80 100644 (file)
@@ -421,5 +421,5 @@ BUILD_TRAP_HANDLER(fpu_error)
                }
        }
 
-       force_sig(SIGFPE, tsk);
+       force_sig(SIGFPE);
 }
index 9218d9ed787e87d1095029b39ce0ee5dbe33d9e1..3966b5ee8e93ecb702c8052d590039918348f46e 100644 (file)
@@ -100,9 +100,7 @@ void restore_fpu(struct task_struct *tsk)
 
 asmlinkage void do_fpu_error(unsigned long ex, struct pt_regs *regs)
 {
-       struct task_struct *tsk = current;
-
        regs->pc += 4;
 
-       force_sig(SIGFPE, tsk);
+       force_sig(SIGFPE);
 }
index bc96b16288c1aec920d4e1fc41417f5236ddfa3a..3bd010b4c55f58e49f0e761693bab35dd070c36d 100644 (file)
@@ -338,7 +338,7 @@ static int __kprobes hw_breakpoint_handler(struct die_args *args)
                /* Deliver the signal to userspace */
                if (!arch_check_bp_in_kernelspace(&bp->hw.info)) {
                        force_sig_fault(SIGTRAP, TRAP_HWBKPT,
-                                       (void __user *)NULL, current);
+                                       (void __user *)NULL);
                }
 
                rcu_read_unlock();
index 3390349ff9769e88d23459812361512a77afb47b..11085e48eaa68440663f84af26268647e89bbb00 100644 (file)
@@ -550,7 +550,7 @@ asmlinkage void do_single_step(unsigned long long vec, struct pt_regs *regs)
           continually stepping. */
        local_irq_enable();
        regs->sr &= ~SR_SSTEP;
-       force_sig(SIGTRAP, current);
+       force_sig(SIGTRAP);
 }
 
 /* Called with interrupts disabled */
@@ -561,7 +561,7 @@ BUILD_TRAP_HANDLER(breakpoint)
        /* We need to forward step the PC, to counteract the backstep done
           in signal.c. */
        local_irq_enable();
-       force_sig(SIGTRAP, current);
+       force_sig(SIGTRAP);
        regs->pc += 4;
 }
 
index 2a2121ba8ebe2eee55e479abbdc29878701e86b7..24473fa6c3b63954473ff0684061d07189569ea0 100644 (file)
@@ -176,7 +176,7 @@ asmlinkage int sys_sigreturn(void)
        return r0;
 
 badframe:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
        return 0;
 }
 
@@ -207,7 +207,7 @@ asmlinkage int sys_rt_sigreturn(void)
        return r0;
 
 badframe:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
        return 0;
 }
 
index f1f1598879c22828f94be08fb201d44fbb1d26d1..b9aaa9266b3452c03ecf521f0cbd8352c715f37b 100644 (file)
@@ -277,7 +277,7 @@ asmlinkage int sys_sigreturn(unsigned long r2, unsigned long r3,
        return (int) ret;
 
 badframe:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
        return 0;
 }
 
@@ -311,7 +311,7 @@ asmlinkage int sys_rt_sigreturn(unsigned long r2, unsigned long r3,
        return (int) ret;
 
 badframe:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
        return 0;
 }
 
index 8b49cced663dc54a387144866811fa8f16929893..63cf17bc760da5143e571fb925ac76e558d403e2 100644 (file)
@@ -141,7 +141,7 @@ BUILD_TRAP_HANDLER(debug)
                       SIGTRAP) == NOTIFY_STOP)
                return;
 
-       force_sig(SIGTRAP, current);
+       force_sig(SIGTRAP);
 }
 
 /*
@@ -167,7 +167,7 @@ BUILD_TRAP_HANDLER(bug)
        }
 #endif
 
-       force_sig(SIGTRAP, current);
+       force_sig(SIGTRAP);
 }
 
 BUILD_TRAP_HANDLER(nmi)
index f2a18b5fafd824bb64abdef412f77b7615fe47fa..058c6181bb306cf9a60c32fdb45fb50b2259dc0c 100644 (file)
@@ -533,7 +533,7 @@ uspace_segv:
                       "access (PC %lx PR %lx)\n", current->comm, regs->pc,
                       regs->pr);
 
-               force_sig_fault(SIGBUS, si_code, (void __user *)address, current);
+               force_sig_fault(SIGBUS, si_code, (void __user *)address);
        } else {
                inc_unaligned_kernel_access();
 
@@ -603,7 +603,7 @@ asmlinkage void do_divide_error(unsigned long r4)
                /* Let gcc know unhandled cases don't make it past here */
                return;
        }
-       force_sig_fault(SIGFPE, code, NULL, current);
+       force_sig_fault(SIGFPE, code, NULL);
 }
 #endif
 
@@ -611,7 +611,6 @@ asmlinkage void do_reserved_inst(void)
 {
        struct pt_regs *regs = current_pt_regs();
        unsigned long error_code;
-       struct task_struct *tsk = current;
 
 #ifdef CONFIG_SH_FPU_EMU
        unsigned short inst = 0;
@@ -633,7 +632,7 @@ asmlinkage void do_reserved_inst(void)
                /* Enable DSP mode, and restart instruction. */
                regs->sr |= SR_DSP;
                /* Save DSP mode */
-               tsk->thread.dsp_status.status |= SR_DSP;
+               current->thread.dsp_status.status |= SR_DSP;
                return;
        }
 #endif
@@ -641,7 +640,7 @@ asmlinkage void do_reserved_inst(void)
        error_code = lookup_exception_vector();
 
        local_irq_enable();
-       force_sig(SIGILL, tsk);
+       force_sig(SIGILL);
        die_if_no_fixup("reserved instruction", regs, error_code);
 }
 
@@ -697,7 +696,6 @@ asmlinkage void do_illegal_slot_inst(void)
 {
        struct pt_regs *regs = current_pt_regs();
        unsigned long inst;
-       struct task_struct *tsk = current;
 
        if (kprobe_handle_illslot(regs->pc) == 0)
                return;
@@ -716,7 +714,7 @@ asmlinkage void do_illegal_slot_inst(void)
        inst = lookup_exception_vector();
 
        local_irq_enable();
-       force_sig(SIGILL, tsk);
+       force_sig(SIGILL);
        die_if_no_fixup("illegal slot instruction", regs, inst);
 }
 
index 8ce90a7da67d9b4dd77850fee840dfc2cfa87844..37046f3a26d3594051175a707561ae81f165ec96 100644 (file)
@@ -599,7 +599,7 @@ static void do_unhandled_exception(int signr, char *str, unsigned long error,
                                   struct pt_regs *regs)
 {
        if (user_mode(regs))
-               force_sig(signr, current);
+               force_sig(signr);
 
        die_if_no_fixup(str, regs, error);
 }
index a0fa8fc887399ee4f124f50c38f3d2c997f3649b..e8be0eca0444a05da6e80e9f683695fa0429b378 100644 (file)
@@ -560,7 +560,7 @@ static int ieee_fpe_handler(struct pt_regs *regs)
                        task_thread_info(tsk)->status |= TS_USEDFPU;
                } else {
                        force_sig_fault(SIGFPE, FPE_FLTINV,
-                                       (void __user *)regs->pc, tsk);
+                                       (void __user *)regs->pc);
                }
 
                regs->pc = nextpc;
index 6defd2c6d9b1d95698670cbd65e7426de56b5c15..3093bc3721386bcdd40aca3aae77da95e5980da6 100644 (file)
@@ -39,10 +39,9 @@ static inline int notify_page_fault(struct pt_regs *regs, int trap)
 }
 
 static void
-force_sig_info_fault(int si_signo, int si_code, unsigned long address,
-                    struct task_struct *tsk)
+force_sig_info_fault(int si_signo, int si_code, unsigned long address)
 {
-       force_sig_fault(si_signo, si_code, (void __user *)address, tsk);
+       force_sig_fault(si_signo, si_code, (void __user *)address);
 }
 
 /*
@@ -244,8 +243,6 @@ static void
 __bad_area_nosemaphore(struct pt_regs *regs, unsigned long error_code,
                       unsigned long address, int si_code)
 {
-       struct task_struct *tsk = current;
-
        /* User mode accesses just cause a SIGSEGV */
        if (user_mode(regs)) {
                /*
@@ -253,7 +250,7 @@ __bad_area_nosemaphore(struct pt_regs *regs, unsigned long error_code,
                 */
                local_irq_enable();
 
-               force_sig_info_fault(SIGSEGV, si_code, address, tsk);
+               force_sig_info_fault(SIGSEGV, si_code, address);
 
                return;
        }
@@ -308,7 +305,7 @@ do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address)
        if (!user_mode(regs))
                no_context(regs, error_code, address);
 
-       force_sig_info_fault(SIGBUS, BUS_ADRERR, address, tsk);
+       force_sig_info_fault(SIGBUS, BUS_ADRERR, address);
 }
 
 static noinline int
index 59eaf6227af1d69462c577a7104c25f72521533b..4282116e28e7da8c89ec091954b016b07ce35192 100644 (file)
@@ -519,7 +519,7 @@ void synchronize_user_stack(void)
 
 static void stack_unaligned(unsigned long sp)
 {
-       force_sig_fault(SIGBUS, BUS_ADRALN, (void __user *) sp, 0, current);
+       force_sig_fault(SIGBUS, BUS_ADRALN, (void __user *) sp, 0);
 }
 
 static const char uwfault32[] = KERN_INFO \
@@ -570,7 +570,7 @@ void fault_in_user_windows(struct pt_regs *regs)
 
 barf:
        set_thread_wsaved(window + 1);
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
 }
 
 asmlinkage long sparc_do_fork(unsigned long clone_flags,
index e800ce13cc6e5bb2646e10ad0cdd0c71e9a80d44..a237810aa9f4fd04c0fac83831bf47350b0511b3 100644 (file)
@@ -170,7 +170,7 @@ void do_sigreturn32(struct pt_regs *regs)
        return;
 
 segv:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
 }
 
 asmlinkage void do_rt_sigreturn32(struct pt_regs *regs)
@@ -256,7 +256,7 @@ asmlinkage void do_rt_sigreturn32(struct pt_regs *regs)
        set_current_blocked(&set);
        return;
 segv:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
 }
 
 static 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,
                        pr_info("%s[%d] bad frame in setup_frame32: %08lx TPC %08lx O7 %08lx\n",
                                current->comm, current->pid, (unsigned long)sf,
                                regs->tpc, regs->u_regs[UREG_I7]);
-               force_sigsegv(ksig->sig, current);
+               force_sigsegv(ksig->sig);
                return -EINVAL;
        }
 
@@ -509,7 +509,7 @@ static int setup_rt_frame32(struct ksignal *ksig, struct pt_regs *regs,
                        pr_info("%s[%d] bad frame in setup_rt_frame32: %08lx TPC %08lx O7 %08lx\n",
                                current->comm, current->pid, (unsigned long)sf,
                                regs->tpc, regs->u_regs[UREG_I7]);
-               force_sigsegv(ksig->sig, current);
+               force_sigsegv(ksig->sig);
                return -EINVAL;
        }
 
index 83953780ca016c4944e2284014c50eb661357aa4..42c3de313fd63bbdff8976a239cdf2d1a37db9f6 100644 (file)
@@ -137,7 +137,7 @@ asmlinkage void do_sigreturn(struct pt_regs *regs)
        return;
 
 segv_and_exit:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
 }
 
 asmlinkage void do_rt_sigreturn(struct pt_regs *regs)
@@ -196,7 +196,7 @@ asmlinkage void do_rt_sigreturn(struct pt_regs *regs)
        set_current_blocked(&set);
        return;
 segv:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
 }
 
 static inline void __user *get_sigframe(struct ksignal *ksig, struct pt_regs *regs, unsigned long framesize)
index ca70787efd8e05de3d4ec8a3f9a8040bfb4c4844..69ae814b7e900b58c5bc1422d1d4dac3992fc11e 100644 (file)
@@ -134,7 +134,7 @@ out:
        exception_exit(prev_state);
        return;
 do_sigsegv:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
        goto out;
 }
 
@@ -228,7 +228,7 @@ out:
        exception_exit(prev_state);
        return;
 do_sigsegv:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
        goto out;
 }
 
@@ -320,7 +320,7 @@ void do_rt_sigreturn(struct pt_regs *regs)
        set_current_blocked(&set);
        return;
 segv:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
 }
 
 static 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)
                        pr_info("%s[%d] bad frame in setup_rt_frame: %016lx TPC %016lx O7 %016lx\n",
                                current->comm, current->pid, (unsigned long)sf,
                                regs->tpc, regs->u_regs[UREG_I7]);
-               force_sigsegv(ksig->sig, current);
+               force_sigsegv(ksig->sig);
                return -EINVAL;
        }
 
index 452e4d08085500dd302a6c482b6dc6e67eddc8be..be77538bc0387d42ab3b6fea5eaff6bfaac47f92 100644 (file)
@@ -151,7 +151,7 @@ sparc_breakpoint (struct pt_regs *regs)
 #ifdef DEBUG_SPARC_BREAKPOINT
         printk ("TRAP: Entering kernel PC=%x, nPC=%x\n", regs->pc, regs->npc);
 #endif
-       force_sig_fault(SIGTRAP, TRAP_BRKPT, (void __user *)regs->pc, 0, current);
+       force_sig_fault(SIGTRAP, TRAP_BRKPT, (void __user *)regs->pc, 0);
 
 #ifdef DEBUG_SPARC_BREAKPOINT
        printk ("TRAP: Returning to space: PC=%x nPC=%x\n", regs->pc, regs->npc);
index 9825ca6a6020782a2b3634558811437f07b19185..ccc88926bc000b9573af14f578d74098f7c7a8ff 100644 (file)
@@ -511,7 +511,7 @@ asmlinkage void sparc_breakpoint(struct pt_regs *regs)
 #ifdef DEBUG_SPARC_BREAKPOINT
         printk ("TRAP: Entering kernel PC=%lx, nPC=%lx\n", regs->tpc, regs->tnpc);
 #endif
-       force_sig_fault(SIGTRAP, TRAP_BRKPT, (void __user *)regs->tpc, 0, current);
+       force_sig_fault(SIGTRAP, TRAP_BRKPT, (void __user *)regs->tpc, 0);
 #ifdef DEBUG_SPARC_BREAKPOINT
        printk ("TRAP: Returning to space: PC=%lx nPC=%lx\n", regs->tpc, regs->tnpc);
 #endif
index bcdfc6168dd58e9d9aca04e8fe2e8542ab20fb89..4ceecad556a9f8cb1ac377574a84a0bea6767527 100644 (file)
@@ -103,7 +103,7 @@ void do_hw_interrupt(struct pt_regs *regs, unsigned long type)
                die_if_kernel("Kernel bad trap", regs);
 
        force_sig_fault(SIGILL, ILL_ILLTRP,
-                       (void __user *)regs->pc, type - 0x80, current);
+                       (void __user *)regs->pc, type - 0x80);
 }
 
 void 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
        printk("Register Access Exception at PC %08lx NPC %08lx PSR %08lx\n",
               pc, npc, psr);
 #endif
-       force_sig_fault(SIGBUS, BUS_OBJERR, (void __user *)pc, 0, current);
+       force_sig_fault(SIGBUS, BUS_OBJERR, (void __user *)pc, 0);
 }
 
 void handle_cp_disabled(struct pt_regs *regs, unsigned long pc, unsigned long npc,
index 04aa588d5dd1b8cdea2cfbf523ade1923555751a..27778b65a965e23240a1a9a5a80cfbef4508bfd0 100644 (file)
@@ -108,7 +108,7 @@ void bad_trap(struct pt_regs *regs, long lvl)
                regs->tnpc &= 0xffffffff;
        }
        force_sig_fault(SIGILL, ILL_ILLTRP,
-                       (void __user *)regs->tpc, lvl, current);
+                       (void __user *)regs->tpc, lvl);
 }
 
 void 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
                regs->tnpc &= 0xffffffff;
        }
        force_sig_fault(SIGSEGV, SEGV_MAPERR,
-                       (void __user *)regs->tpc, 0, current);
+                       (void __user *)regs->tpc, 0);
 out:
        exception_exit(prev_state);
 }
@@ -237,7 +237,7 @@ void sun4v_insn_access_exception(struct pt_regs *regs, unsigned long addr, unsig
                regs->tpc &= 0xffffffff;
                regs->tnpc &= 0xffffffff;
        }
-       force_sig_fault(SIGSEGV, SEGV_MAPERR, (void __user *) addr, 0, current);
+       force_sig_fault(SIGSEGV, SEGV_MAPERR, (void __user *) addr, 0);
 }
 
 void 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
        if (is_no_fault_exception(regs))
                return;
 
-       force_sig_fault(SIGSEGV, SEGV_MAPERR, (void __user *)sfar, 0, current);
+       force_sig_fault(SIGSEGV, SEGV_MAPERR, (void __user *)sfar, 0);
 out:
        exception_exit(prev_state);
 }
@@ -386,16 +386,13 @@ void sun4v_data_access_exception(struct pt_regs *regs, unsigned long addr, unsig
         */
        switch (type) {
        case HV_FAULT_TYPE_INV_ASI:
-               force_sig_fault(SIGILL, ILL_ILLADR, (void __user *)addr, 0,
-                               current);
+               force_sig_fault(SIGILL, ILL_ILLADR, (void __user *)addr, 0);
                break;
        case HV_FAULT_TYPE_MCD_DIS:
-               force_sig_fault(SIGSEGV, SEGV_ACCADI, (void __user *)addr, 0,
-                               current);
+               force_sig_fault(SIGSEGV, SEGV_ACCADI, (void __user *)addr, 0);
                break;
        default:
-               force_sig_fault(SIGSEGV, SEGV_MAPERR, (void __user *)addr, 0,
-                               current);
+               force_sig_fault(SIGSEGV, SEGV_MAPERR, (void __user *)addr, 0);
                break;
        }
 }
@@ -572,7 +569,7 @@ static void spitfire_ue_log(unsigned long afsr, unsigned long afar, unsigned lon
                regs->tpc &= 0xffffffff;
                regs->tnpc &= 0xffffffff;
        }
-       force_sig_fault(SIGBUS, BUS_OBJERR, (void *)0, 0, current);
+       force_sig_fault(SIGBUS, BUS_OBJERR, (void *)0, 0);
 }
 
 void 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)
         * code
         */
        force_sig_fault(SIGSEGV, SEGV_ADIDERR, (void __user *)ent.err_raddr,
-                       0, current);
+                       0);
 }
 
 /* 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,
                                addr += PAGE_SIZE;
                        }
                }
-               force_sig(SIGKILL, current);
+               force_sig(SIGKILL);
 
                return true;
        }
        if (attrs & SUN4V_ERR_ATTRS_PIO) {
                force_sig_fault(SIGBUS, BUS_ADRERR,
-                               (void __user *)sun4v_get_vaddr(regs), 0, current);
+                               (void __user *)sun4v_get_vaddr(regs), 0);
                return true;
        }
 
@@ -2345,7 +2342,7 @@ static void do_fpe_common(struct pt_regs *regs)
                                code = FPE_FLTRES;
                }
                force_sig_fault(SIGFPE, code,
-                               (void __user *)regs->tpc, 0, current);
+                               (void __user *)regs->tpc, 0);
        }
 }
 
@@ -2400,7 +2397,7 @@ void do_tof(struct pt_regs *regs)
                regs->tnpc &= 0xffffffff;
        }
        force_sig_fault(SIGEMT, EMT_TAGOVF,
-                       (void __user *)regs->tpc, 0, current);
+                       (void __user *)regs->tpc, 0);
 out:
        exception_exit(prev_state);
 }
@@ -2420,7 +2417,7 @@ void do_div0(struct pt_regs *regs)
                regs->tnpc &= 0xffffffff;
        }
        force_sig_fault(SIGFPE, FPE_INTDIV,
-                       (void __user *)regs->tpc, 0, current);
+                       (void __user *)regs->tpc, 0);
 out:
        exception_exit(prev_state);
 }
@@ -2616,7 +2613,7 @@ void do_illegal_instruction(struct pt_regs *regs)
                        }
                }
        }
-       force_sig_fault(SIGILL, ILL_ILLOPC, (void __user *)pc, 0, current);
+       force_sig_fault(SIGILL, ILL_ILLOPC, (void __user *)pc, 0);
 out:
        exception_exit(prev_state);
 }
@@ -2636,7 +2633,7 @@ void mem_address_unaligned(struct pt_regs *regs, unsigned long sfar, unsigned lo
        if (is_no_fault_exception(regs))
                return;
 
-       force_sig_fault(SIGBUS, BUS_ADRALN, (void __user *)sfar, 0, current);
+       force_sig_fault(SIGBUS, BUS_ADRALN, (void __user *)sfar, 0);
 out:
        exception_exit(prev_state);
 }
@@ -2654,7 +2651,7 @@ void sun4v_do_mna(struct pt_regs *regs, unsigned long addr, unsigned long type_c
        if (is_no_fault_exception(regs))
                return;
 
-       force_sig_fault(SIGBUS, BUS_ADRALN, (void __user *) addr, 0, current);
+       force_sig_fault(SIGBUS, BUS_ADRALN, (void __user *) addr, 0);
 }
 
 /* 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,
                regs->tpc &= 0xffffffff;
                regs->tnpc &= 0xffffffff;
        }
-       force_sig_fault(SIGSEGV, SEGV_ADIPERR, (void __user *)addr, 0, current);
+       force_sig_fault(SIGSEGV, SEGV_ADIPERR, (void __user *)addr, 0);
 }
 
 void do_privop(struct pt_regs *regs)
@@ -2717,7 +2714,7 @@ void do_privop(struct pt_regs *regs)
                regs->tnpc &= 0xffffffff;
        }
        force_sig_fault(SIGILL, ILL_PRVOPC,
-                       (void __user *)regs->tpc, 0, current);
+                       (void __user *)regs->tpc, 0);
 out:
        exception_exit(prev_state);
 }
index b0440b0edd97b4af739c6aa53d49402bc8de2656..8d69de111470c6668d709857b755906f0802e91b 100644 (file)
@@ -131,7 +131,7 @@ static void __do_fault_siginfo(int code, int sig, struct pt_regs *regs,
                show_signal_msg(regs, sig, code,
                                addr, current);
 
-       force_sig_fault(sig, code, (void __user *) addr, 0, current);
+       force_sig_fault(sig, code, (void __user *) addr, 0);
 }
 
 static unsigned long compute_si_addr(struct pt_regs *regs, int text_fault)
@@ -425,7 +425,7 @@ do_sigbus:
 static void check_stack_aligned(unsigned long sp)
 {
        if (sp & 0x7UL)
-               force_sig(SIGILL, current);
+               force_sig(SIGILL);
 }
 
 void window_overflow_fault(void)
index 8f8a604c130023fb238408cedbb3f5a2a30c0a26..83fda4d9c3b240e0c2a004dfb50c3200469cd84c 100644 (file)
@@ -187,7 +187,7 @@ static void do_fault_siginfo(int code, int sig, struct pt_regs *regs,
        if (unlikely(show_unhandled_signals))
                show_signal_msg(regs, sig, code, addr, current);
 
-       force_sig_fault(sig, code, (void __user *) addr, 0, current);
+       force_sig_fault(sig, code, (void __user *) addr, 0);
 }
 
 static unsigned int get_fault_insn(struct pt_regs *regs, unsigned int insn)
index a43d42bf0a8640f13c39a9d61ca771103d93faab..783b9247161f3bfa2e684170864345d7e07909cd 100644 (file)
@@ -32,7 +32,7 @@ void flush_thread(void)
        if (ret) {
                printk(KERN_ERR "flush_thread - clearing address space failed, "
                       "err = %d\n", ret);
-               force_sig(SIGKILL, current);
+               force_sig(SIGKILL);
        }
        get_safe_registers(current_pt_regs()->regs.gp,
                           current_pt_regs()->regs.fp);
index 5f47422401e1e98d634d12882bd098a9c77a6207..da1e96b1ec3e27ac550d64f33a6214685e08b6f8 100644 (file)
@@ -112,13 +112,12 @@ long arch_ptrace(struct task_struct *child, long request,
        return ret;
 }
 
-static void send_sigtrap(struct task_struct *tsk, struct uml_pt_regs *regs,
-                 int error_code)
+static void send_sigtrap(struct uml_pt_regs *regs, int error_code)
 {
        /* Send us the fake SIGTRAP */
        force_sig_fault(SIGTRAP, TRAP_BRKPT,
                        /* User-mode eip? */
-                       UPT_IS_USER(regs) ? (void __user *) UPT_IP(regs) : NULL, tsk);
+                       UPT_IS_USER(regs) ? (void __user *) UPT_IP(regs) : NULL);
 }
 
 /*
@@ -147,7 +146,7 @@ void syscall_trace_leave(struct pt_regs *regs)
 
        /* Fake a debug trap */
        if (ptraced & PT_DTRACE)
-               send_sigtrap(current, &regs->regs, 0);
+               send_sigtrap(&regs->regs, 0);
 
        if (!test_thread_flag(TIF_SYSCALL_TRACE))
                return;
index 7a1f2a936fd10bc7cf38c4fef7b5aeabbfa28d10..29e7f5f9f18852df86d8c04f2c2cec619ee7da78 100644 (file)
@@ -119,7 +119,7 @@ void uml_setup_stubs(struct mm_struct *mm)
        return;
 
 out:
-       force_sigsegv(SIGSEGV, current);
+       force_sigsegv(SIGSEGV);
 }
 
 void arch_exit_mmap(struct mm_struct *mm)
index 8347161c2ae0fb0557dd7c008671d5d95c7c720a..45f739bf302f7e622330aa52b734288014b8085e 100644 (file)
@@ -329,7 +329,7 @@ void fix_range_common(struct mm_struct *mm, unsigned long start_addr,
                       "process: %d\n", task_tgid_vnr(current));
                /* We are under mmap_sem, release it such that current can terminate */
                up_write(&current->mm->mmap_sem);
-               force_sig(SIGKILL, current);
+               force_sig(SIGKILL);
                do_signal(&current->thread.regs);
        }
 }
@@ -487,7 +487,7 @@ void flush_tlb_page(struct vm_area_struct *vma, unsigned long address)
 
 kill:
        printk(KERN_ERR "Failed to flush page for address 0x%lx\n", address);
-       force_sig(SIGKILL, current);
+       force_sig(SIGKILL);
 }
 
 pgd_t *pgd_offset_proc(struct mm_struct *mm, unsigned long address)
index 0e8b6158f2245aa3babf94e9dfed8ceeb86f13cd..58fe36856182f5cc128d97c11dd84ec2923cf428 100644 (file)
@@ -163,13 +163,12 @@ static void show_segv_info(struct uml_pt_regs *regs)
 static void bad_segv(struct faultinfo fi, unsigned long ip)
 {
        current->thread.arch.faultinfo = fi;
-       force_sig_fault(SIGSEGV, SEGV_ACCERR, (void __user *) FAULT_ADDRESS(fi),
-                       current);
+       force_sig_fault(SIGSEGV, SEGV_ACCERR, (void __user *) FAULT_ADDRESS(fi));
 }
 
 void fatal_sigsegv(void)
 {
-       force_sigsegv(SIGSEGV, current);
+       force_sigsegv(SIGSEGV);
        do_signal(&current->thread.regs);
        /*
         * 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,
 
        if (err == -EACCES) {
                current->thread.arch.faultinfo = fi;
-               force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address,
-                               current);
+               force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address);
        } else {
                BUG_ON(err != -EFAULT);
                current->thread.arch.faultinfo = fi;
-               force_sig_fault(SIGSEGV, si_code, (void __user *) address,
-                               current);
+               force_sig_fault(SIGSEGV, si_code, (void __user *) address);
        }
 
 out:
@@ -304,12 +301,11 @@ void relay_signal(int sig, struct siginfo *si, struct uml_pt_regs *regs)
        if ((err == 0) && (siginfo_layout(sig, code) == SIL_FAULT)) {
                struct faultinfo *fi = UPT_FAULTINFO(regs);
                current->thread.arch.faultinfo = *fi;
-               force_sig_fault(sig, code, (void __user *)FAULT_ADDRESS(*fi),
-                               current);
+               force_sig_fault(sig, code, (void __user *)FAULT_ADDRESS(*fi));
        } else {
                printk(KERN_ERR "Attempted to relay unknown signal %d (si_code = %d) with errno %d\n",
                       sig, code, err);
-               force_sig(sig, current);
+               force_sig(sig);
        }
 }
 
index e62f82bd133906ae0797f769543d90d115fa2065..3946182a835dcc1d64d06355bcae34958aef928c 100644 (file)
@@ -126,7 +126,7 @@ asmlinkage int __sys_rt_sigreturn(struct pt_regs *regs)
        return regs->UCreg_00;
 
 badframe:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
        return 0;
 }
 
@@ -383,7 +383,7 @@ static void do_signal(struct pt_regs *regs, int syscall)
                                        regs->UCreg_pc = KERN_RESTART_CODE;
                                } else {
                                        regs->UCreg_sp += 4;
-                                       force_sigsegv(0, current);
+                                       force_sigsegv(0);
                                }
                }
                if (regs->UCreg_00 == -ERESTARTNOHAND ||
index 1c1f0ce20e19226c7d7d86cb5d16eb586deacfa9..e24f67283864cd3795f6c4ca984ec7b235861aac 100644 (file)
@@ -245,7 +245,7 @@ void uc32_notify_die(const char *str, struct pt_regs *regs,
                current->thread.error_code = err;
                current->thread.trap_no = trap;
 
-               force_sig_fault(sig, code, addr, current);
+               force_sig_fault(sig, code, addr);
        } else
                die(str, regs, err);
 }
index 33e0d8a267e8c3a7654bc90ab737f824d1763f42..76342de9cf8cbe026748cb06ce8c66440e6c4d6b 100644 (file)
@@ -113,14 +113,15 @@ static void __do_kernel_fault(struct mm_struct *mm, unsigned long addr,
  * Something tried to access memory that isn't in our memory map..
  * User mode accesses just cause a SIGSEGV
  */
-static void __do_user_fault(struct task_struct *tsk, unsigned long addr,
-               unsigned int fsr, unsigned int sig, int code,
-               struct pt_regs *regs)
+static void __do_user_fault(unsigned long addr, unsigned int fsr,
+                           unsigned int sig, int code, struct pt_regs *regs)
 {
+       struct task_struct *tsk = current;
+
        tsk->thread.address = addr;
        tsk->thread.error_code = fsr;
        tsk->thread.trap_no = 14;
-       force_sig_fault(sig, code, (void __user *)addr, tsk);
+       force_sig_fault(sig, code, (void __user *)addr);
 }
 
 void 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)
         * have no context to handle this fault with.
         */
        if (user_mode(regs))
-               __do_user_fault(tsk, addr, fsr, SIGSEGV, SEGV_MAPERR, regs);
+               __do_user_fault(addr, fsr, SIGSEGV, SEGV_MAPERR, regs);
        else
                __do_kernel_fault(mm, addr, fsr, regs);
 }
@@ -307,7 +308,7 @@ retry:
                code = fault == VM_FAULT_BADACCESS ? SEGV_ACCERR : SEGV_MAPERR;
        }
 
-       __do_user_fault(tsk, addr, fsr, sig, code, regs);
+       __do_user_fault(addr, fsr, sig, code, regs);
        return 0;
 
 no_context:
index 07003f3f1bfc991e860feb9628a4dd943a238d04..e7c596dea947e3e09f4c74aeac426cf3687cfe39 100644 (file)
@@ -110,7 +110,7 @@ static bool write_ok_or_segv(unsigned long ptr, size_t size)
                thread->cr2             = ptr;
                thread->trap_nr         = X86_TRAP_PF;
 
-               force_sig_fault(SIGSEGV, SEGV_MAPERR, (void __user *)ptr, current);
+               force_sig_fault(SIGSEGV, SEGV_MAPERR, (void __user *)ptr);
                return false;
        } else {
                return true;
@@ -289,7 +289,7 @@ do_ret:
        return true;
 
 sigsegv:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
        return true;
 }
 
index 3703c91f441ef75dd5f5f39e02d9e96f6508b122..78cf265c5b58ae132d927b1b0605abf939c0736b 100644 (file)
@@ -102,8 +102,7 @@ extern unsigned long profile_pc(struct pt_regs *regs);
 
 extern unsigned long
 convert_ip_to_linear(struct task_struct *child, struct pt_regs *regs);
-extern void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs,
-                        int error_code, int si_code);
+extern void send_sigtrap(struct pt_regs *regs, int error_code, int si_code);
 
 
 static inline unsigned long regs_return_value(struct pt_regs *regs)
index 066562a1ea20bf7efa3a5e93d7b1253b412b9427..743370ee49835650750e331c63ca985b8474e33b 100644 (file)
@@ -1348,7 +1348,7 @@ void do_machine_check(struct pt_regs *regs, long error_code)
                local_irq_enable();
 
                if (kill_it || do_memory_failure(&m))
-                       force_sig(SIGBUS, current);
+                       force_sig(SIGBUS);
                local_irq_disable();
                ist_end_non_atomic();
        } else {
index 8eb1e58de043176759f544ba4425b2e86df5aee4..71691a8310e77eac2f8061f1bda1e0ece14bc949 100644 (file)
@@ -1321,18 +1321,19 @@ const struct user_regset_view *task_user_regset_view(struct task_struct *task)
 #endif
 }
 
-void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs,
-                                        int error_code, int si_code)
+void send_sigtrap(struct pt_regs *regs, int error_code, int si_code)
 {
+       struct task_struct *tsk = current;
+
        tsk->thread.trap_nr = X86_TRAP_DB;
        tsk->thread.error_code = error_code;
 
        /* Send us the fake SIGTRAP */
        force_sig_fault(SIGTRAP, si_code,
-                       user_mode(regs) ? (void __user *)regs->ip : NULL, tsk);
+                       user_mode(regs) ? (void __user *)regs->ip : NULL);
 }
 
 void user_single_step_report(struct pt_regs *regs)
 {
-       send_sigtrap(current, regs, 0, TRAP_BRKPT);
+       send_sigtrap(regs, 0, TRAP_BRKPT);
 }
index 364813cea6476113d888ddd8a9ca428c55c3b955..7cf508f78c8cc2e5b5557c7acabeab73760e6237 100644 (file)
@@ -857,7 +857,7 @@ void signal_fault(struct pt_regs *regs, void __user *frame, char *where)
                pr_cont("\n");
        }
 
-       force_sig(SIGSEGV, me);
+       force_sig(SIGSEGV);
 }
 
 #ifdef CONFIG_X86_X32_ABI
index 8b6d03e55d2f79888c0aa9740c51bc486d8fa05f..87095a477154350c4695bb1a292e4f55f533507c 100644 (file)
@@ -254,9 +254,9 @@ do_trap(int trapnr, int signr, char *str, struct pt_regs *regs,
        show_signal(tsk, signr, "trap ", str, regs, error_code);
 
        if (!sicode)
-               force_sig(signr, tsk);
+               force_sig(signr);
        else
-               force_sig_fault(signr, sicode, addr, tsk);
+               force_sig_fault(signr, sicode, addr);
 }
 NOKPROBE_SYMBOL(do_trap);
 
@@ -566,7 +566,7 @@ do_general_protection(struct pt_regs *regs, long error_code)
 
        show_signal(tsk, SIGSEGV, "", desc, regs, error_code);
 
-       force_sig(SIGSEGV, tsk);
+       force_sig(SIGSEGV);
 }
 NOKPROBE_SYMBOL(do_general_protection);
 
@@ -805,7 +805,7 @@ dotraplinkage void do_debug(struct pt_regs *regs, long error_code)
        }
        si_code = get_si_code(tsk->thread.debugreg6);
        if (tsk->thread.debugreg6 & (DR_STEP | DR_TRAP_BITS) || user_icebp)
-               send_sigtrap(tsk, regs, error_code, si_code);
+               send_sigtrap(regs, error_code, si_code);
        cond_local_irq_disable(regs);
        debug_stack_usage_dec();
 
@@ -856,7 +856,7 @@ static void math_error(struct pt_regs *regs, int error_code, int trapnr)
                return;
 
        force_sig_fault(SIGFPE, si_code,
-                       (void __user *)uprobe_get_trap_addr(regs), task);
+                       (void __user *)uprobe_get_trap_addr(regs));
 }
 
 dotraplinkage void do_coprocessor_error(struct pt_regs *regs, long error_code)
index f8f3cfda01ae02cc5ec91bbf0adfe6477e60a05b..5b345add550f07e4fd0df227afa4428c3db2b188 100644 (file)
@@ -277,7 +277,7 @@ static void force_sig_info_umip_fault(void __user *addr, struct pt_regs *regs)
        tsk->thread.error_code  = X86_PF_USER | X86_PF_WRITE;
        tsk->thread.trap_nr     = X86_TRAP_PF;
 
-       force_sig_fault(SIGSEGV, SEGV_MAPERR, addr, tsk);
+       force_sig_fault(SIGSEGV, SEGV_MAPERR, addr);
 
        if (!(show_unhandled_signals && unhandled_signal(tsk, SIGSEGV)))
                return;
index 918b5092a85f7b2a5dd67b8202a31ac1de1e9bb7..d8359ebeea70c26bb7f621a3f8fea1ffb3fbb421 100644 (file)
@@ -1074,7 +1074,7 @@ arch_uretprobe_hijack_return_addr(unsigned long trampoline_vaddr, struct pt_regs
                pr_err("return address clobbered: pid=%d, %%sp=%#lx, %%ip=%#lx\n",
                       current->pid, regs->sp, regs->ip);
 
-               force_sig(SIGSEGV, current);
+               force_sig(SIGSEGV);
        }
 
        return -1;
index 6a38717d179c4bbb35d39badb2fa2ee53d9ee71e..a76c12b38e925a378cab92dba4ca5638dcf29645 100644 (file)
@@ -583,7 +583,7 @@ int handle_vm86_trap(struct kernel_vm86_regs *regs, long error_code, int trapno)
                return 1; /* we let this handle by the calling routine */
        current->thread.trap_nr = trapno;
        current->thread.error_code = error_code;
-       force_sig(SIGTRAP, current);
+       force_sig(SIGTRAP);
        return 0;
 }
 
index 58e4f1f00bbc10d601ac08fa1a7982768eb24618..794f364cb8829ef5a719cafbc26766e68d08ca9e 100644 (file)
@@ -760,8 +760,7 @@ no_context(struct pt_regs *regs, unsigned long error_code,
                        set_signal_archinfo(address, error_code);
 
                        /* XXX: hwpoison faults will set the wrong code. */
-                       force_sig_fault(signal, si_code, (void __user *)address,
-                                       tsk);
+                       force_sig_fault(signal, si_code, (void __user *)address);
                }
 
                /*
@@ -922,7 +921,7 @@ __bad_area_nosemaphore(struct pt_regs *regs, unsigned long error_code,
                if (si_code == SEGV_PKUERR)
                        force_sig_pkuerr((void __user *)address, pkey);
 
-               force_sig_fault(SIGSEGV, si_code, (void __user *)address, tsk);
+               force_sig_fault(SIGSEGV, si_code, (void __user *)address);
 
                return;
        }
@@ -1019,8 +1018,6 @@ static void
 do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address,
          vm_fault_t fault)
 {
-       struct task_struct *tsk = current;
-
        /* Kernel mode? Handle exceptions or die: */
        if (!(error_code & X86_PF_USER)) {
                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,
 
 #ifdef CONFIG_MEMORY_FAILURE
        if (fault & (VM_FAULT_HWPOISON|VM_FAULT_HWPOISON_LARGE)) {
+               struct task_struct *tsk = current;
                unsigned lsb = 0;
 
                pr_err(
@@ -1044,11 +1042,11 @@ do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address,
                        lsb = hstate_index_to_shift(VM_FAULT_GET_HINDEX(fault));
                if (fault & VM_FAULT_HWPOISON)
                        lsb = PAGE_SHIFT;
-               force_sig_mceerr(BUS_MCEERR_AR, (void __user *)address, lsb, tsk);
+               force_sig_mceerr(BUS_MCEERR_AR, (void __user *)address, lsb);
                return;
        }
 #endif
-       force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address, tsk);
+       force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)address);
 }
 
 static noinline void
index 0d1c47cbbdd68b3a969f6cd1ac347251f0812e78..895fb7a9294d4fa3a2c404fff42544f5710245c5 100644 (file)
@@ -912,7 +912,7 @@ void mpx_notify_unmap(struct mm_struct *mm, unsigned long start,
 
        ret = mpx_unmap_tables(mm, start, end);
        if (ret)
-               force_sig(SIGSEGV, current);
+               force_sig(SIGSEGV);
 }
 
 /* MPX cannot handle addresses above 47 bits yet. */
index 8b4a71efe7eef1c71e778bf17ff1929c6d68b0a8..7c11c9e5d7eaab730720847a8fe556716858068e 100644 (file)
@@ -471,7 +471,7 @@ long sys_sigreturn(void)
        return PT_REGS_SYSCALL_RET(&current->thread.regs);
 
  segfault:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
        return 0;
 }
 
@@ -577,6 +577,6 @@ long sys_rt_sigreturn(void)
        return PT_REGS_SYSCALL_RET(&current->thread.regs);
 
  segfault:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
        return 0;
 }
index dc22a238ed9c18d59f8d2721cc1fab16b41bfdae..fbedf2aba09dcb69d4e60df107cce1d7dea8daab 100644 (file)
@@ -270,7 +270,7 @@ asmlinkage long xtensa_rt_sigreturn(long a0, long a1, long a2, long a3,
        return ret;
 
 badframe:
-       force_sig(SIGSEGV, current);
+       force_sig(SIGSEGV);
        return 0;
 }
 
index 454d53096bc996b174d322967fa78c3ec0cc9d7f..f060348c1b233a04373294dad0d834e0a129f60d 100644 (file)
@@ -184,7 +184,7 @@ void do_unhandled(struct pt_regs *regs, unsigned long exccause)
                            "\tEXCCAUSE is %ld\n",
                            current->comm, task_pid_nr(current), regs->pc,
                            exccause);
-       force_sig(SIGILL, current);
+       force_sig(SIGILL);
 }
 
 /*
@@ -306,7 +306,7 @@ do_illegal_instruction(struct pt_regs *regs)
 
        pr_info_ratelimited("Illegal Instruction in '%s' (pid = %d, pc = %#010lx)\n",
                            current->comm, task_pid_nr(current), regs->pc);
-       force_sig(SIGILL, current);
+       force_sig(SIGILL);
 }
 
 
@@ -330,7 +330,7 @@ do_unaligned_user (struct pt_regs *regs)
                            "(pid = %d, pc = %#010lx)\n",
                            regs->excvaddr, current->comm,
                            task_pid_nr(current), regs->pc);
-       force_sig_fault(SIGBUS, BUS_ADRALN, (void *) regs->excvaddr, current);
+       force_sig_fault(SIGBUS, BUS_ADRALN, (void *) regs->excvaddr);
 }
 #endif
 
@@ -354,7 +354,7 @@ do_debug(struct pt_regs *regs)
 
        /* If in user mode, send SIGTRAP signal to current process */
 
-       force_sig(SIGTRAP, current);
+       force_sig(SIGTRAP);
 }
 
 
index 2ab0e0dcd1668bce6fb9ea6f9035d99d13458ed3..f81b1478da61bf1b62a2fe72fff3be01a18b6050 100644 (file)
@@ -157,7 +157,7 @@ bad_area:
        if (user_mode(regs)) {
                current->thread.bad_vaddr = address;
                current->thread.error_code = is_write;
-               force_sig_fault(SIGSEGV, code, (void *) address, current);
+               force_sig_fault(SIGSEGV, code, (void *) address);
                return;
        }
        bad_page_fault(regs, address, SIGSEGV);
@@ -182,7 +182,7 @@ do_sigbus:
         * or user mode.
         */
        current->thread.bad_vaddr = address;
-       force_sig_fault(SIGBUS, BUS_ADRERR, (void *) address, current);
+       force_sig_fault(SIGBUS, BUS_ADRERR, (void *) address);
 
        /* Kernel mode? Handle exceptions or die */
        if (!user_mode(regs))
index 31237f45247a6c27daf411cab8860d54d4c340b4..ddbf56014c51a906349fbc85fbd75a7d627e757d 100644 (file)
@@ -1960,7 +1960,7 @@ static inline void wake_ack_receiver(struct drbd_connection *connection)
 {
        struct task_struct *task = connection->ack_receiver.task;
        if (task && get_t_state(&connection->ack_receiver) == RUNNING)
-               force_sig(SIGXCPU, task);
+               send_sig(SIGXCPU, task, 1);
 }
 
 static inline void request_ping(struct drbd_connection *connection)
index 541b31fa42b377279ce389e793dbc2ac85bdbc7a..9604127dc839ddfc566a8eae106eb7a26e25dd8c 100644 (file)
@@ -465,7 +465,7 @@ void _drbd_thread_stop(struct drbd_thread *thi, int restart, int wait)
                smp_mb();
                init_completion(&thi->stop);
                if (thi->task != current)
-                       force_sig(DRBD_SIGKILL, thi->task);
+                       send_sig(DRBD_SIGKILL, thi->task, 1);
        }
 
        spin_unlock_irqrestore(&thi->t_lock, flags);
index cdd748b8116dbf42a154fc0a500a74f04580b437..5d52a2d321559ed60b04d4fd57f2523233bffa0c 100644 (file)
@@ -599,7 +599,7 @@ void conn_try_outdate_peer_async(struct drbd_connection *connection)
        struct task_struct *opa;
 
        kref_get(&connection->kref);
-       /* We may just have force_sig()'ed this thread
+       /* We may have just sent a signal to this thread
         * to get it out of some blocking network function.
         * Clear signals; otherwise kthread_run(), which internally uses
         * wait_on_completion_killable(), will mistake our pending signal
index 17f839dee976626561ed3f780e5fb491dfdaed4b..d9fcfd3b5af0ad27ebaaf83ed870083aa3525ffb 100644 (file)
@@ -236,7 +236,7 @@ void lkdtm_CORRUPT_USER_DS(void)
        set_fs(KERNEL_DS);
 
        /* Make sure we do not keep running with a KERNEL_DS! */
-       force_sig(SIGKILL, current);
+       force_sig(SIGKILL);
 }
 
 /* Test that VMAP_STACK is actually allocating with a leading guard page */
index fa783531ee889140d580e19a489cede393f12a10..a02448105527436603d94e323788fdff60f17776 100644 (file)
@@ -63,7 +63,7 @@ struct usb_dev_state {
        unsigned int discsignr;
        struct pid *disc_pid;
        const struct cred *cred;
-       void __user *disccontext;
+       sigval_t disccontext;
        unsigned long ifclaimed;
        u32 disabled_bulk_eps;
        bool privileges_dropped;
@@ -90,6 +90,7 @@ struct async {
        unsigned int ifnum;
        void __user *userbuffer;
        void __user *userurb;
+       sigval_t userurb_sigval;
        struct urb *urb;
        struct usb_memory *usbm;
        unsigned int mem_usage;
@@ -582,22 +583,19 @@ static void async_completed(struct urb *urb)
 {
        struct async *as = urb->context;
        struct usb_dev_state *ps = as->ps;
-       struct kernel_siginfo sinfo;
        struct pid *pid = NULL;
        const struct cred *cred = NULL;
        unsigned long flags;
-       int signr;
+       sigval_t addr;
+       int signr, errno;
 
        spin_lock_irqsave(&ps->lock, flags);
        list_move_tail(&as->asynclist, &ps->async_completed);
        as->status = urb->status;
        signr = as->signr;
        if (signr) {
-               clear_siginfo(&sinfo);
-               sinfo.si_signo = as->signr;
-               sinfo.si_errno = as->status;
-               sinfo.si_code = SI_ASYNCIO;
-               sinfo.si_addr = as->userurb;
+               errno = as->status;
+               addr = as->userurb_sigval;
                pid = get_pid(as->pid);
                cred = get_cred(as->cred);
        }
@@ -615,7 +613,7 @@ static void async_completed(struct urb *urb)
        spin_unlock_irqrestore(&ps->lock, flags);
 
        if (signr) {
-               kill_pid_info_as_cred(sinfo.si_signo, &sinfo, pid, cred);
+               kill_pid_usb_asyncio(signr, errno, addr, pid, cred);
                put_pid(pid);
                put_cred(cred);
        }
@@ -1427,7 +1425,7 @@ find_memory_area(struct usb_dev_state *ps, const struct usbdevfs_urb *uurb)
 
 static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurb,
                        struct usbdevfs_iso_packet_desc __user *iso_frame_desc,
-                       void __user *arg)
+                       void __user *arg, sigval_t userurb_sigval)
 {
        struct usbdevfs_iso_packet_desc *isopkt = NULL;
        struct usb_host_endpoint *ep;
@@ -1727,6 +1725,7 @@ static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurb
        isopkt = NULL;
        as->ps = ps;
        as->userurb = arg;
+       as->userurb_sigval = userurb_sigval;
        if (as->usbm) {
                unsigned long uurb_start = (unsigned long)uurb->buffer;
 
@@ -1801,13 +1800,17 @@ static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurb
 static int proc_submiturb(struct usb_dev_state *ps, void __user *arg)
 {
        struct usbdevfs_urb uurb;
+       sigval_t userurb_sigval;
 
        if (copy_from_user(&uurb, arg, sizeof(uurb)))
                return -EFAULT;
 
+       memset(&userurb_sigval, 0, sizeof(userurb_sigval));
+       userurb_sigval.sival_ptr = arg;
+
        return proc_do_submiturb(ps, &uurb,
                        (((struct usbdevfs_urb __user *)arg)->iso_frame_desc),
-                       arg);
+                       arg, userurb_sigval);
 }
 
 static 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
        if (copy_from_user(&ds, arg, sizeof(ds)))
                return -EFAULT;
        ps->discsignr = ds.signr;
-       ps->disccontext = compat_ptr(ds.context);
+       ps->disccontext.sival_int = ds.context;
        return 0;
 }
 
@@ -2005,13 +2008,17 @@ static int get_urb32(struct usbdevfs_urb *kurb,
 static int proc_submiturb_compat(struct usb_dev_state *ps, void __user *arg)
 {
        struct usbdevfs_urb uurb;
+       sigval_t userurb_sigval;
 
        if (get_urb32(&uurb, (struct usbdevfs_urb32 __user *)arg))
                return -EFAULT;
 
+       memset(&userurb_sigval, 0, sizeof(userurb_sigval));
+       userurb_sigval.sival_int = ptr_to_compat(arg);
+
        return proc_do_submiturb(ps, &uurb,
                        ((struct usbdevfs_urb32 __user *)arg)->iso_frame_desc,
-                       arg);
+                       arg, userurb_sigval);
 }
 
 static 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)
        if (copy_from_user(&ds, arg, sizeof(ds)))
                return -EFAULT;
        ps->discsignr = ds.signr;
-       ps->disccontext = ds.context;
+       ps->disccontext.sival_ptr = ds.context;
        return 0;
 }
 
@@ -2614,22 +2621,15 @@ const struct file_operations usbdev_file_operations = {
 static void usbdev_remove(struct usb_device *udev)
 {
        struct usb_dev_state *ps;
-       struct kernel_siginfo sinfo;
 
        while (!list_empty(&udev->filelist)) {
                ps = list_entry(udev->filelist.next, struct usb_dev_state, list);
                destroy_all_async(ps);
                wake_up_all(&ps->wait);
                list_del_init(&ps->list);
-               if (ps->discsignr) {
-                       clear_siginfo(&sinfo);
-                       sinfo.si_signo = ps->discsignr;
-                       sinfo.si_errno = EPIPE;
-                       sinfo.si_code = SI_ASYNCIO;
-                       sinfo.si_addr = ps->disccontext;
-                       kill_pid_info_as_cred(ps->discsignr, &sinfo,
-                                       ps->disc_pid, ps->cred);
-               }
+               if (ps->discsignr)
+                       kill_pid_usb_asyncio(ps->discsignr, EPIPE, ps->disccontext,
+                                            ps->disc_pid, ps->cred);
        }
 }
 
index 93f7082daf526c6aeedfca5f405692459267903d..ae6bae2ecb5dbc0081764b9ff8e79874b82a0006 100644 (file)
@@ -2631,7 +2631,7 @@ cifs_put_tcp_session(struct TCP_Server_Info *server, int from_reconnect)
 
        task = xchg(&server->tsk, NULL);
        if (task)
-               force_sig(SIGKILL, task);
+               send_sig(SIGKILL, task, 1);
 }
 
 static struct TCP_Server_Info *
index 89a500bb897a6f80a0d833ade80bf3f6f18b2c01..c71cbfe6826a5165577057000393be299613df5b 100644 (file)
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -1663,7 +1663,7 @@ int search_binary_handler(struct linux_binprm *bprm)
                if (retval < 0 && !bprm->mm) {
                        /* we got to flush_old_exec() and failed after it */
                        read_unlock(&binfmt_lock);
-                       force_sigsegv(SIGSEGV, current);
+                       force_sigsegv(SIGSEGV);
                        return retval;
                }
                if (retval != -ENOEXEC || !bprm->file) {
index d5084ebd9f03045e7706872d0db88c3b06d88847..2a9df80ea8876aac5c8c7ca1d7e00131b6332c63 100644 (file)
@@ -355,7 +355,7 @@ static inline void user_single_step_report(struct pt_regs *regs)
        info.si_code = SI_USER;
        info.si_pid = 0;
        info.si_uid = 0;
-       force_sig_info(info.si_signo, &info, current);
+       force_sig_info(&info);
 }
 #endif
 
index 38a0f0785323759dcf9c0dcdc8b0a897600c61e4..532458698bde2012d51625c2b29fc0d59cada6c7 100644 (file)
@@ -307,16 +307,19 @@ static inline void kernel_signal_stop(void)
 # define ___ARCH_SI_IA64(_a1, _a2, _a3)
 #endif
 
-int force_sig_fault(int sig, int code, void __user *addr
+int force_sig_fault_to_task(int sig, int code, void __user *addr
        ___ARCH_SI_TRAPNO(int trapno)
        ___ARCH_SI_IA64(int imm, unsigned int flags, unsigned long isr)
        , struct task_struct *t);
+int force_sig_fault(int sig, int code, void __user *addr
+       ___ARCH_SI_TRAPNO(int trapno)
+       ___ARCH_SI_IA64(int imm, unsigned int flags, unsigned long isr));
 int send_sig_fault(int sig, int code, void __user *addr
        ___ARCH_SI_TRAPNO(int trapno)
        ___ARCH_SI_IA64(int imm, unsigned int flags, unsigned long isr)
        , struct task_struct *t);
 
-int force_sig_mceerr(int code, void __user *, short, struct task_struct *);
+int force_sig_mceerr(int code, void __user *, short);
 int send_sig_mceerr(int code, void __user *, short, struct task_struct *);
 
 int 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);
 int force_sig_ptrace_errno_trap(int errno, void __user *addr);
 
 extern int send_sig_info(int, struct kernel_siginfo *, struct task_struct *);
-extern void force_sigsegv(int sig, struct task_struct *p);
-extern int force_sig_info(int, struct kernel_siginfo *, struct task_struct *);
+extern void force_sigsegv(int sig);
+extern int force_sig_info(struct kernel_siginfo *);
 extern int __kill_pgrp_info(int sig, struct kernel_siginfo *info, struct pid *pgrp);
 extern int kill_pid_info(int sig, struct kernel_siginfo *info, struct pid *pid);
-extern int kill_pid_info_as_cred(int, struct kernel_siginfo *, struct pid *,
+extern int kill_pid_usb_asyncio(int sig, int errno, sigval_t addr, struct pid *,
                                const struct cred *);
 extern int kill_pgrp(struct pid *pid, int sig, int priv);
 extern int kill_pid(struct pid *pid, int sig, int priv);
 extern __must_check bool do_notify_parent(struct task_struct *, int);
 extern void __wake_up_parent(struct task_struct *p, struct task_struct *parent);
-extern void force_sig(int, struct task_struct *);
+extern void force_sig(int);
 extern int send_sig(int, struct task_struct *, int);
 extern int zap_other_threads(struct task_struct *p);
 extern struct sigqueue *sigqueue_alloc(void);
index 2bcef4c701830503f0c59efc5c3422ac41aff9c2..bc4bbbb9ed9a257cdd90c04df7e6ab0340eadcb2 100644 (file)
@@ -264,7 +264,7 @@ static inline void addr_limit_user_check(void)
 
        if (CHECK_DATA_CORRUPTION(!segment_eq(get_fs(), USER_DS),
                                  "Invalid address limit on user-mode return"))
-               force_sig(SIGKILL, current);
+               force_sig(SIGKILL);
 
 #ifdef TIF_FSCHECK
        clear_thread_flag(TIF_FSCHECK);
index 97c367f0a9aa40cccf4a43772a92e33380e5f000..84fa00497c49f9f8d30538a75b9bb3d6727968a6 100644 (file)
@@ -2112,7 +2112,7 @@ static void handle_trampoline(struct pt_regs *regs)
 
  sigill:
        uprobe_warn(current, "handle uretprobe, sending SIGILL.");
-       force_sig(SIGILL, current);
+       force_sig(SIGILL);
 
 }
 
@@ -2228,7 +2228,7 @@ static void handle_singlestep(struct uprobe_task *utask, struct pt_regs *regs)
 
        if (unlikely(err)) {
                uprobe_warn(current, "execute the probed insn, sending SIGILL.");
-               force_sig(SIGILL, current);
+               force_sig(SIGILL);
        }
 }
 
index f54bc7cb6c2dc4bae05fc54586335f7574c9466d..6d726cef241cc82a252090ad70bde2c4af0cff94 100644 (file)
@@ -326,7 +326,7 @@ int reboot_pid_ns(struct pid_namespace *pid_ns, int cmd)
        }
 
        read_lock(&tasklist_lock);
-       force_sig(SIGKILL, pid_ns->child_reaper);
+       send_sig(SIGKILL, pid_ns->child_reaper, 1);
        read_unlock(&tasklist_lock);
 
        do_exit(0);
index 9424ee90589effcc841ead2bd0f5ddb20e646a17..27c48eb7de4025f94653c86878652ad57e660427 100644 (file)
@@ -277,7 +277,7 @@ void __rseq_handle_notify_resume(struct ksignal *ksig, struct pt_regs *regs)
 
 error:
        sig = ksig ? ksig->sig : 0;
-       force_sigsegv(sig, t);
+       force_sigsegv(sig);
 }
 
 #ifdef CONFIG_DEBUG_RSEQ
@@ -296,7 +296,7 @@ void rseq_syscall(struct pt_regs *regs)
                return;
        if (!access_ok(t->rseq, sizeof(*t->rseq)) ||
            rseq_get_rseq_cs(t, &rseq_cs) || in_rseq_cs(ip, &rseq_cs))
-               force_sig(SIGSEGV, t);
+               force_sig(SIGSEGV);
 }
 
 #endif
index 811b4a86cdf6b5de2ed39c02d0efa71fd7409d7d..dba52a7db5e80f7caed0df0d1ab88f0c248df09a 100644 (file)
@@ -609,7 +609,7 @@ static void seccomp_send_sigsys(int syscall, int reason)
 {
        struct kernel_siginfo info;
        seccomp_init_siginfo(&info, syscall, reason);
-       force_sig_info(SIGSYS, &info, current);
+       force_sig_info(&info);
 }
 #endif /* CONFIG_SECCOMP_FILTER */
 
index 35e97f4073c26044f5fda5cfcf971036b53d54df..91cb8ca41954ad4559e95c627f3189dba651ac53 100644 (file)
@@ -1057,29 +1057,8 @@ static inline bool legacy_queue(struct sigpending *signals, int sig)
        return (sig < SIGRTMIN) && sigismember(&signals->signal, sig);
 }
 
-#ifdef CONFIG_USER_NS
-static inline void userns_fixup_signal_uid(struct kernel_siginfo *info, struct task_struct *t)
-{
-       if (current_user_ns() == task_cred_xxx(t, user_ns))
-               return;
-
-       if (SI_FROMKERNEL(info))
-               return;
-
-       rcu_read_lock();
-       info->si_uid = from_kuid_munged(task_cred_xxx(t, user_ns),
-                                       make_kuid(current_user_ns(), info->si_uid));
-       rcu_read_unlock();
-}
-#else
-static inline void userns_fixup_signal_uid(struct kernel_siginfo *info, struct task_struct *t)
-{
-       return;
-}
-#endif
-
 static int __send_signal(int sig, struct kernel_siginfo *info, struct task_struct *t,
-                       enum pid_type type, int from_ancestor_ns)
+                       enum pid_type type, bool force)
 {
        struct sigpending *pending;
        struct sigqueue *q;
@@ -1089,8 +1068,7 @@ static int __send_signal(int sig, struct kernel_siginfo *info, struct task_struc
        assert_spin_locked(&t->sighand->siglock);
 
        result = TRACE_SIGNAL_IGNORED;
-       if (!prepare_signal(sig, t,
-                       from_ancestor_ns || (info == SEND_SIG_PRIV)))
+       if (!prepare_signal(sig, t, force))
                goto ret;
 
        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
                        q->info.si_code = SI_USER;
                        q->info.si_pid = task_tgid_nr_ns(current,
                                                        task_active_pid_ns(t));
-                       q->info.si_uid = from_kuid_munged(current_user_ns(), current_uid());
+                       rcu_read_lock();
+                       q->info.si_uid =
+                               from_kuid_munged(task_cred_xxx(t, user_ns),
+                                                current_uid());
+                       rcu_read_unlock();
                        break;
                case (unsigned long) SEND_SIG_PRIV:
                        clear_siginfo(&q->info);
@@ -1147,30 +1129,24 @@ static int __send_signal(int sig, struct kernel_siginfo *info, struct task_struc
                        break;
                default:
                        copy_siginfo(&q->info, info);
-                       if (from_ancestor_ns)
-                               q->info.si_pid = 0;
                        break;
                }
-
-               userns_fixup_signal_uid(&q->info, t);
-
-       } else if (!is_si_special(info)) {
-               if (sig >= SIGRTMIN && info->si_code != SI_USER) {
-                       /*
-                        * Queue overflow, abort.  We may abort if the
-                        * signal was rt and sent by user using something
-                        * other than kill().
-                        */
-                       result = TRACE_SIGNAL_OVERFLOW_FAIL;
-                       ret = -EAGAIN;
-                       goto ret;
-               } else {
-                       /*
-                        * This is a silent loss of information.  We still
-                        * send the signal, but the *info bits are lost.
-                        */
-                       result = TRACE_SIGNAL_LOSE_INFO;
-               }
+       } else if (!is_si_special(info) &&
+                  sig >= SIGRTMIN && info->si_code != SI_USER) {
+               /*
+                * Queue overflow, abort.  We may abort if the
+                * signal was rt and sent by user using something
+                * other than kill().
+                */
+               result = TRACE_SIGNAL_OVERFLOW_FAIL;
+               ret = -EAGAIN;
+               goto ret;
+       } else {
+               /*
+                * This is a silent loss of information.  We still
+                * send the signal, but the *info bits are lost.
+                */
+               result = TRACE_SIGNAL_LOSE_INFO;
        }
 
 out_set:
@@ -1197,17 +1173,62 @@ ret:
        return ret;
 }
 
+static inline bool has_si_pid_and_uid(struct kernel_siginfo *info)
+{
+       bool ret = false;
+       switch (siginfo_layout(info->si_signo, info->si_code)) {
+       case SIL_KILL:
+       case SIL_CHLD:
+       case SIL_RT:
+               ret = true;
+               break;
+       case SIL_TIMER:
+       case SIL_POLL:
+       case SIL_FAULT:
+       case SIL_FAULT_MCEERR:
+       case SIL_FAULT_BNDERR:
+       case SIL_FAULT_PKUERR:
+       case SIL_SYS:
+               ret = false;
+               break;
+       }
+       return ret;
+}
+
 static int send_signal(int sig, struct kernel_siginfo *info, struct task_struct *t,
                        enum pid_type type)
 {
-       int from_ancestor_ns = 0;
+       /* Should SIGKILL or SIGSTOP be received by a pid namespace init? */
+       bool force = false;
 
-#ifdef CONFIG_PID_NS
-       from_ancestor_ns = si_fromuser(info) &&
-                          !task_pid_nr_ns(current, task_active_pid_ns(t));
-#endif
+       if (info == SEND_SIG_NOINFO) {
+               /* Force if sent from an ancestor pid namespace */
+               force = !task_pid_nr_ns(current, task_active_pid_ns(t));
+       } else if (info == SEND_SIG_PRIV) {
+               /* Don't ignore kernel generated signals */
+               force = true;
+       } else if (has_si_pid_and_uid(info)) {
+               /* SIGKILL and SIGSTOP is special or has ids */
+               struct user_namespace *t_user_ns;
+
+               rcu_read_lock();
+               t_user_ns = task_cred_xxx(t, user_ns);
+               if (current_user_ns() != t_user_ns) {
+                       kuid_t uid = make_kuid(current_user_ns(), info->si_uid);
+                       info->si_uid = from_kuid_munged(t_user_ns, uid);
+               }
+               rcu_read_unlock();
 
-       return __send_signal(sig, info, t, type, from_ancestor_ns);
+               /* A kernel generated signal? */
+               force = (info->si_code == SI_KERNEL);
+
+               /* From an ancestor pid namespace? */
+               if (!task_pid_nr_ns(current, task_active_pid_ns(t))) {
+                       info->si_pid = 0;
+                       force = true;
+               }
+       }
+       return __send_signal(sig, info, t, type, force);
 }
 
 static 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
  * We don't want to have recursive SIGSEGV's etc, for example,
  * that is why we also clear SIGNAL_UNKILLABLE.
  */
-int
-force_sig_info(int sig, struct kernel_siginfo *info, struct task_struct *t)
+static int
+force_sig_info_to_task(struct kernel_siginfo *info, struct task_struct *t)
 {
        unsigned long int flags;
        int ret, blocked, ignored;
        struct k_sigaction *action;
+       int sig = info->si_signo;
 
        spin_lock_irqsave(&t->sighand->siglock, flags);
        action = &t->sighand->action[sig-1];
@@ -1304,6 +1326,11 @@ force_sig_info(int sig, struct kernel_siginfo *info, struct task_struct *t)
        return ret;
 }
 
+int force_sig_info(struct kernel_siginfo *info)
+{
+       return force_sig_info_to_task(info, current);
+}
+
 /*
  * Nuke all other threads in the group.
  */
@@ -1440,13 +1467,44 @@ static inline bool kill_as_cred_perm(const struct cred *cred,
               uid_eq(cred->uid, pcred->uid);
 }
 
-/* like kill_pid_info(), but doesn't use uid/euid of "current" */
-int kill_pid_info_as_cred(int sig, struct kernel_siginfo *info, struct pid *pid,
-                        const struct cred *cred)
+/*
+ * The usb asyncio usage of siginfo is wrong.  The glibc support
+ * for asyncio which uses SI_ASYNCIO assumes the layout is SIL_RT.
+ * AKA after the generic fields:
+ *     kernel_pid_t    si_pid;
+ *     kernel_uid32_t  si_uid;
+ *     sigval_t        si_value;
+ *
+ * Unfortunately when usb generates SI_ASYNCIO it assumes the layout
+ * after the generic fields is:
+ *     void __user     *si_addr;
+ *
+ * This is a practical problem when there is a 64bit big endian kernel
+ * and a 32bit userspace.  As the 32bit address will encoded in the low
+ * 32bits of the pointer.  Those low 32bits will be stored at higher
+ * address than appear in a 32 bit pointer.  So userspace will not
+ * see the address it was expecting for it's completions.
+ *
+ * There is nothing in the encoding that can allow
+ * copy_siginfo_to_user32 to detect this confusion of formats, so
+ * handle this by requiring the caller of kill_pid_usb_asyncio to
+ * notice when this situration takes place and to store the 32bit
+ * pointer in sival_int, instead of sival_addr of the sigval_t addr
+ * parameter.
+ */
+int kill_pid_usb_asyncio(int sig, int errno, sigval_t addr,
+                        struct pid *pid, const struct cred *cred)
 {
-       int ret = -EINVAL;
+       struct kernel_siginfo info;
        struct task_struct *p;
        unsigned long flags;
+       int ret = -EINVAL;
+
+       clear_siginfo(&info);
+       info.si_signo = sig;
+       info.si_errno = errno;
+       info.si_code = SI_ASYNCIO;
+       *((sigval_t *)&info.si_pid) = addr;
 
        if (!valid_signal(sig))
                return ret;
@@ -1457,17 +1515,17 @@ int kill_pid_info_as_cred(int sig, struct kernel_siginfo *info, struct pid *pid,
                ret = -ESRCH;
                goto out_unlock;
        }
-       if (si_fromuser(info) && !kill_as_cred_perm(cred, p)) {
+       if (!kill_as_cred_perm(cred, p)) {
                ret = -EPERM;
                goto out_unlock;
        }
-       ret = security_task_kill(p, info, sig, cred);
+       ret = security_task_kill(p, &info, sig, cred);
        if (ret)
                goto out_unlock;
 
        if (sig) {
                if (lock_task_sighand(p, &flags)) {
-                       ret = __send_signal(sig, info, p, PIDTYPE_TGID, 0);
+                       ret = __send_signal(sig, &info, p, PIDTYPE_TGID, false);
                        unlock_task_sighand(p, &flags);
                } else
                        ret = -ESRCH;
@@ -1476,7 +1534,7 @@ out_unlock:
        rcu_read_unlock();
        return ret;
 }
-EXPORT_SYMBOL_GPL(kill_pid_info_as_cred);
+EXPORT_SYMBOL_GPL(kill_pid_usb_asyncio);
 
 /*
  * 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)
 }
 EXPORT_SYMBOL(send_sig);
 
-void force_sig(int sig, struct task_struct *p)
+void force_sig(int sig)
 {
-       force_sig_info(sig, SEND_SIG_PRIV, p);
+       struct kernel_siginfo info;
+
+       clear_siginfo(&info);
+       info.si_signo = sig;
+       info.si_errno = 0;
+       info.si_code = SI_KERNEL;
+       info.si_pid = 0;
+       info.si_uid = 0;
+       force_sig_info(&info);
 }
 EXPORT_SYMBOL(force_sig);
 
@@ -1564,18 +1630,20 @@ EXPORT_SYMBOL(force_sig);
  * the problem was already a SIGSEGV, we'll want to
  * make sure we don't even try to deliver the signal..
  */
-void force_sigsegv(int sig, struct task_struct *p)
+void force_sigsegv(int sig)
 {
+       struct task_struct *p = current;
+
        if (sig == SIGSEGV) {
                unsigned long flags;
                spin_lock_irqsave(&p->sighand->siglock, flags);
                p->sighand->action[sig - 1].sa.sa_handler = SIG_DFL;
                spin_unlock_irqrestore(&p->sighand->siglock, flags);
        }
-       force_sig(SIGSEGV, p);
+       force_sig(SIGSEGV);
 }
 
-int force_sig_fault(int sig, int code, void __user *addr
+int force_sig_fault_to_task(int sig, int code, void __user *addr
        ___ARCH_SI_TRAPNO(int trapno)
        ___ARCH_SI_IA64(int imm, unsigned int flags, unsigned long isr)
        , struct task_struct *t)
@@ -1595,7 +1663,16 @@ int force_sig_fault(int sig, int code, void __user *addr
        info.si_flags = flags;
        info.si_isr = isr;
 #endif
-       return force_sig_info(info.si_signo, &info, t);
+       return force_sig_info_to_task(&info, t);
+}
+
+int force_sig_fault(int sig, int code, void __user *addr
+       ___ARCH_SI_TRAPNO(int trapno)
+       ___ARCH_SI_IA64(int imm, unsigned int flags, unsigned long isr))
+{
+       return force_sig_fault_to_task(sig, code, addr
+                                      ___ARCH_SI_TRAPNO(trapno)
+                                      ___ARCH_SI_IA64(imm, flags, isr), current);
 }
 
 int 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
        return send_sig_info(info.si_signo, &info, t);
 }
 
-int force_sig_mceerr(int code, void __user *addr, short lsb, struct task_struct *t)
+int force_sig_mceerr(int code, void __user *addr, short lsb)
 {
        struct kernel_siginfo info;
 
@@ -1632,7 +1709,7 @@ int force_sig_mceerr(int code, void __user *addr, short lsb, struct task_struct
        info.si_code = code;
        info.si_addr = addr;
        info.si_addr_lsb = lsb;
-       return force_sig_info(info.si_signo, &info, t);
+       return force_sig_info(&info);
 }
 
 int 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)
        info.si_addr  = addr;
        info.si_lower = lower;
        info.si_upper = upper;
-       return force_sig_info(info.si_signo, &info, current);
+       return force_sig_info(&info);
 }
 
 #ifdef SEGV_PKUERR
@@ -1675,7 +1752,7 @@ int force_sig_pkuerr(void __user *addr, u32 pkey)
        info.si_code  = SEGV_PKUERR;
        info.si_addr  = addr;
        info.si_pkey  = pkey;
-       return force_sig_info(info.si_signo, &info, current);
+       return force_sig_info(&info);
 }
 #endif
 
@@ -1691,7 +1768,7 @@ int force_sig_ptrace_errno_trap(int errno, void __user *addr)
        info.si_errno = errno;
        info.si_code  = TRAP_HWBKPT;
        info.si_addr  = addr;
-       return force_sig_info(info.si_signo, &info, current);
+       return force_sig_info(&info);
 }
 
 int kill_pgrp(struct pid *pid, int sig, int priv)
@@ -2676,7 +2753,7 @@ static void signal_delivered(struct ksignal *ksig, int stepping)
 void signal_setup_done(int failed, struct ksignal *ksig, int stepping)
 {
        if (failed)
-               force_sigsegv(ksig->sig, current);
+               force_sigsegv(ksig->sig);
        else
                signal_delivered(ksig, stepping);
 }
@@ -4477,6 +4554,28 @@ static inline void siginfo_buildtime_checks(void)
        CHECK_OFFSET(si_syscall);
        CHECK_OFFSET(si_arch);
 #undef CHECK_OFFSET
+
+       /* usb asyncio */
+       BUILD_BUG_ON(offsetof(struct siginfo, si_pid) !=
+                    offsetof(struct siginfo, si_addr));
+       if (sizeof(int) == sizeof(void __user *)) {
+               BUILD_BUG_ON(sizeof_field(struct siginfo, si_pid) !=
+                            sizeof(void __user *));
+       } else {
+               BUILD_BUG_ON((sizeof_field(struct siginfo, si_pid) +
+                             sizeof_field(struct siginfo, si_uid)) !=
+                            sizeof(void __user *));
+               BUILD_BUG_ON(offsetofend(struct siginfo, si_pid) !=
+                            offsetof(struct siginfo, si_uid));
+       }
+#ifdef CONFIG_COMPAT
+       BUILD_BUG_ON(offsetof(struct compat_siginfo, si_pid) !=
+                    offsetof(struct compat_siginfo, si_addr));
+       BUILD_BUG_ON(sizeof_field(struct compat_siginfo, si_pid) !=
+                    sizeof(compat_uptr_t));
+       BUILD_BUG_ON(sizeof_field(struct compat_siginfo, si_pid) !=
+                    sizeof_field(struct siginfo, si_pid));
+#endif
 }
 
 void __init signals_init(void)
index d9cc6606f4097e13175a2dd3eb08523a184e1968..f045514d8d207c0bcafd7a0c1b19cd79411fec53 100644 (file)
@@ -218,7 +218,7 @@ static int kill_proc(struct to_kill *tk, unsigned long pfn, int flags)
 
        if ((flags & MF_ACTION_REQUIRED) && t->mm == current->mm) {
                ret = force_sig_mceerr(BUS_MCEERR_AR, (void __user *)tk->addr,
-                                      addr_lsb, current);
+                                      addr_lsb);
        } else {
                /*
                 * Don't use force here, it's convenient if the signal
index 7ee4fea93637534a0aa97f95eee3d00270b7044e..c0f0990f30b60415fa6b929415f5ac67bba4ed01 100644 (file)
@@ -22,7 +22,7 @@ static void shutdown_umh(void)
 
        tsk = get_pid_task(find_vpid(bpfilter_ops.info.pid), PIDTYPE_PID);
        if (tsk) {
-               force_sig(SIGKILL, tsk);
+               send_sig(SIGKILL, tsk, 1);
                put_task_struct(tsk);
        }
 }
index cecd38e2ac805ceee48feb12633199d8185e89db..06d4259f9ab1d5f2cbeaedd160ea56be8e8b7988 100644 (file)
@@ -111,7 +111,7 @@ static int check_uid_transition(kuid_t parent, kuid_t child)
         * that could arise from a missing whitelist entry preventing a
         * privileged process from dropping to a lesser-privileged one.
         */
-       force_sig(SIGKILL, current);
+       force_sig(SIGKILL);
        return -EACCES;
 }
 
@@ -203,7 +203,7 @@ static int safesetid_task_fix_setuid(struct cred *new,
                break;
        default:
                pr_warn("Unknown setid state %d\n", flags);
-               force_sig(SIGKILL, current);
+               force_sig(SIGKILL);
                return -EINVAL;
        }
        return 0;