Loading include/linux/signal.h +1 −13 Original line number Diff line number Diff line Loading @@ -280,7 +280,7 @@ struct ksignal { int sig; }; extern int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka, struct pt_regs *regs, void *cookie); extern int get_signal(struct ksignal *ksig); extern void signal_setup_done(int failed, struct ksignal *ksig, int stepping); extern void exit_signals(struct task_struct *tsk); extern void kernel_sigaction(int, __sighandler_t); Loading @@ -300,18 +300,6 @@ static inline void disallow_signal(int sig) kernel_sigaction(sig, SIG_IGN); } /* * Eventually that'll replace get_signal_to_deliver(); macro for now, * to avoid nastiness with include order. */ #define get_signal(ksig) \ ({ \ struct ksignal *p = (ksig); \ p->sig = get_signal_to_deliver(&p->info, &p->ka, \ signal_pt_regs(), NULL);\ p->sig > 0; \ }) extern struct kmem_cache *sighand_cachep; int unhandled_signal(struct task_struct *tsk, int sig); Loading kernel/signal.c +12 −11 Original line number Diff line number Diff line Loading @@ -2166,8 +2166,7 @@ static int ptrace_signal(int signr, siginfo_t *info) return signr; } int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka, struct pt_regs *regs, void *cookie) int get_signal(struct ksignal *ksig) { struct sighand_struct *sighand = current->sighand; struct signal_struct *signal = current->signal; Loading Loading @@ -2237,13 +2236,13 @@ int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka, goto relock; } signr = dequeue_signal(current, ¤t->blocked, info); signr = dequeue_signal(current, ¤t->blocked, &ksig->info); if (!signr) break; /* will return 0 */ if (unlikely(current->ptrace) && signr != SIGKILL) { signr = ptrace_signal(signr, info); signr = ptrace_signal(signr, &ksig->info); if (!signr) continue; } Loading @@ -2251,13 +2250,13 @@ int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka, ka = &sighand->action[signr-1]; /* Trace actually delivered signals. */ trace_signal_deliver(signr, info, ka); trace_signal_deliver(signr, &ksig->info, ka); if (ka->sa.sa_handler == SIG_IGN) /* Do nothing. */ continue; if (ka->sa.sa_handler != SIG_DFL) { /* Run the handler. */ *return_ka = *ka; ksig->ka = *ka; if (ka->sa.sa_flags & SA_ONESHOT) ka->sa.sa_handler = SIG_DFL; Loading Loading @@ -2307,7 +2306,7 @@ int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka, spin_lock_irq(&sighand->siglock); } if (likely(do_signal_stop(info->si_signo))) { if (likely(do_signal_stop(ksig->info.si_signo))) { /* It released the siglock. */ goto relock; } Loading @@ -2328,7 +2327,7 @@ int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka, if (sig_kernel_coredump(signr)) { if (print_fatal_signals) print_fatal_signal(info->si_signo); print_fatal_signal(ksig->info.si_signo); proc_coredump_connector(current); /* * If it was able to dump core, this kills all Loading @@ -2338,17 +2337,19 @@ int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka, * first and our do_group_exit call below will use * that value and ignore the one we pass it. */ do_coredump(info); do_coredump(&ksig->info); } /* * Death signals, no core dump. */ do_group_exit(info->si_signo); do_group_exit(ksig->info.si_signo); /* NOTREACHED */ } spin_unlock_irq(&sighand->siglock); return signr; ksig->sig = signr; return ksig->sig > 0; } /** Loading Loading
include/linux/signal.h +1 −13 Original line number Diff line number Diff line Loading @@ -280,7 +280,7 @@ struct ksignal { int sig; }; extern int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka, struct pt_regs *regs, void *cookie); extern int get_signal(struct ksignal *ksig); extern void signal_setup_done(int failed, struct ksignal *ksig, int stepping); extern void exit_signals(struct task_struct *tsk); extern void kernel_sigaction(int, __sighandler_t); Loading @@ -300,18 +300,6 @@ static inline void disallow_signal(int sig) kernel_sigaction(sig, SIG_IGN); } /* * Eventually that'll replace get_signal_to_deliver(); macro for now, * to avoid nastiness with include order. */ #define get_signal(ksig) \ ({ \ struct ksignal *p = (ksig); \ p->sig = get_signal_to_deliver(&p->info, &p->ka, \ signal_pt_regs(), NULL);\ p->sig > 0; \ }) extern struct kmem_cache *sighand_cachep; int unhandled_signal(struct task_struct *tsk, int sig); Loading
kernel/signal.c +12 −11 Original line number Diff line number Diff line Loading @@ -2166,8 +2166,7 @@ static int ptrace_signal(int signr, siginfo_t *info) return signr; } int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka, struct pt_regs *regs, void *cookie) int get_signal(struct ksignal *ksig) { struct sighand_struct *sighand = current->sighand; struct signal_struct *signal = current->signal; Loading Loading @@ -2237,13 +2236,13 @@ int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka, goto relock; } signr = dequeue_signal(current, ¤t->blocked, info); signr = dequeue_signal(current, ¤t->blocked, &ksig->info); if (!signr) break; /* will return 0 */ if (unlikely(current->ptrace) && signr != SIGKILL) { signr = ptrace_signal(signr, info); signr = ptrace_signal(signr, &ksig->info); if (!signr) continue; } Loading @@ -2251,13 +2250,13 @@ int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka, ka = &sighand->action[signr-1]; /* Trace actually delivered signals. */ trace_signal_deliver(signr, info, ka); trace_signal_deliver(signr, &ksig->info, ka); if (ka->sa.sa_handler == SIG_IGN) /* Do nothing. */ continue; if (ka->sa.sa_handler != SIG_DFL) { /* Run the handler. */ *return_ka = *ka; ksig->ka = *ka; if (ka->sa.sa_flags & SA_ONESHOT) ka->sa.sa_handler = SIG_DFL; Loading Loading @@ -2307,7 +2306,7 @@ int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka, spin_lock_irq(&sighand->siglock); } if (likely(do_signal_stop(info->si_signo))) { if (likely(do_signal_stop(ksig->info.si_signo))) { /* It released the siglock. */ goto relock; } Loading @@ -2328,7 +2327,7 @@ int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka, if (sig_kernel_coredump(signr)) { if (print_fatal_signals) print_fatal_signal(info->si_signo); print_fatal_signal(ksig->info.si_signo); proc_coredump_connector(current); /* * If it was able to dump core, this kills all Loading @@ -2338,17 +2337,19 @@ int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka, * first and our do_group_exit call below will use * that value and ignore the one we pass it. */ do_coredump(info); do_coredump(&ksig->info); } /* * Death signals, no core dump. */ do_group_exit(info->si_signo); do_group_exit(ksig->info.si_signo); /* NOTREACHED */ } spin_unlock_irq(&sighand->siglock); return signr; ksig->sig = signr; return ksig->sig > 0; } /** Loading