diff options
-rw-r--r-- | arch/mips/kernel/traps.c | 2 | ||||
-rw-r--r-- | arch/parisc/kernel/ptrace.c | 6 | ||||
-rw-r--r-- | include/linux/sched/signal.h | 4 | ||||
-rw-r--r-- | kernel/signal.c | 12 |
4 files changed, 19 insertions, 5 deletions
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c index a6031b045b95..62df48b6fb46 100644 --- a/arch/mips/kernel/traps.c +++ b/arch/mips/kernel/traps.c | |||
@@ -733,7 +733,7 @@ void force_fcr31_sig(unsigned long fcr31, void __user *fault_addr, | |||
733 | else if (fcr31 & FPU_CSR_INE_X) | 733 | else if (fcr31 & FPU_CSR_INE_X) |
734 | si_code = FPE_FLTRES; | 734 | si_code = FPE_FLTRES; |
735 | 735 | ||
736 | force_sig_fault(SIGFPE, si_code, fault_addr, tsk); | 736 | force_sig_fault_to_task(SIGFPE, si_code, fault_addr, tsk); |
737 | } | 737 | } |
738 | 738 | ||
739 | int process_fpemu_return(int sig, void __user *fault_addr, unsigned long fcr31) | 739 | int process_fpemu_return(int sig, void __user *fault_addr, unsigned long fcr31) |
diff --git a/arch/parisc/kernel/ptrace.c b/arch/parisc/kernel/ptrace.c index a3d2fb4e6dd2..f642ba378ffa 100644 --- a/arch/parisc/kernel/ptrace.c +++ b/arch/parisc/kernel/ptrace.c | |||
@@ -88,9 +88,9 @@ void user_enable_single_step(struct task_struct *task) | |||
88 | ptrace_disable(task); | 88 | ptrace_disable(task); |
89 | /* Don't wake up the task, but let the | 89 | /* Don't wake up the task, but let the |
90 | parent know something happened. */ | 90 | parent know something happened. */ |
91 | force_sig_fault(SIGTRAP, TRAP_TRACE, | 91 | force_sig_fault_to_task(SIGTRAP, TRAP_TRACE, |
92 | (void __user *) (task_regs(task)->iaoq[0] & ~3), | 92 | (void __user *) (task_regs(task)->iaoq[0] & ~3), |
93 | task); | 93 | task); |
94 | /* notify_parent(task, SIGCHLD); */ | 94 | /* notify_parent(task, SIGCHLD); */ |
95 | return; | 95 | return; |
96 | } | 96 | } |
diff --git a/include/linux/sched/signal.h b/include/linux/sched/signal.h index 4178bb1f7709..507af66a1fc8 100644 --- a/include/linux/sched/signal.h +++ b/include/linux/sched/signal.h | |||
@@ -307,6 +307,10 @@ static inline void kernel_signal_stop(void) | |||
307 | # define ___ARCH_SI_IA64(_a1, _a2, _a3) | 307 | # define ___ARCH_SI_IA64(_a1, _a2, _a3) |
308 | #endif | 308 | #endif |
309 | 309 | ||
310 | int force_sig_fault_to_task(int sig, int code, void __user *addr | ||
311 | ___ARCH_SI_TRAPNO(int trapno) | ||
312 | ___ARCH_SI_IA64(int imm, unsigned int flags, unsigned long isr) | ||
313 | , struct task_struct *t); | ||
310 | int force_sig_fault(int sig, int code, void __user *addr | 314 | int force_sig_fault(int sig, int code, void __user *addr |
311 | ___ARCH_SI_TRAPNO(int trapno) | 315 | ___ARCH_SI_TRAPNO(int trapno) |
312 | ___ARCH_SI_IA64(int imm, unsigned int flags, unsigned long isr) | 316 | ___ARCH_SI_IA64(int imm, unsigned int flags, unsigned long isr) |
diff --git a/kernel/signal.c b/kernel/signal.c index 398489facf9f..e420489ac4c9 100644 --- a/kernel/signal.c +++ b/kernel/signal.c | |||
@@ -1620,7 +1620,7 @@ void force_sigsegv(int sig) | |||
1620 | force_sig(SIGSEGV); | 1620 | force_sig(SIGSEGV); |
1621 | } | 1621 | } |
1622 | 1622 | ||
1623 | int force_sig_fault(int sig, int code, void __user *addr | 1623 | int force_sig_fault_to_task(int sig, int code, void __user *addr |
1624 | ___ARCH_SI_TRAPNO(int trapno) | 1624 | ___ARCH_SI_TRAPNO(int trapno) |
1625 | ___ARCH_SI_IA64(int imm, unsigned int flags, unsigned long isr) | 1625 | ___ARCH_SI_IA64(int imm, unsigned int flags, unsigned long isr) |
1626 | , struct task_struct *t) | 1626 | , struct task_struct *t) |
@@ -1643,6 +1643,16 @@ int force_sig_fault(int sig, int code, void __user *addr | |||
1643 | return force_sig_info(info.si_signo, &info, t); | 1643 | return force_sig_info(info.si_signo, &info, t); |
1644 | } | 1644 | } |
1645 | 1645 | ||
1646 | int force_sig_fault(int sig, int code, void __user *addr | ||
1647 | ___ARCH_SI_TRAPNO(int trapno) | ||
1648 | ___ARCH_SI_IA64(int imm, unsigned int flags, unsigned long isr) | ||
1649 | , struct task_struct *t) | ||
1650 | { | ||
1651 | return force_sig_fault_to_task(sig, code, addr | ||
1652 | ___ARCH_SI_TRAPNO(trapno) | ||
1653 | ___ARCH_SI_IA64(imm, flags, isr), t); | ||
1654 | } | ||
1655 | |||
1646 | int send_sig_fault(int sig, int code, void __user *addr | 1656 | int send_sig_fault(int sig, int code, void __user *addr |
1647 | ___ARCH_SI_TRAPNO(int trapno) | 1657 | ___ARCH_SI_TRAPNO(int trapno) |
1648 | ___ARCH_SI_IA64(int imm, unsigned int flags, unsigned long isr) | 1658 | ___ARCH_SI_IA64(int imm, unsigned int flags, unsigned long isr) |