Lines Matching refs:sig
72 static void __user *sig_handler(struct task_struct *t, int sig) in sig_handler() argument
74 return t->sighand->action[sig - 1].sa.sa_handler; in sig_handler()
77 static inline bool sig_handler_ignored(void __user *handler, int sig) in sig_handler_ignored() argument
81 (handler == SIG_DFL && sig_kernel_ignore(sig)); in sig_handler_ignored()
84 static bool sig_task_ignored(struct task_struct *t, int sig, bool force) in sig_task_ignored() argument
88 handler = sig_handler(t, sig); in sig_task_ignored()
91 if (unlikely(is_global_init(t) && sig_kernel_only(sig))) in sig_task_ignored()
95 handler == SIG_DFL && !(force && sig_kernel_only(sig))) in sig_task_ignored()
103 return sig_handler_ignored(handler, sig); in sig_task_ignored()
106 static bool sig_ignored(struct task_struct *t, int sig, bool force) in sig_ignored() argument
113 if (sigismember(&t->blocked, sig) || sigismember(&t->real_blocked, sig)) in sig_ignored()
121 if (t->ptrace && sig != SIGKILL) in sig_ignored()
124 return sig_task_ignored(t, sig, force); in sig_ignored()
135 ready |= signal->sig[i] & ~blocked->sig[i]; in has_pending_signals()
188 int sig = 0; in next_signal() local
190 s = pending->signal.sig; in next_signal()
191 m = mask->sig; in next_signal()
201 sig = ffz(~x) + 1; in next_signal()
202 return sig; in next_signal()
211 sig = ffz(~x) + i*_NSIG_BPW + 1; in next_signal()
220 sig = ffz(~x) + _NSIG_BPW + 1; in next_signal()
228 return sig; in next_signal()
231 static inline void print_dropped_signal(int sig) in print_dropped_signal() argument
242 current->comm, current->pid, sig); in print_dropped_signal()
345 struct signal_struct *sig = task->signal; in task_participate_group_stop() local
355 if (!WARN_ON_ONCE(sig->group_stop_count == 0)) in task_participate_group_stop()
356 sig->group_stop_count--; in task_participate_group_stop()
362 if (!sig->group_stop_count && !(sig->flags & SIGNAL_STOP_STOPPED)) { in task_participate_group_stop()
363 signal_set_stop_flags(sig, SIGNAL_STOP_STOPPED); in task_participate_group_stop()
372 struct signal_struct *sig = current->signal; in task_join_group_stop() local
374 if (sig->group_stop_count) { in task_join_group_stop()
375 sig->group_stop_count++; in task_join_group_stop()
377 } else if (!(sig->flags & SIGNAL_STOP_STOPPED)) in task_join_group_stop()
384 static struct ucounts *sig_get_ucounts(struct task_struct *t, int sig, in sig_get_ucounts() argument
408 print_dropped_signal(sig); in sig_get_ucounts()
428 static struct sigqueue *sigqueue_alloc(int sig, struct task_struct *t, gfp_t gfp_flags, in sigqueue_alloc() argument
431 struct ucounts *ucounts = sig_get_ucounts(t, sig, override_rlimit); in sigqueue_alloc()
542 bool unhandled_signal(struct task_struct *tsk, int sig) in unhandled_signal() argument
544 void __user *handler = tsk->sighand->action[sig-1].sa.sa_handler; in unhandled_signal()
559 static void collect_signal(int sig, struct sigpending *list, kernel_siginfo_t *info, in collect_signal() argument
569 if (q->info.si_signo == sig) { in collect_signal()
576 sigdelset(&list->signal, sig); in collect_signal()
601 info->si_signo = sig; in collect_signal()
612 int sig = next_signal(pending, mask); in __dequeue_signal() local
614 if (sig) in __dequeue_signal()
615 collect_signal(sig, pending, info, timer_sigq); in __dequeue_signal()
616 return sig; in __dequeue_signal()
683 if (!((pending->signal.sig[0] & ~tsk->blocked.sig[0]) & SYNCHRONOUS_MASK)) in dequeue_synchronous_signal()
805 static int check_kill_permission(int sig, struct kernel_siginfo *info, in check_kill_permission() argument
811 if (!valid_signal(sig)) in check_kill_permission()
817 error = audit_signal_info(sig, t); /* Let audit system see the signal */ in check_kill_permission()
823 switch (sig) { in check_kill_permission()
838 return security_task_kill(t, info, sig, NULL); in check_kill_permission()
877 static bool prepare_signal(int sig, struct task_struct *p, bool force) in prepare_signal() argument
885 return sig == SIGKILL; in prepare_signal()
890 } else if (sig_kernel_stop(sig)) { in prepare_signal()
898 } else if (sig == SIGCONT) { in prepare_signal()
941 return !sig_ignored(p, sig, force); in prepare_signal()
952 static inline bool wants_signal(int sig, struct task_struct *p) in wants_signal() argument
954 if (sigismember(&p->blocked, sig)) in wants_signal()
960 if (sig == SIGKILL) in wants_signal()
969 static void complete_signal(int sig, struct task_struct *p, enum pid_type type) in complete_signal() argument
979 if (wants_signal(sig, p)) in complete_signal()
992 while (!wants_signal(sig, t)) { in complete_signal()
1009 if (sig_fatal(p, sig) && !sigismember(&t->real_blocked, sig) && in complete_signal()
1010 (sig == SIGKILL || !p->ptrace)) { in complete_signal()
1014 if (!sig_kernel_coredump(sig)) { in complete_signal()
1022 signal->group_exit_code = sig; in complete_signal()
1037 signal_wake_up(t, sig == SIGKILL); in complete_signal()
1041 static inline bool legacy_queue(struct sigpending *signals, int sig) in legacy_queue() argument
1043 return (sig < SIGRTMIN) && sigismember(&signals->signal, sig); in legacy_queue()
1061 static int __send_signal_locked(int sig, struct kernel_siginfo *info, in __send_signal_locked() argument
1076 if (!prepare_signal(sig, t, force)) in __send_signal_locked()
1086 if (legacy_queue(pending, sig)) in __send_signal_locked()
1093 if ((sig == SIGKILL) || (t->flags & PF_KTHREAD)) in __send_signal_locked()
1105 if (sig < SIGRTMIN) in __send_signal_locked()
1110 q = sigqueue_alloc(sig, t, GFP_ATOMIC, override_rlimit); in __send_signal_locked()
1117 q->info.si_signo = sig; in __send_signal_locked()
1130 q->info.si_signo = sig; in __send_signal_locked()
1141 sig >= SIGRTMIN && info->si_code != SI_USER) { in __send_signal_locked()
1159 signalfd_notify(t, sig); in __send_signal_locked()
1160 sigaddset(&pending->signal, sig); in __send_signal_locked()
1168 if (sig == SIGCONT) in __send_signal_locked()
1170 else if (sig_kernel_stop(sig)) in __send_signal_locked()
1172 sigaddset(signal, sig); in __send_signal_locked()
1176 complete_signal(sig, t, type); in __send_signal_locked()
1178 trace_signal_generate(sig, info, t, type != PIDTYPE_PID, result); in __send_signal_locked()
1206 int send_signal_locked(int sig, struct kernel_siginfo *info, in send_signal_locked() argument
1250 return __send_signal_locked(sig, info, t, type, force); in send_signal_locked()
1296 int do_send_sig_info(int sig, struct kernel_siginfo *info, struct task_struct *p, in do_send_sig_info() argument
1303 ret = send_signal_locked(sig, info, p, type); in do_send_sig_info()
1334 int sig = info->si_signo; in force_sig_info_to_task() local
1337 action = &t->sighand->action[sig-1]; in force_sig_info_to_task()
1339 blocked = sigismember(&t->blocked, sig); in force_sig_info_to_task()
1345 sigdelset(&t->blocked, sig); in force_sig_info_to_task()
1354 ret = send_signal_locked(sig, info, t, PIDTYPE_PID); in force_sig_info_to_task()
1452 int group_send_sig_info(int sig, struct kernel_siginfo *info, in group_send_sig_info() argument
1458 ret = check_kill_permission(sig, info, p); in group_send_sig_info()
1461 if (!ret && sig) in group_send_sig_info()
1462 ret = do_send_sig_info(sig, info, p, type); in group_send_sig_info()
1472 int __kill_pgrp_info(int sig, struct kernel_siginfo *info, struct pid *pgrp) in __kill_pgrp_info() argument
1478 int err = group_send_sig_info(sig, info, p, PIDTYPE_PGID); in __kill_pgrp_info()
1492 static int kill_pid_info_type(int sig, struct kernel_siginfo *info, in kill_pid_info_type() argument
1502 error = group_send_sig_info(sig, info, p, type); in kill_pid_info_type()
1514 int kill_pid_info(int sig, struct kernel_siginfo *info, struct pid *pid) in kill_pid_info() argument
1516 return kill_pid_info_type(sig, info, pid, PIDTYPE_TGID); in kill_pid_info()
1519 static int kill_proc_info(int sig, struct kernel_siginfo *info, pid_t pid) in kill_proc_info() argument
1523 error = kill_pid_info(sig, info, find_vpid(pid)); in kill_proc_info()
1564 int kill_pid_usb_asyncio(int sig, int errno, sigval_t addr, in kill_pid_usb_asyncio() argument
1572 if (!valid_signal(sig)) in kill_pid_usb_asyncio()
1576 info.si_signo = sig; in kill_pid_usb_asyncio()
1591 ret = security_task_kill(p, &info, sig, cred); in kill_pid_usb_asyncio()
1595 if (sig) { in kill_pid_usb_asyncio()
1597 ret = __send_signal_locked(sig, &info, p, PIDTYPE_TGID, false); in kill_pid_usb_asyncio()
1615 static int kill_something_info(int sig, struct kernel_siginfo *info, pid_t pid) in kill_something_info() argument
1620 return kill_proc_info(sig, info, pid); in kill_something_info()
1628 ret = __kill_pgrp_info(sig, info, in kill_something_info()
1637 int err = group_send_sig_info(sig, info, p, in kill_something_info()
1655 int send_sig_info(int sig, struct kernel_siginfo *info, struct task_struct *p) in send_sig_info() argument
1661 if (!valid_signal(sig)) in send_sig_info()
1664 return do_send_sig_info(sig, info, p, PIDTYPE_PID); in send_sig_info()
1672 send_sig(int sig, struct task_struct *p, int priv) in send_sig() argument
1674 return send_sig_info(sig, __si_special(priv), p); in send_sig()
1678 void force_sig(int sig) in force_sig() argument
1683 info.si_signo = sig; in force_sig()
1692 void force_fatal_sig(int sig) in force_fatal_sig() argument
1697 info.si_signo = sig; in force_fatal_sig()
1705 void force_exit_sig(int sig) in force_exit_sig() argument
1710 info.si_signo = sig; in force_exit_sig()
1724 void force_sigsegv(int sig) in force_sigsegv() argument
1726 if (sig == SIGSEGV) in force_sigsegv()
1732 int force_sig_fault_to_task(int sig, int code, void __user *addr, in force_sig_fault_to_task() argument
1738 info.si_signo = sig; in force_sig_fault_to_task()
1745 int force_sig_fault(int sig, int code, void __user *addr) in force_sig_fault() argument
1747 return force_sig_fault_to_task(sig, code, addr, current); in force_sig_fault()
1750 int send_sig_fault(int sig, int code, void __user *addr, struct task_struct *t) in send_sig_fault() argument
1755 info.si_signo = sig; in send_sig_fault()
1887 int force_sig_fault_trapno(int sig, int code, void __user *addr, int trapno) in force_sig_fault_trapno() argument
1892 info.si_signo = sig; in force_sig_fault_trapno()
1903 int send_sig_fault_trapno(int sig, int code, void __user *addr, int trapno, in send_sig_fault_trapno() argument
1909 info.si_signo = sig; in send_sig_fault_trapno()
1917 static int kill_pgrp_info(int sig, struct kernel_siginfo *info, struct pid *pgrp) in kill_pgrp_info() argument
1921 ret = __kill_pgrp_info(sig, info, pgrp); in kill_pgrp_info()
1926 int kill_pgrp(struct pid *pid, int sig, int priv) in kill_pgrp() argument
1928 return kill_pgrp_info(sig, __si_special(priv), pid); in kill_pgrp()
1932 int kill_pid(struct pid *pid, int sig, int priv) in kill_pid() argument
1934 return kill_pid_info(sig, __si_special(priv), pid); in kill_pid()
1938 int kill_cad_pid(int sig, int priv) in kill_cad_pid() argument
1943 ret = kill_pid(rcu_dereference(cad_pid), sig, priv); in kill_cad_pid()
1964 int sig = q->info.si_signo; in __flush_itimer_signals() local
1967 sigaddset(&retain, sig); in __flush_itimer_signals()
1969 sigdelset(&signal, sig); in __flush_itimer_signals()
2001 int sig = q->info.si_signo; in posixtimer_queue_sigqueue() local
2003 signalfd_notify(t, sig); in posixtimer_queue_sigqueue()
2006 sigaddset(&pending->signal, sig); in posixtimer_queue_sigqueue()
2007 complete_signal(sig, t, type); in posixtimer_queue_sigqueue()
2048 int sig = q->info.si_signo; in posixtimer_send_sigqueue() local
2078 if (!prepare_signal(sig, t, false)) { in posixtimer_send_sigqueue()
2155 trace_signal_generate(sig, &q->info, t, tmr->it_pid_type != PIDTYPE_PID, result); in posixtimer_send_sigqueue()
2175 static void posixtimer_sig_unignore(struct task_struct *tsk, int sig) in posixtimer_sig_unignore() argument
2198 if (tmr->sigq.info.si_signo != sig) in posixtimer_sig_unignore()
2221 static inline void posixtimer_sig_unignore(struct task_struct *tsk, int sig) { } in posixtimer_sig_unignore() argument
2241 bool do_notify_parent(struct task_struct *tsk, int sig) in do_notify_parent() argument
2249 if (WARN_ON_ONCE(!valid_signal(sig))) in do_notify_parent()
2260 if (sig != SIGCHLD) { in do_notify_parent()
2266 sig = SIGCHLD; in do_notify_parent()
2270 info.si_signo = sig; in do_notify_parent()
2305 if (!tsk->ptrace && sig == SIGCHLD && in do_notify_parent()
2325 sig = 0; in do_notify_parent()
2329 sig = 0; in do_notify_parent()
2335 if (sig) in do_notify_parent()
2336 __send_signal_locked(sig, &info, tsk->parent, PIDTYPE_TGID, false); in do_notify_parent()
2630 struct signal_struct *sig = current->signal; in do_signal_stop() local
2640 unlikely(sig->flags & SIGNAL_GROUP_EXIT) || in do_signal_stop()
2641 unlikely(sig->group_exec_task)) in do_signal_stop()
2662 if (!(sig->flags & SIGNAL_STOP_STOPPED)) in do_signal_stop()
2663 sig->group_exit_code = signr; in do_signal_stop()
2665 sig->group_stop_count = 0; in do_signal_stop()
2667 sig->group_stop_count++; in do_signal_stop()
2677 sig->group_stop_count++; in do_signal_stop()
2856 switch (siginfo_layout(ksig->sig, ksig->info.si_code)) { in hide_si_addr_tag_bits()
2864 ksig->info.si_addr, ksig->sig, ksig->info.si_code); in hide_si_addr_tag_bits()
3117 ksig->sig = signr; in get_signal()
3147 sigaddset(&blocked, ksig->sig); in signal_delivered()
3158 force_sigsegv(ksig->sig); in signal_setup_done()
3506 static bool known_siginfo_layout(unsigned sig, int si_code) in known_siginfo_layout() argument
3511 if (sig_specific_sicodes(sig)) { in known_siginfo_layout()
3512 if (si_code <= sig_sicodes[sig].limit) in known_siginfo_layout()
3525 enum siginfo_layout siginfo_layout(unsigned sig, int si_code) in siginfo_layout() argument
3529 if ((sig < ARRAY_SIZE(sig_sicodes)) && in siginfo_layout()
3530 (si_code <= sig_sicodes[sig].limit)) { in siginfo_layout()
3531 layout = sig_sicodes[sig].layout; in siginfo_layout()
3533 if ((sig == SIGBUS) && in siginfo_layout()
3536 else if ((sig == SIGSEGV) && (si_code == SEGV_BNDERR)) in siginfo_layout()
3539 else if ((sig == SIGSEGV) && (si_code == SEGV_PKUERR)) in siginfo_layout()
3542 else if ((sig == SIGTRAP) && (si_code == TRAP_PERF)) in siginfo_layout()
3545 (sig == SIGILL) && (si_code == ILL_ILLTRP)) in siginfo_layout()
3548 ((sig == SIGFPE) || in siginfo_layout()
3549 ((sig == SIGTRAP) && (si_code == TRAP_UNK)))) in siginfo_layout()
3822 int sig, ret = 0; in do_sigtimedwait() local
3838 sig = dequeue_signal(&mask, info, &type); in do_sigtimedwait()
3839 if (!sig && timeout) { in do_sigtimedwait()
3857 sig = dequeue_signal(&mask, info, &type); in do_sigtimedwait()
3861 if (sig) in do_sigtimedwait()
3862 return sig; in do_sigtimedwait()
4003 static void prepare_kill_siginfo(int sig, struct kernel_siginfo *info, in prepare_kill_siginfo() argument
4007 info->si_signo = sig; in prepare_kill_siginfo()
4028 SYSCALL_DEFINE2(kill, pid_t, pid, int, sig) in SYSCALL_DEFINE2() argument
4030 return kill_something_info(sig, SEND_SIG_NOINFO, pid); in SYSCALL_DEFINE2()
4085 static int do_pidfd_send_signal(struct pid *pid, int sig, enum pid_type type, in do_pidfd_send_signal() argument
4109 if (unlikely(sig != kinfo.si_signo)) in do_pidfd_send_signal()
4117 prepare_kill_siginfo(sig, &kinfo, type); in do_pidfd_send_signal()
4121 return kill_pgrp_info(sig, &kinfo, pid); in do_pidfd_send_signal()
4123 return kill_pid_info_type(sig, &kinfo, pid, type); in do_pidfd_send_signal()
4140 SYSCALL_DEFINE4(pidfd_send_signal, int, pidfd, int, sig, in SYSCALL_DEFINE4() argument
4183 return do_pidfd_send_signal(pid, sig, type, info, flags); in SYSCALL_DEFINE4()
4187 ret = do_pidfd_send_signal(pid, sig, type, info, flags); in SYSCALL_DEFINE4()
4194 do_send_specific(pid_t tgid, pid_t pid, int sig, struct kernel_siginfo *info) in do_send_specific() argument
4202 error = check_kill_permission(sig, info, p); in do_send_specific()
4207 if (!error && sig) { in do_send_specific()
4208 error = do_send_sig_info(sig, info, p, PIDTYPE_PID); in do_send_specific()
4223 static int do_tkill(pid_t tgid, pid_t pid, int sig) in do_tkill() argument
4227 prepare_kill_siginfo(sig, &info, PIDTYPE_PID); in do_tkill()
4229 return do_send_specific(tgid, pid, sig, &info); in do_tkill()
4242 SYSCALL_DEFINE3(tgkill, pid_t, tgid, pid_t, pid, int, sig) in SYSCALL_DEFINE3() argument
4248 return do_tkill(tgid, pid, sig); in SYSCALL_DEFINE3()
4258 SYSCALL_DEFINE2(tkill, pid_t, pid, int, sig) in SYSCALL_DEFINE2() argument
4264 return do_tkill(0, pid, sig); in SYSCALL_DEFINE2()
4267 static int do_rt_sigqueueinfo(pid_t pid, int sig, kernel_siginfo_t *info) in do_rt_sigqueueinfo() argument
4274 return kill_proc_info(sig, info, pid); in do_rt_sigqueueinfo()
4283 SYSCALL_DEFINE3(rt_sigqueueinfo, pid_t, pid, int, sig, in SYSCALL_DEFINE3() argument
4287 int ret = __copy_siginfo_from_user(sig, &info, uinfo); in SYSCALL_DEFINE3()
4290 return do_rt_sigqueueinfo(pid, sig, &info); in SYSCALL_DEFINE3()
4296 int, sig, in COMPAT_SYSCALL_DEFINE3()
4300 int ret = __copy_siginfo_from_user32(sig, &info, uinfo); in COMPAT_SYSCALL_DEFINE3()
4303 return do_rt_sigqueueinfo(pid, sig, &info); in COMPAT_SYSCALL_DEFINE3()
4307 static int do_rt_tgsigqueueinfo(pid_t tgid, pid_t pid, int sig, kernel_siginfo_t *info) in do_rt_tgsigqueueinfo() argument
4317 return do_send_specific(tgid, pid, sig, info); in do_rt_tgsigqueueinfo()
4320 SYSCALL_DEFINE4(rt_tgsigqueueinfo, pid_t, tgid, pid_t, pid, int, sig, in SYSCALL_DEFINE4() argument
4324 int ret = __copy_siginfo_from_user(sig, &info, uinfo); in SYSCALL_DEFINE4()
4327 return do_rt_tgsigqueueinfo(tgid, pid, sig, &info); in SYSCALL_DEFINE4()
4334 int, sig, in COMPAT_SYSCALL_DEFINE4()
4338 int ret = __copy_siginfo_from_user32(sig, &info, uinfo); in COMPAT_SYSCALL_DEFINE4()
4341 return do_rt_tgsigqueueinfo(tgid, pid, sig, &info); in COMPAT_SYSCALL_DEFINE4()
4348 void kernel_sigaction(int sig, __sighandler_t action) in kernel_sigaction() argument
4351 current->sighand->action[sig - 1].sa.sa_handler = action; in kernel_sigaction()
4356 sigaddset(&mask, sig); in kernel_sigaction()
4371 int do_sigaction(int sig, struct k_sigaction *act, struct k_sigaction *oact) in do_sigaction() argument
4377 if (!valid_signal(sig) || sig < 1 || (act && sig_kernel_only(sig))) in do_sigaction()
4380 k = &p->sighand->action[sig-1]; in do_sigaction()
4425 if (sig_handler_ignored(sig_handler(p, sig), sig)) { in do_sigaction()
4427 sigaddset(&mask, sig); in do_sigaction()
4432 posixtimer_sig_unignore(p, sig); in do_sigaction()
4633 return put_user(set.sig[0], set32); in COMPAT_SYSCALL_DEFINE1()
4656 old_set = current->blocked.sig[0]; in SYSCALL_DEFINE3()
4672 new_blocked.sig[0] = new_set; in SYSCALL_DEFINE3()
4698 SYSCALL_DEFINE4(rt_sigaction, int, sig, in SYSCALL_DEFINE4() argument
4713 ret = do_sigaction(sig, act ? &new_sa : NULL, oact ? &old_sa : NULL); in SYSCALL_DEFINE4()
4723 COMPAT_SYSCALL_DEFINE4(rt_sigaction, int, sig, in COMPAT_SYSCALL_DEFINE4() argument
4752 ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL); in COMPAT_SYSCALL_DEFINE4()
4770 SYSCALL_DEFINE3(sigaction, int, sig, in SYSCALL_DEFINE3() argument
4791 ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL); in SYSCALL_DEFINE3()
4798 __put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask)) in SYSCALL_DEFINE3()
4806 COMPAT_SYSCALL_DEFINE3(sigaction, int, sig, in COMPAT_SYSCALL_DEFINE3() argument
4831 ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL); in COMPAT_SYSCALL_DEFINE3()
4840 __put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask)) in COMPAT_SYSCALL_DEFINE3()
4855 return current->blocked.sig[0]; in SYSCALL_DEFINE0()
4860 int old = current->blocked.sig[0]; in SYSCALL_DEFINE1()
4874 SYSCALL_DEFINE2(signal, int, sig, __sighandler_t, handler) in SYSCALL_DEFINE2() argument
4883 ret = do_sigaction(sig, &new_sa, &old_sa); in SYSCALL_DEFINE2()
5091 void kdb_send_sig(struct task_struct *t, int sig) in kdb_send_sig() argument
5113 ret = send_signal_locked(sig, SEND_SIG_PRIV, t, PIDTYPE_PID); in kdb_send_sig()
5117 sig, t->pid); in kdb_send_sig()
5119 kdb_printf("Signal %d is sent to process %d.\n", sig, t->pid); in kdb_send_sig()