Lines Matching refs:sig
46 static void __user *sig_handler(struct task_struct *t, int sig) in sig_handler() argument
48 return t->sighand->action[sig - 1].sa.sa_handler; in sig_handler()
51 static int sig_handler_ignored(void __user *handler, int sig) in sig_handler_ignored() argument
55 (handler == SIG_DFL && sig_kernel_ignore(sig)); in sig_handler_ignored()
58 static int sig_ignored(struct task_struct *t, int sig) in sig_ignored() argument
67 if (sigismember(&t->blocked, sig) || sigismember(&t->real_blocked, sig)) in sig_ignored()
70 handler = sig_handler(t, sig); in sig_ignored()
71 if (!sig_handler_ignored(handler, sig)) in sig_ignored()
77 return !tracehook_consider_ignored_signal(t, sig, handler); in sig_ignored()
92 ready |= signal->sig[i] &~ blocked->sig[i]; in has_pending_signals()
95 case 4: ready = signal->sig[3] &~ blocked->sig[3]; in has_pending_signals()
96 ready |= signal->sig[2] &~ blocked->sig[2]; in has_pending_signals()
97 ready |= signal->sig[1] &~ blocked->sig[1]; in has_pending_signals()
98 ready |= signal->sig[0] &~ blocked->sig[0]; in has_pending_signals()
101 case 2: ready = signal->sig[1] &~ blocked->sig[1]; in has_pending_signals()
102 ready |= signal->sig[0] &~ blocked->sig[0]; in has_pending_signals()
105 case 1: ready = signal->sig[0] &~ blocked->sig[0]; in has_pending_signals()
152 int sig = 0; in next_signal() local
154 s = pending->signal.sig; in next_signal()
155 m = mask->sig; in next_signal()
160 sig = ffz(~x) + i*_NSIG_BPW + 1; in next_signal()
166 sig = 1; in next_signal()
168 sig = _NSIG_BPW + 1; in next_signal()
171 sig += ffz(~x); in next_signal()
175 sig = ffz(~x) + 1; in next_signal()
179 return sig; in next_signal()
261 int sig = q->info.si_signo; in __flush_itimer_signals() local
264 sigaddset(&retain, sig); in __flush_itimer_signals()
266 sigdelset(&signal, sig); in __flush_itimer_signals()
314 int unhandled_signal(struct task_struct *tsk, int sig) in unhandled_signal() argument
316 void __user *handler = tsk->sighand->action[sig-1].sa.sa_handler; in unhandled_signal()
321 return !tracehook_consider_fatal_signal(tsk, sig, handler); in unhandled_signal()
359 static void collect_signal(int sig, struct sigpending *list, siginfo_t *info) in collect_signal() argument
368 if (q->info.si_signo == sig) { in collect_signal()
375 sigdelset(&list->signal, sig); in collect_signal()
387 info->si_signo = sig; in collect_signal()
398 int sig = next_signal(pending, mask); in __dequeue_signal() local
400 if (sig) { in __dequeue_signal()
402 if (sigismember(current->notifier_mask, sig)) { in __dequeue_signal()
410 collect_signal(sig, pending, info); in __dequeue_signal()
413 return sig; in __dequeue_signal()
577 static int check_kill_permission(int sig, struct siginfo *info, in check_kill_permission() argument
584 if (!valid_signal(sig)) in check_kill_permission()
590 error = audit_signal_info(sig, t); /* Let audit system see the signal */ in check_kill_permission()
600 switch (sig) { in check_kill_permission()
614 return security_task_kill(t, info, sig, 0); in check_kill_permission()
627 static int prepare_signal(int sig, struct task_struct *p) in prepare_signal() argument
636 } else if (sig_kernel_stop(sig)) { in prepare_signal()
645 } else if (sig == SIGCONT) { in prepare_signal()
711 return !sig_ignored(p, sig); in prepare_signal()
722 static inline int wants_signal(int sig, struct task_struct *p) in wants_signal() argument
724 if (sigismember(&p->blocked, sig)) in wants_signal()
728 if (sig == SIGKILL) in wants_signal()
735 static void complete_signal(int sig, struct task_struct *p, int group) in complete_signal() argument
746 if (wants_signal(sig, p)) in complete_signal()
759 while (!wants_signal(sig, t)) { in complete_signal()
776 if (sig_fatal(p, sig) && in complete_signal()
778 !sigismember(&t->real_blocked, sig) && in complete_signal()
779 (sig == SIGKILL || in complete_signal()
780 !tracehook_consider_fatal_signal(t, sig, SIG_DFL))) { in complete_signal()
784 if (!sig_kernel_coredump(sig)) { in complete_signal()
792 signal->group_exit_code = sig; in complete_signal()
807 signal_wake_up(t, sig == SIGKILL); in complete_signal()
811 static inline int legacy_queue(struct sigpending *signals, int sig) in legacy_queue() argument
813 return (sig < SIGRTMIN) && sigismember(&signals->signal, sig); in legacy_queue()
816 static int send_signal(int sig, struct siginfo *info, struct task_struct *t, in send_signal() argument
822 trace_sched_signal_send(sig, t); in send_signal()
825 if (!prepare_signal(sig, t)) in send_signal()
834 if (legacy_queue(pending, sig)) in send_signal()
851 q = __sigqueue_alloc(t, GFP_ATOMIC, (sig < SIGRTMIN && in send_signal()
858 q->info.si_signo = sig; in send_signal()
866 q->info.si_signo = sig; in send_signal()
877 if (sig >= SIGRTMIN && info->si_code != SI_USER) in send_signal()
886 signalfd_notify(t, sig); in send_signal()
887 sigaddset(&pending->signal, sig); in send_signal()
888 complete_signal(sig, t, group); in send_signal()
927 __group_send_sig_info(int sig, struct siginfo *info, struct task_struct *p) in __group_send_sig_info() argument
929 return send_signal(sig, info, p, 1); in __group_send_sig_info()
933 specific_send_sig_info(int sig, struct siginfo *info, struct task_struct *t) in specific_send_sig_info() argument
935 return send_signal(sig, info, t, 0); in specific_send_sig_info()
950 force_sig_info(int sig, struct siginfo *info, struct task_struct *t) in force_sig_info() argument
957 action = &t->sighand->action[sig-1]; in force_sig_info()
959 blocked = sigismember(&t->blocked, sig); in force_sig_info()
963 sigdelset(&t->blocked, sig); in force_sig_info()
969 ret = specific_send_sig_info(sig, info, t); in force_sig_info()
976 force_sig_specific(int sig, struct task_struct *t) in force_sig_specific() argument
978 force_sig_info(sig, SEND_SIG_FORCED, t); in force_sig_specific()
1033 int group_send_sig_info(int sig, struct siginfo *info, struct task_struct *p) in group_send_sig_info() argument
1038 ret = check_kill_permission(sig, info, p); in group_send_sig_info()
1040 if (!ret && sig) { in group_send_sig_info()
1043 ret = __group_send_sig_info(sig, info, p); in group_send_sig_info()
1056 int __kill_pgrp_info(int sig, struct siginfo *info, struct pid *pgrp) in __kill_pgrp_info() argument
1064 int err = group_send_sig_info(sig, info, p); in __kill_pgrp_info()
1071 int kill_pid_info(int sig, struct siginfo *info, struct pid *pid) in kill_pid_info() argument
1080 error = group_send_sig_info(sig, info, p); in kill_pid_info()
1096 kill_proc_info(int sig, struct siginfo *info, pid_t pid) in kill_proc_info() argument
1100 error = kill_pid_info(sig, info, find_vpid(pid)); in kill_proc_info()
1106 int kill_pid_info_as_uid(int sig, struct siginfo *info, struct pid *pid, in kill_pid_info_as_uid() argument
1113 if (!valid_signal(sig)) in kill_pid_info_as_uid()
1130 ret = security_task_kill(p, info, sig, secid); in kill_pid_info_as_uid()
1133 if (sig && p->sighand) { in kill_pid_info_as_uid()
1136 ret = __group_send_sig_info(sig, info, p); in kill_pid_info_as_uid()
1152 static int kill_something_info(int sig, struct siginfo *info, pid_t pid) in kill_something_info() argument
1158 ret = kill_pid_info(sig, info, find_vpid(pid)); in kill_something_info()
1165 ret = __kill_pgrp_info(sig, info, in kill_something_info()
1174 int err = group_send_sig_info(sig, info, p); in kill_something_info()
1195 send_sig_info(int sig, struct siginfo *info, struct task_struct *p) in send_sig_info() argument
1204 if (!valid_signal(sig)) in send_sig_info()
1208 ret = specific_send_sig_info(sig, info, p); in send_sig_info()
1217 send_sig(int sig, struct task_struct *p, int priv) in send_sig() argument
1219 return send_sig_info(sig, __si_special(priv), p); in send_sig()
1223 force_sig(int sig, struct task_struct *p) in force_sig() argument
1225 force_sig_info(sig, SEND_SIG_PRIV, p); in force_sig()
1235 force_sigsegv(int sig, struct task_struct *p) in force_sigsegv() argument
1237 if (sig == SIGSEGV) { in force_sigsegv()
1240 p->sighand->action[sig - 1].sa.sa_handler = SIG_DFL; in force_sigsegv()
1247 int kill_pgrp(struct pid *pid, int sig, int priv) in kill_pgrp() argument
1252 ret = __kill_pgrp_info(sig, __si_special(priv), pid); in kill_pgrp()
1259 int kill_pid(struct pid *pid, int sig, int priv) in kill_pid() argument
1261 return kill_pid_info(sig, __si_special(priv), pid); in kill_pid()
1311 int sig = q->info.si_signo; in send_sigqueue() local
1323 if (!prepare_signal(sig, t)) in send_sigqueue()
1338 signalfd_notify(t, sig); in send_sigqueue()
1341 sigaddset(&pending->signal, sig); in send_sigqueue()
1342 complete_signal(sig, t, group); in send_sigqueue()
1365 int do_notify_parent(struct task_struct *tsk, int sig) in do_notify_parent() argument
1370 int ret = sig; in do_notify_parent()
1372 BUG_ON(sig == -1); in do_notify_parent()
1380 info.si_signo = sig; in do_notify_parent()
1416 if (!tsk->ptrace && sig == SIGCHLD && in do_notify_parent()
1436 sig = -1; in do_notify_parent()
1438 if (valid_signal(sig) && sig > 0) in do_notify_parent()
1439 __group_send_sig_info(sig, &info, tsk->parent); in do_notify_parent()
1671 struct signal_struct *sig = current->signal; in do_signal_stop() local
1674 if (sig->group_stop_count > 0) { in do_signal_stop()
1679 stop_count = --sig->group_stop_count; in do_signal_stop()
1683 if (!likely(sig->flags & SIGNAL_STOP_DEQUEUED) || in do_signal_stop()
1684 unlikely(signal_group_exit(sig))) in do_signal_stop()
1690 sig->group_exit_code = signr; in do_signal_stop()
1704 sig->group_stop_count = stop_count; in do_signal_stop()
1708 sig->flags = SIGNAL_STOP_STOPPED; in do_signal_stop()
1709 current->exit_code = sig->group_exit_code; in do_signal_stop()
2162 int ret, sig; in SYSCALL_DEFINE4() local
2191 sig = dequeue_signal(current, &these, &info); in SYSCALL_DEFINE4()
2192 if (!sig) { in SYSCALL_DEFINE4()
2210 sig = dequeue_signal(current, &these, &info); in SYSCALL_DEFINE4()
2218 if (sig) { in SYSCALL_DEFINE4()
2219 ret = sig; in SYSCALL_DEFINE4()
2233 SYSCALL_DEFINE2(kill, pid_t, pid, int, sig) in SYSCALL_DEFINE2() argument
2237 info.si_signo = sig; in SYSCALL_DEFINE2()
2243 return kill_something_info(sig, &info, pid); in SYSCALL_DEFINE2()
2246 static int do_tkill(pid_t tgid, pid_t pid, int sig) in do_tkill() argument
2254 info.si_signo = sig; in do_tkill()
2263 error = check_kill_permission(sig, &info, p); in do_tkill()
2272 if (!error && sig && lock_task_sighand(p, &flags)) { in do_tkill()
2273 error = specific_send_sig_info(sig, &info, p); in do_tkill()
2292 SYSCALL_DEFINE3(tgkill, pid_t, tgid, pid_t, pid, int, sig) in SYSCALL_DEFINE3() argument
2298 return do_tkill(tgid, pid, sig); in SYSCALL_DEFINE3()
2304 SYSCALL_DEFINE2(tkill, pid_t, pid, int, sig) in SYSCALL_DEFINE2() argument
2310 return do_tkill(0, pid, sig); in SYSCALL_DEFINE2()
2313 SYSCALL_DEFINE3(rt_sigqueueinfo, pid_t, pid, int, sig, in SYSCALL_DEFINE3() argument
2325 info.si_signo = sig; in SYSCALL_DEFINE3()
2328 return kill_proc_info(sig, &info, pid); in SYSCALL_DEFINE3()
2331 int do_sigaction(int sig, struct k_sigaction *act, struct k_sigaction *oact) in do_sigaction() argument
2337 if (!valid_signal(sig) || sig < 1 || (act && sig_kernel_only(sig))) in do_sigaction()
2340 k = &t->sighand->action[sig-1]; in do_sigaction()
2361 if (sig_handler_ignored(sig_handler(t, sig), sig)) { in do_sigaction()
2363 sigaddset(&mask, sig); in do_sigaction()
2466 old_set = current->blocked.sig[0]; in SYSCALL_DEFINE3()
2480 current->blocked.sig[0] = new_set; in SYSCALL_DEFINE3()
2491 old_set = current->blocked.sig[0]; in SYSCALL_DEFINE3()
2504 SYSCALL_DEFINE4(rt_sigaction, int, sig, in SYSCALL_DEFINE4() argument
2521 ret = do_sigaction(sig, act ? &new_sa : NULL, oact ? &old_sa : NULL); in SYSCALL_DEFINE4()
2540 return current->blocked.sig[0]; in SYSCALL_DEFINE0()
2548 old = current->blocked.sig[0]; in SYSCALL_DEFINE1()
2563 SYSCALL_DEFINE2(signal, int, sig, __sighandler_t, handler) in SYSCALL_DEFINE2() argument
2572 ret = do_sigaction(sig, &new_sa, &old_sa); in SYSCALL_DEFINE2()