summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@xmission.com>2019-05-21 11:03:48 -0400
committerEric W. Biederman <ebiederm@xmission.com>2019-05-27 10:36:28 -0400
commitcb44c9a0ab21a9ae4dfcabac1ed8e38aa872d1af (patch)
treee09131e28e3f55143862fc2377c30049a6a4b0bc
parent72abe3bcf0911d69b46c1e8bdb5612675e0ac42c (diff)
signal: Remove task parameter from force_sigsegv
The function force_sigsegv is always called on the current task so passing in current is redundant and not passing in current makes this fact obvious. This also makes it clear force_sigsegv always calls force_sig on the current task. Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
-rw-r--r--arch/arc/kernel/process.c2
-rw-r--r--arch/ia64/kernel/signal.c6
-rw-r--r--arch/nios2/kernel/signal.c2
-rw-r--r--arch/sparc/kernel/signal32.c4
-rw-r--r--arch/sparc/kernel/signal_64.c2
-rw-r--r--arch/um/kernel/skas/mmu.c2
-rw-r--r--arch/um/kernel/trap.c2
-rw-r--r--arch/unicore32/kernel/signal.c2
-rw-r--r--fs/exec.c2
-rw-r--r--include/linux/sched/signal.h2
-rw-r--r--kernel/rseq.c2
-rw-r--r--kernel/signal.c6
12 files changed, 18 insertions, 16 deletions
diff --git a/arch/arc/kernel/process.c b/arch/arc/kernel/process.c
index 641c364fc232..725e556678a4 100644
--- a/arch/arc/kernel/process.c
+++ b/arch/arc/kernel/process.c
@@ -313,7 +313,7 @@ int elf_check_arch(const struct elf32_hdr *x)
313 eflags = x->e_flags; 313 eflags = x->e_flags;
314 if ((eflags & EF_ARC_OSABI_MSK) != EF_ARC_OSABI_CURRENT) { 314 if ((eflags & EF_ARC_OSABI_MSK) != EF_ARC_OSABI_CURRENT) {
315 pr_err("ABI mismatch - you need newer toolchain\n"); 315 pr_err("ABI mismatch - you need newer toolchain\n");
316 force_sigsegv(SIGSEGV, current); 316 force_sigsegv(SIGSEGV);
317 return 0; 317 return 0;
318 } 318 }
319 319
diff --git a/arch/ia64/kernel/signal.c b/arch/ia64/kernel/signal.c
index 6062fd14e34e..518cceb5d4af 100644
--- a/arch/ia64/kernel/signal.c
+++ b/arch/ia64/kernel/signal.c
@@ -257,7 +257,7 @@ setup_frame(struct ksignal *ksig, sigset_t *set, struct sigscratch *scr)
257 */ 257 */
258 check_sp = (new_sp - sizeof(*frame)) & -STACK_ALIGN; 258 check_sp = (new_sp - sizeof(*frame)) & -STACK_ALIGN;
259 if (!likely(on_sig_stack(check_sp))) { 259 if (!likely(on_sig_stack(check_sp))) {
260 force_sigsegv(ksig->sig, current); 260 force_sigsegv(ksig->sig);
261 return 1; 261 return 1;
262 } 262 }
263 } 263 }
@@ -265,7 +265,7 @@ setup_frame(struct ksignal *ksig, sigset_t *set, struct sigscratch *scr)
265 frame = (void __user *) ((new_sp - sizeof(*frame)) & -STACK_ALIGN); 265 frame = (void __user *) ((new_sp - sizeof(*frame)) & -STACK_ALIGN);
266 266
267 if (!access_ok(frame, sizeof(*frame))) { 267 if (!access_ok(frame, sizeof(*frame))) {
268 force_sigsegv(ksig->sig, current); 268 force_sigsegv(ksig->sig);
269 return 1; 269 return 1;
270 } 270 }
271 271
@@ -282,7 +282,7 @@ setup_frame(struct ksignal *ksig, sigset_t *set, struct sigscratch *scr)
282 err |= setup_sigcontext(&frame->sc, set, scr); 282 err |= setup_sigcontext(&frame->sc, set, scr);
283 283
284 if (unlikely(err)) { 284 if (unlikely(err)) {
285 force_sigsegv(ksig->sig, current); 285 force_sigsegv(ksig->sig);
286 return 1; 286 return 1;
287 } 287 }
288 288
diff --git a/arch/nios2/kernel/signal.c b/arch/nios2/kernel/signal.c
index 4a81876b6086..9bf38531b189 100644
--- a/arch/nios2/kernel/signal.c
+++ b/arch/nios2/kernel/signal.c
@@ -211,7 +211,7 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set,
211 return 0; 211 return 0;
212 212
213give_sigsegv: 213give_sigsegv:
214 force_sigsegv(ksig->sig, current); 214 force_sigsegv(ksig->sig);
215 return -EFAULT; 215 return -EFAULT;
216} 216}
217 217
diff --git a/arch/sparc/kernel/signal32.c b/arch/sparc/kernel/signal32.c
index e800ce13cc6e..fb431d47a532 100644
--- a/arch/sparc/kernel/signal32.c
+++ b/arch/sparc/kernel/signal32.c
@@ -375,7 +375,7 @@ static int setup_frame32(struct ksignal *ksig, struct pt_regs *regs,
375 pr_info("%s[%d] bad frame in setup_frame32: %08lx TPC %08lx O7 %08lx\n", 375 pr_info("%s[%d] bad frame in setup_frame32: %08lx TPC %08lx O7 %08lx\n",
376 current->comm, current->pid, (unsigned long)sf, 376 current->comm, current->pid, (unsigned long)sf,
377 regs->tpc, regs->u_regs[UREG_I7]); 377 regs->tpc, regs->u_regs[UREG_I7]);
378 force_sigsegv(ksig->sig, current); 378 force_sigsegv(ksig->sig);
379 return -EINVAL; 379 return -EINVAL;
380 } 380 }
381 381
@@ -509,7 +509,7 @@ static int setup_rt_frame32(struct ksignal *ksig, struct pt_regs *regs,
509 pr_info("%s[%d] bad frame in setup_rt_frame32: %08lx TPC %08lx O7 %08lx\n", 509 pr_info("%s[%d] bad frame in setup_rt_frame32: %08lx TPC %08lx O7 %08lx\n",
510 current->comm, current->pid, (unsigned long)sf, 510 current->comm, current->pid, (unsigned long)sf,
511 regs->tpc, regs->u_regs[UREG_I7]); 511 regs->tpc, regs->u_regs[UREG_I7]);
512 force_sigsegv(ksig->sig, current); 512 force_sigsegv(ksig->sig);
513 return -EINVAL; 513 return -EINVAL;
514 } 514 }
515 515
diff --git a/arch/sparc/kernel/signal_64.c b/arch/sparc/kernel/signal_64.c
index ca70787efd8e..9d50190cf312 100644
--- a/arch/sparc/kernel/signal_64.c
+++ b/arch/sparc/kernel/signal_64.c
@@ -374,7 +374,7 @@ setup_rt_frame(struct ksignal *ksig, struct pt_regs *regs)
374 pr_info("%s[%d] bad frame in setup_rt_frame: %016lx TPC %016lx O7 %016lx\n", 374 pr_info("%s[%d] bad frame in setup_rt_frame: %016lx TPC %016lx O7 %016lx\n",
375 current->comm, current->pid, (unsigned long)sf, 375 current->comm, current->pid, (unsigned long)sf,
376 regs->tpc, regs->u_regs[UREG_I7]); 376 regs->tpc, regs->u_regs[UREG_I7]);
377 force_sigsegv(ksig->sig, current); 377 force_sigsegv(ksig->sig);
378 return -EINVAL; 378 return -EINVAL;
379 } 379 }
380 380
diff --git a/arch/um/kernel/skas/mmu.c b/arch/um/kernel/skas/mmu.c
index 7a1f2a936fd1..29e7f5f9f188 100644
--- a/arch/um/kernel/skas/mmu.c
+++ b/arch/um/kernel/skas/mmu.c
@@ -119,7 +119,7 @@ void uml_setup_stubs(struct mm_struct *mm)
119 return; 119 return;
120 120
121out: 121out:
122 force_sigsegv(SIGSEGV, current); 122 force_sigsegv(SIGSEGV);
123} 123}
124 124
125void arch_exit_mmap(struct mm_struct *mm) 125void arch_exit_mmap(struct mm_struct *mm)
diff --git a/arch/um/kernel/trap.c b/arch/um/kernel/trap.c
index 0e8b6158f224..646059402ab3 100644
--- a/arch/um/kernel/trap.c
+++ b/arch/um/kernel/trap.c
@@ -169,7 +169,7 @@ static void bad_segv(struct faultinfo fi, unsigned long ip)
169 169
170void fatal_sigsegv(void) 170void fatal_sigsegv(void)
171{ 171{
172 force_sigsegv(SIGSEGV, current); 172 force_sigsegv(SIGSEGV);
173 do_signal(&current->thread.regs); 173 do_signal(&current->thread.regs);
174 /* 174 /*
175 * This is to tell gcc that we're not returning - do_signal 175 * This is to tell gcc that we're not returning - do_signal
diff --git a/arch/unicore32/kernel/signal.c b/arch/unicore32/kernel/signal.c
index 63be04809d40..75f27dc68bd0 100644
--- a/arch/unicore32/kernel/signal.c
+++ b/arch/unicore32/kernel/signal.c
@@ -386,7 +386,7 @@ static void do_signal(struct pt_regs *regs, int syscall)
386 regs->UCreg_pc = KERN_RESTART_CODE; 386 regs->UCreg_pc = KERN_RESTART_CODE;
387 } else { 387 } else {
388 regs->UCreg_sp += 4; 388 regs->UCreg_sp += 4;
389 force_sigsegv(0, current); 389 force_sigsegv(0);
390 } 390 }
391 } 391 }
392 if (regs->UCreg_00 == -ERESTARTNOHAND || 392 if (regs->UCreg_00 == -ERESTARTNOHAND ||
diff --git a/fs/exec.c b/fs/exec.c
index d88584ebf07f..f5568e45d521 100644
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -1662,7 +1662,7 @@ int search_binary_handler(struct linux_binprm *bprm)
1662 if (retval < 0 && !bprm->mm) { 1662 if (retval < 0 && !bprm->mm) {
1663 /* we got to flush_old_exec() and failed after it */ 1663 /* we got to flush_old_exec() and failed after it */
1664 read_unlock(&binfmt_lock); 1664 read_unlock(&binfmt_lock);
1665 force_sigsegv(SIGSEGV, current); 1665 force_sigsegv(SIGSEGV);
1666 return retval; 1666 return retval;
1667 } 1667 }
1668 if (retval != -ENOEXEC || !bprm->file) { 1668 if (retval != -ENOEXEC || !bprm->file) {
diff --git a/include/linux/sched/signal.h b/include/linux/sched/signal.h
index c68ca81db0a1..8af3101da782 100644
--- a/include/linux/sched/signal.h
+++ b/include/linux/sched/signal.h
@@ -325,7 +325,7 @@ int force_sig_pkuerr(void __user *addr, u32 pkey);
325int force_sig_ptrace_errno_trap(int errno, void __user *addr); 325int force_sig_ptrace_errno_trap(int errno, void __user *addr);
326 326
327extern int send_sig_info(int, struct kernel_siginfo *, struct task_struct *); 327extern int send_sig_info(int, struct kernel_siginfo *, struct task_struct *);
328extern void force_sigsegv(int sig, struct task_struct *p); 328extern void force_sigsegv(int sig);
329extern int force_sig_info(int, struct kernel_siginfo *, struct task_struct *); 329extern int force_sig_info(int, struct kernel_siginfo *, struct task_struct *);
330extern int __kill_pgrp_info(int sig, struct kernel_siginfo *info, struct pid *pgrp); 330extern int __kill_pgrp_info(int sig, struct kernel_siginfo *info, struct pid *pgrp);
331extern int kill_pid_info(int sig, struct kernel_siginfo *info, struct pid *pid); 331extern int kill_pid_info(int sig, struct kernel_siginfo *info, struct pid *pid);
diff --git a/kernel/rseq.c b/kernel/rseq.c
index 9424ee90589e..e1aa3ebee291 100644
--- a/kernel/rseq.c
+++ b/kernel/rseq.c
@@ -277,7 +277,7 @@ void __rseq_handle_notify_resume(struct ksignal *ksig, struct pt_regs *regs)
277 277
278error: 278error:
279 sig = ksig ? ksig->sig : 0; 279 sig = ksig ? ksig->sig : 0;
280 force_sigsegv(sig, t); 280 force_sigsegv(sig);
281} 281}
282 282
283#ifdef CONFIG_DEBUG_RSEQ 283#ifdef CONFIG_DEBUG_RSEQ
diff --git a/kernel/signal.c b/kernel/signal.c
index 39a3eca5ce22..f7669d240ce4 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -1607,8 +1607,10 @@ EXPORT_SYMBOL(force_sig);
1607 * the problem was already a SIGSEGV, we'll want to 1607 * the problem was already a SIGSEGV, we'll want to
1608 * make sure we don't even try to deliver the signal.. 1608 * make sure we don't even try to deliver the signal..
1609 */ 1609 */
1610void force_sigsegv(int sig, struct task_struct *p) 1610void force_sigsegv(int sig)
1611{ 1611{
1612 struct task_struct *p = current;
1613
1612 if (sig == SIGSEGV) { 1614 if (sig == SIGSEGV) {
1613 unsigned long flags; 1615 unsigned long flags;
1614 spin_lock_irqsave(&p->sighand->siglock, flags); 1616 spin_lock_irqsave(&p->sighand->siglock, flags);
@@ -2717,7 +2719,7 @@ static void signal_delivered(struct ksignal *ksig, int stepping)
2717void signal_setup_done(int failed, struct ksignal *ksig, int stepping) 2719void signal_setup_done(int failed, struct ksignal *ksig, int stepping)
2718{ 2720{
2719 if (failed) 2721 if (failed)
2720 force_sigsegv(ksig->sig, current); 2722 force_sigsegv(ksig->sig);
2721 else 2723 else
2722 signal_delivered(ksig, stepping); 2724 signal_delivered(ksig, stepping);
2723} 2725}