Lines Matching +full:default +full:- +full:blocked
1 // SPDX-License-Identifier: GPL-2.0-only
7 * 1997-11-02 Modified for POSIX.1b signals by Richard Henderson
9 * 2003-06-02 Jim Houston - Concurrent Computer Corp.
46 #include <linux/posix-timers.h>
62 #include "time/posix-timers.h"
74 return t->sighand->action[sig - 1].sa.sa_handler; in sig_handler()
94 if (unlikely(t->signal->flags & SIGNAL_UNKILLABLE) && in sig_task_ignored()
99 if (unlikely((t->flags & PF_KTHREAD) && in sig_task_ignored()
109 * Blocked signals are never ignored, since the in sig_ignored()
113 if (sigismember(&t->blocked, sig) || sigismember(&t->real_blocked, sig)) in sig_ignored()
121 if (t->ptrace && sig != SIGKILL) in sig_ignored()
128 * Re-calculate pending state from the set of locally pending
129 * signals, globally pending signals, and blocked signals.
131 static inline bool has_pending_signals(sigset_t *signal, sigset_t *blocked) in has_pending_signals() argument
137 default: in has_pending_signals()
138 for (i = _NSIG_WORDS, ready = 0; --i >= 0 ;) in has_pending_signals()
139 ready |= signal->sig[i] &~ blocked->sig[i]; in has_pending_signals()
142 case 4: ready = signal->sig[3] &~ blocked->sig[3]; in has_pending_signals()
143 ready |= signal->sig[2] &~ blocked->sig[2]; in has_pending_signals()
144 ready |= signal->sig[1] &~ blocked->sig[1]; in has_pending_signals()
145 ready |= signal->sig[0] &~ blocked->sig[0]; in has_pending_signals()
148 case 2: ready = signal->sig[1] &~ blocked->sig[1]; in has_pending_signals()
149 ready |= signal->sig[0] &~ blocked->sig[0]; in has_pending_signals()
152 case 1: ready = signal->sig[0] &~ blocked->sig[0]; in has_pending_signals()
157 #define PENDING(p,b) has_pending_signals(&(p)->signal, (b))
161 if ((t->jobctl & (JOBCTL_PENDING_MASK | JOBCTL_TRAP_FREEZE)) || in recalc_sigpending_tsk()
162 PENDING(&t->pending, &t->blocked) || in recalc_sigpending_tsk()
163 PENDING(&t->signal->shared_pending, &t->blocked) || in recalc_sigpending_tsk()
171 * when it's possible the current syscall is returning -ERESTART*. in recalc_sigpending_tsk()
191 spin_lock_irq(¤t->sighand->siglock); in calculate_sigpending()
194 spin_unlock_irq(¤t->sighand->siglock); in calculate_sigpending()
208 s = pending->signal.sig; in next_signal()
209 m = mask->sig; in next_signal()
224 default: in next_signal()
260 current->comm, current->pid, sig); in print_dropped_signal()
264 * task_set_jobctl_pending - set jobctl pending bits
268 * Clear @mask from @task->jobctl. @mask must be subset of
275 * Must be called with @task->sighand->siglock held.
286 if (unlikely(fatal_signal_pending(task) || (task->flags & PF_EXITING))) in task_set_jobctl_pending()
290 task->jobctl &= ~JOBCTL_STOP_SIGMASK; in task_set_jobctl_pending()
292 task->jobctl |= mask; in task_set_jobctl_pending()
297 * task_clear_jobctl_trapping - clear jobctl trapping bit
302 * locking. @task->siglock guarantees that @task->parent points to the
306 * Must be called with @task->sighand->siglock held.
310 if (unlikely(task->jobctl & JOBCTL_TRAPPING)) { in task_clear_jobctl_trapping()
311 task->jobctl &= ~JOBCTL_TRAPPING; in task_clear_jobctl_trapping()
313 wake_up_bit(&task->jobctl, JOBCTL_TRAPPING_BIT); in task_clear_jobctl_trapping()
318 * task_clear_jobctl_pending - clear jobctl pending bits
322 * Clear @mask from @task->jobctl. @mask must be subset of
330 * Must be called with @task->sighand->siglock held.
339 task->jobctl &= ~mask; in task_clear_jobctl_pending()
341 if (!(task->jobctl & JOBCTL_PENDING_MASK)) in task_clear_jobctl_pending()
346 * task_participate_group_stop - participate in a group stop
355 * Must be called with @task->sighand->siglock held.
363 struct signal_struct *sig = task->signal; in task_participate_group_stop()
364 bool consume = task->jobctl & JOBCTL_STOP_CONSUME; in task_participate_group_stop()
366 WARN_ON_ONCE(!(task->jobctl & JOBCTL_STOP_PENDING)); in task_participate_group_stop()
373 if (!WARN_ON_ONCE(sig->group_stop_count == 0)) in task_participate_group_stop()
374 sig->group_stop_count--; in task_participate_group_stop()
380 if (!sig->group_stop_count && !(sig->flags & SIGNAL_STOP_STOPPED)) { in task_participate_group_stop()
389 unsigned long mask = current->jobctl & JOBCTL_STOP_SIGMASK; in task_join_group_stop()
390 struct signal_struct *sig = current->signal; in task_join_group_stop()
392 if (sig->group_stop_count) { in task_join_group_stop()
393 sig->group_stop_count++; in task_join_group_stop()
395 } else if (!(sig->flags & SIGNAL_STOP_STOPPED)) in task_join_group_stop()
398 /* Have the new thread join an on-going signal group stop */ in task_join_group_stop()
436 INIT_LIST_HEAD(&q->list); in __sigqueue_init()
437 q->flags = sigqueue_flags; in __sigqueue_init()
438 q->ucounts = ucounts; in __sigqueue_init()
443 * - this may be called without locks if and only if t == current, otherwise an
467 if (q->flags & SIGQUEUE_PREALLOC) { in __sigqueue_free()
471 if (q->ucounts) { in __sigqueue_free()
472 dec_rlimit_put_ucounts(q->ucounts, UCOUNT_RLIMIT_SIGPENDING); in __sigqueue_free()
473 q->ucounts = NULL; in __sigqueue_free()
482 sigemptyset(&queue->signal); in flush_sigqueue()
483 while (!list_empty(&queue->list)) { in flush_sigqueue()
484 q = list_entry(queue->list.next, struct sigqueue , list); in flush_sigqueue()
485 list_del_init(&q->list); in flush_sigqueue()
497 spin_lock_irqsave(&t->sighand->siglock, flags); in flush_signals()
499 flush_sigqueue(&t->pending); in flush_signals()
500 flush_sigqueue(&t->signal->shared_pending); in flush_signals()
501 spin_unlock_irqrestore(&t->sighand->siglock, flags); in flush_signals()
510 t->sighand->action[i].sa.sa_handler = SIG_IGN; in ignore_signals()
523 struct k_sigaction *ka = &t->sighand->action[0]; in flush_signal_handlers()
524 for (i = _NSIG ; i != 0 ; i--) { in flush_signal_handlers()
525 if (force_default || ka->sa.sa_handler != SIG_IGN) in flush_signal_handlers()
526 ka->sa.sa_handler = SIG_DFL; in flush_signal_handlers()
527 ka->sa.sa_flags = 0; in flush_signal_handlers()
529 ka->sa.sa_restorer = NULL; in flush_signal_handlers()
531 sigemptyset(&ka->sa.sa_mask); in flush_signal_handlers()
538 void __user *handler = tsk->sighand->action[sig-1].sa.sa_handler; in unhandled_signal()
550 return !tsk->ptrace; in unhandled_signal()
562 list_for_each_entry(q, &list->list, list) { in collect_signal()
563 if (q->info.si_signo == sig) { in collect_signal()
570 sigdelset(&list->signal, sig); in collect_signal()
574 list_del_init(&first->list); in collect_signal()
575 copy_siginfo(info, &first->info); in collect_signal()
578 * posix-timer signals are preallocated and freed when the last in collect_signal()
584 if (unlikely((first->flags & SIGQUEUE_PREALLOC) && (info->si_code == SI_TIMER))) in collect_signal()
591 * a fast-pathed signal or we must have been in collect_signal()
595 info->si_signo = sig; in collect_signal()
596 info->si_errno = 0; in collect_signal()
597 info->si_code = SI_USER; in collect_signal()
598 info->si_pid = 0; in collect_signal()
599 info->si_uid = 0; in collect_signal()
624 lockdep_assert_held(&tsk->sighand->siglock); in dequeue_signal()
629 signr = __dequeue_signal(&tsk->pending, mask, info, &timer_sigq); in dequeue_signal()
632 signr = __dequeue_signal(&tsk->signal->shared_pending, in dequeue_signal()
653 * is to alert stop-signal processing code when another in dequeue_signal()
656 current->jobctl |= JOBCTL_STOP_DEQUEUED; in dequeue_signal()
671 struct sigpending *pending = &tsk->pending; in dequeue_synchronous_signal()
677 if (!((pending->signal.sig[0] & ~tsk->blocked.sig[0]) & SYNCHRONOUS_MASK)) in dequeue_synchronous_signal()
683 list_for_each_entry(q, &pending->list, list) { in dequeue_synchronous_signal()
685 if ((q->info.si_code > SI_USER) && in dequeue_synchronous_signal()
686 (sigmask(q->info.si_signo) & SYNCHRONOUS_MASK)) { in dequeue_synchronous_signal()
696 list_for_each_entry_continue(q, &pending->list, list) { in dequeue_synchronous_signal()
697 if (q->info.si_signo == sync->info.si_signo) in dequeue_synchronous_signal()
701 sigdelset(&pending->signal, sync->info.si_signo); in dequeue_synchronous_signal()
704 list_del_init(&sync->list); in dequeue_synchronous_signal()
705 copy_siginfo(info, &sync->info); in dequeue_synchronous_signal()
707 return info->si_signo; in dequeue_synchronous_signal()
719 * goes through ->blocked
723 lockdep_assert_held(&t->sighand->siglock); in signal_wake_up_state()
729 * case. We don't check t->state here because there is a race with it in signal_wake_up_state()
742 if (likely(!(q->flags & SIGQUEUE_PREALLOC) || q->info.si_code != SI_TIMER)) in sigqueue_free_ignored()
754 lockdep_assert_held(&p->sighand->siglock); in flush_sigqueue_mask()
756 sigandsets(&m, mask, &s->signal); in flush_sigqueue_mask()
760 sigandnsets(&s->signal, &s->signal, mask); in flush_sigqueue_mask()
761 list_for_each_entry_safe(q, n, &s->list, list) { in flush_sigqueue_mask()
762 if (sigismember(mask, q->info.si_signo)) { in flush_sigqueue_mask()
763 list_del_init(&q->list); in flush_sigqueue_mask()
788 return uid_eq(cred->euid, tcred->suid) || in kill_ok_by_cred()
789 uid_eq(cred->euid, tcred->uid) || in kill_ok_by_cred()
790 uid_eq(cred->uid, tcred->suid) || in kill_ok_by_cred()
791 uid_eq(cred->uid, tcred->uid) || in kill_ok_by_cred()
792 ns_capable(tcred->user_ns, CAP_KILL); in kill_ok_by_cred()
797 * - the caller must hold the RCU read lock
806 return -EINVAL; in check_kill_permission()
827 default: in check_kill_permission()
828 return -EPERM; in check_kill_permission()
836 * ptrace_trap_notify - schedule trap to notify ptracer
845 * re-trap for the new event. If trapped otherwise, STOP trap will be
850 * Must be called with @task->sighand->siglock held.
854 WARN_ON_ONCE(!(t->ptrace & PT_SEIZED)); in ptrace_trap_notify()
855 lockdep_assert_held(&t->sighand->siglock); in ptrace_trap_notify()
858 ptrace_signal_wake_up(t, t->jobctl & JOBCTL_LISTENING); in ptrace_trap_notify()
862 * Handle magic process-wide effects of stop/continue signals. Unlike
863 * the signal actions, these happen immediately at signal-generation
873 struct signal_struct *signal = p->signal; in prepare_signal()
877 if (signal->flags & SIGNAL_GROUP_EXIT) { in prepare_signal()
878 if (signal->core_state) in prepare_signal()
889 flush_sigqueue_mask(p, &flush, &signal->shared_pending); in prepare_signal()
891 flush_sigqueue_mask(p, &flush, &t->pending); in prepare_signal()
898 flush_sigqueue_mask(p, &flush, &signal->shared_pending); in prepare_signal()
900 flush_sigqueue_mask(p, &flush, &t->pending); in prepare_signal()
902 if (likely(!(t->ptrace & PT_SEIZED))) { in prepare_signal()
903 t->jobctl &= ~JOBCTL_STOPPED; in prepare_signal()
918 if (signal->flags & SIGNAL_STOP_STOPPED) in prepare_signal()
920 else if (signal->group_stop_count) in prepare_signal()
926 * will take ->siglock, notice SIGNAL_CLD_MASK, and in prepare_signal()
930 signal->group_stop_count = 0; in prepare_signal()
931 signal->group_exit_code = 0; in prepare_signal()
948 if (sigismember(&p->blocked, sig)) in wants_signal()
951 if (p->flags & PF_EXITING) in wants_signal()
965 struct signal_struct *signal = p->signal; in complete_signal()
985 t = signal->curr_target; in complete_signal()
988 if (t == signal->curr_target) in complete_signal()
996 signal->curr_target = t; in complete_signal()
1004 (signal->core_state || !(signal->flags & SIGNAL_GROUP_EXIT)) && in complete_signal()
1005 !sigismember(&t->real_blocked, sig) && in complete_signal()
1006 (sig == SIGKILL || !p->ptrace)) { in complete_signal()
1017 signal->flags = SIGNAL_GROUP_EXIT; in complete_signal()
1018 signal->group_exit_code = sig; in complete_signal()
1019 signal->group_stop_count = 0; in complete_signal()
1022 sigaddset(&t->pending.signal, SIGKILL); in complete_signal()
1030 * The signal is already in the shared-pending queue. in complete_signal()
1039 return (sig < SIGRTMIN) && sigismember(&signals->signal, sig); in legacy_queue()
1050 lockdep_assert_held(&t->sighand->siglock); in __send_signal_locked()
1056 pending = (type != PIDTYPE_PID) ? &t->signal->shared_pending : &t->pending; in __send_signal_locked()
1058 * Short-circuit ignored signals and support queuing in __send_signal_locked()
1059 * exactly one non-rt signal, so that we can get more in __send_signal_locked()
1070 if ((sig == SIGKILL) || (t->flags & PF_KTHREAD)) in __send_signal_locked()
1074 * Real-time signals must be queued if sent by sigqueue, or in __send_signal_locked()
1075 * some other real-time mechanism. It is implementation in __send_signal_locked()
1083 override_rlimit = (is_si_special(info) || info->si_code >= 0); in __send_signal_locked()
1090 list_add_tail(&q->list, &pending->list); in __send_signal_locked()
1093 clear_siginfo(&q->info); in __send_signal_locked()
1094 q->info.si_signo = sig; in __send_signal_locked()
1095 q->info.si_errno = 0; in __send_signal_locked()
1096 q->info.si_code = SI_USER; in __send_signal_locked()
1097 q->info.si_pid = task_tgid_nr_ns(current, in __send_signal_locked()
1100 q->info.si_uid = in __send_signal_locked()
1106 clear_siginfo(&q->info); in __send_signal_locked()
1107 q->info.si_signo = sig; in __send_signal_locked()
1108 q->info.si_errno = 0; in __send_signal_locked()
1109 q->info.si_code = SI_KERNEL; in __send_signal_locked()
1110 q->info.si_pid = 0; in __send_signal_locked()
1111 q->info.si_uid = 0; in __send_signal_locked()
1113 default: in __send_signal_locked()
1114 copy_siginfo(&q->info, info); in __send_signal_locked()
1118 sig >= SIGRTMIN && info->si_code != SI_USER) { in __send_signal_locked()
1125 ret = -EAGAIN; in __send_signal_locked()
1137 sigaddset(&pending->signal, sig); in __send_signal_locked()
1139 /* Let multiprocess signals appear after on-going forks */ in __send_signal_locked()
1142 hlist_for_each_entry(delayed, &t->signal->multiprocess, node) { in __send_signal_locked()
1143 sigset_t *signal = &delayed->signal; in __send_signal_locked()
1162 switch (siginfo_layout(info->si_signo, info->si_code)) { in has_si_pid_and_uid()
1202 kuid_t uid = make_kuid(current_user_ns(), info->si_uid); in send_signal_locked()
1203 info->si_uid = from_kuid_munged(t_user_ns, uid); in send_signal_locked()
1208 force = (info->si_code == SI_KERNEL); in send_signal_locked()
1212 info->si_pid = 0; in send_signal_locked()
1227 exe_file, current->comm, signr); in print_fatal_signal()
1231 current->comm, signr); in print_fatal_signal()
1235 pr_info("code at %08lx: ", regs->ip); in print_fatal_signal()
1241 if (get_user(insn, (unsigned char *)(regs->ip + i))) in print_fatal_signal()
1260 __setup("print-fatal-signals=", setup_print_fatal_signals);
1266 int ret = -ESRCH; in do_send_sig_info()
1287 * since we do not want to have a signal handler that was blocked
1288 * be invoked when user space had explicitly blocked it.
1298 int ret, blocked, ignored; in force_sig_info_to_task() local
1300 int sig = info->si_signo; in force_sig_info_to_task()
1302 spin_lock_irqsave(&t->sighand->siglock, flags); in force_sig_info_to_task()
1303 action = &t->sighand->action[sig-1]; in force_sig_info_to_task()
1304 ignored = action->sa.sa_handler == SIG_IGN; in force_sig_info_to_task()
1305 blocked = sigismember(&t->blocked, sig); in force_sig_info_to_task()
1306 if (blocked || ignored || (handler != HANDLER_CURRENT)) { in force_sig_info_to_task()
1307 action->sa.sa_handler = SIG_DFL; in force_sig_info_to_task()
1309 action->sa.sa_flags |= SA_IMMUTABLE; in force_sig_info_to_task()
1310 if (blocked) in force_sig_info_to_task()
1311 sigdelset(&t->blocked, sig); in force_sig_info_to_task()
1317 if (action->sa.sa_handler == SIG_DFL && in force_sig_info_to_task()
1318 (!t->ptrace || (handler == HANDLER_EXIT))) in force_sig_info_to_task()
1319 t->signal->flags &= ~SIGNAL_UNKILLABLE; in force_sig_info_to_task()
1321 /* This can happen if the signal was already pending and blocked */ in force_sig_info_to_task()
1324 spin_unlock_irqrestore(&t->sighand->siglock, flags); in force_sig_info_to_task()
1342 p->signal->group_stop_count = 0; in zap_other_threads()
1349 if (t->exit_state) in zap_other_threads()
1351 sigaddset(&t->pending.signal, SIGKILL); in zap_other_threads()
1365 sighand = rcu_dereference(tsk->sighand); in __lock_task_sighand()
1372 * initializes ->siglock: this slab can't go away, it has in __lock_task_sighand()
1373 * the same object type, ->siglock can't be reinitialized. in __lock_task_sighand()
1375 * We need to ensure that tsk->sighand is still the same in __lock_task_sighand()
1378 * must see ->sighand == NULL. in __lock_task_sighand()
1380 spin_lock_irqsave(&sighand->siglock, *flags); in __lock_task_sighand()
1381 if (likely(sighand == rcu_access_pointer(tsk->sighand))) in __lock_task_sighand()
1383 spin_unlock_irqrestore(&sighand->siglock, *flags); in __lock_task_sighand()
1396 sighand = rcu_dereference(task->sighand); in lockdep_assert_task_sighand_held()
1398 lockdep_assert_held(&sighand->siglock); in lockdep_assert_task_sighand_held()
1427 * - the caller must hold at least a readlock on tasklist_lock
1432 int ret = -ESRCH; in __kill_pgrp_info()
1439 * Otherwise we return the last err or -ESRCH if this in __kill_pgrp_info()
1452 int error = -ESRCH; in kill_pid_info_type()
1461 if (likely(!p || error != -ESRCH)) in kill_pid_info_type()
1490 return uid_eq(cred->euid, pcred->suid) || in kill_as_cred_perm()
1491 uid_eq(cred->euid, pcred->uid) || in kill_as_cred_perm()
1492 uid_eq(cred->uid, pcred->suid) || in kill_as_cred_perm()
1493 uid_eq(cred->uid, pcred->uid); in kill_as_cred_perm()
1527 int ret = -EINVAL; in kill_pid_usb_asyncio()
1541 ret = -ESRCH; in kill_pid_usb_asyncio()
1545 ret = -EPERM; in kill_pid_usb_asyncio()
1557 ret = -ESRCH; in kill_pid_usb_asyncio()
1568 * POSIX specifies that kill(-1,sig) is unspecified, but what we have
1579 /* -INT_MIN is undefined. Exclude this case to avoid a UBSAN warning */ in kill_something_info()
1581 return -ESRCH; in kill_something_info()
1584 if (pid != -1) { in kill_something_info()
1586 pid ? find_vpid(-pid) : task_pgrp(current)); in kill_something_info()
1597 if (err != -EPERM) in kill_something_info()
1601 ret = count ? retval : -ESRCH; in kill_something_info()
1619 return -EINVAL; in send_sig_info()
1791 * process if SIGTRAP is blocked, however, delivering the signal in send_sig_perf()
1796 info.si_perf_flags = sigismember(¤t->blocked, info.si_signo) ? in send_sig_perf()
1804 * force_sig_seccomp - signals the task to allow in-process syscall emulation
1806 * @reason: filter-supplied reason code to send to userland (via si_errno)
1905 signal = pending->signal; in __flush_itimer_signals()
1908 list_for_each_entry_safe(q, n, &pending->list, list) { in __flush_itimer_signals()
1909 int sig = q->info.si_signo; in __flush_itimer_signals()
1911 if (likely(q->info.si_code != SI_TIMER)) { in __flush_itimer_signals()
1915 list_del_init(&q->list); in __flush_itimer_signals()
1920 sigorsets(&pending->signal, &signal, &retain); in __flush_itimer_signals()
1927 guard(spinlock_irqsave)(&tsk->sighand->siglock); in flush_itimer_signals()
1928 __flush_itimer_signals(&tsk->pending); in flush_itimer_signals()
1929 __flush_itimer_signals(&tsk->signal->shared_pending); in flush_itimer_signals()
1934 struct ucounts *ucounts = sig_get_ucounts(current, -1, 0); in posixtimer_init_sigqueue()
1938 clear_siginfo(&q->info); in posixtimer_init_sigqueue()
1946 int sig = q->info.si_signo; in posixtimer_queue_sigqueue()
1949 pending = (type != PIDTYPE_PID) ? &t->signal->shared_pending : &t->pending; in posixtimer_queue_sigqueue()
1950 list_add_tail(&q->list, &pending->list); in posixtimer_queue_sigqueue()
1951 sigaddset(&pending->signal, sig); in posixtimer_queue_sigqueue()
1959 * into t->pending).
1968 struct task_struct *t = pid_task(tmr->it_pid, tmr->it_pid_type); in posixtimer_get_target()
1970 if (t && tmr->it_pid_type != PIDTYPE_PID && in posixtimer_get_target()
1971 same_thread_group(t, current) && !current->exit_state) in posixtimer_get_target()
1978 struct sigqueue *q = &tmr->sigq; in posixtimer_send_sigqueue()
1979 int sig = q->info.si_signo; in posixtimer_send_sigqueue()
1997 tmr->it_sigqueue_seq = tmr->it_signal_seq; in posixtimer_send_sigqueue()
2002 * non-periodic timer. in posixtimer_send_sigqueue()
2004 tmr->it_sig_periodic = tmr->it_status == POSIX_TIMER_REQUEUE_PENDING; in posixtimer_send_sigqueue()
2009 if (!list_empty(&q->list)) { in posixtimer_send_sigqueue()
2011 * The signal was ignored and blocked. The timer in posixtimer_send_sigqueue()
2012 * expiry queued it because blocked signals are in posixtimer_send_sigqueue()
2031 if (tmr->it_sig_periodic) { in posixtimer_send_sigqueue()
2037 if (hlist_unhashed(&tmr->ignored_list)) { in posixtimer_send_sigqueue()
2045 } else if (!hlist_unhashed(&tmr->ignored_list)) { in posixtimer_send_sigqueue()
2055 hlist_del_init(&tmr->ignored_list); in posixtimer_send_sigqueue()
2061 if (unlikely(!list_empty(&q->list))) { in posixtimer_send_sigqueue()
2068 * If the signal is on the ignore list, it got blocked after it was in posixtimer_send_sigqueue()
2075 if (likely(hlist_unhashed(&tmr->ignored_list))) in posixtimer_send_sigqueue()
2078 hlist_del_init(&tmr->ignored_list); in posixtimer_send_sigqueue()
2080 posixtimer_queue_sigqueue(q, t, tmr->it_pid_type); in posixtimer_send_sigqueue()
2083 trace_signal_generate(sig, &q->info, t, tmr->it_pid_type != PIDTYPE_PID, result); in posixtimer_send_sigqueue()
2093 * from a non-periodic timer, then just drop the reference in posixtimer_sig_ignore()
2096 if (posixtimer_valid(tmr) && tmr->it_sig_periodic) in posixtimer_sig_ignore()
2097 hlist_add_head(&tmr->ignored_list, &tsk->signal->ignored_posix_timers); in posixtimer_sig_ignore()
2104 struct hlist_head *head = &tsk->signal->ignored_posix_timers; in posixtimer_sig_unignore()
2125 if (tmr->sigq.info.si_signo != sig) in posixtimer_sig_unignore()
2128 hlist_del_init(&tmr->ignored_list); in posixtimer_sig_unignore()
2131 if (WARN_ON_ONCE(!list_empty(&tmr->sigq.list))) in posixtimer_sig_unignore()
2141 posixtimer_queue_sigqueue(&tmr->sigq, target, tmr->it_pid_type); in posixtimer_sig_unignore()
2155 WARN_ON(task->exit_state == 0); in do_notify_pidfd()
2157 __wake_up(&pid->wait_pidfd, TASK_NORMAL, 0, in do_notify_pidfd()
2166 * self-reaping.
2176 WARN_ON_ONCE(sig == -1); in do_notify_parent()
2181 WARN_ON_ONCE(!tsk->ptrace && in do_notify_parent()
2182 (tsk->group_leader != tsk || !thread_group_empty(tsk))); in do_notify_parent()
2184 /* ptraced, or group-leader without sub-threads */ in do_notify_parent()
2192 if (tsk->parent_exec_id != READ_ONCE(tsk->parent->self_exec_id)) in do_notify_parent()
2211 info.si_pid = task_pid_nr_ns(tsk, task_active_pid_ns(tsk->parent)); in do_notify_parent()
2212 info.si_uid = from_kuid_munged(task_cred_xxx(tsk->parent, user_ns), in do_notify_parent()
2217 info.si_utime = nsec_to_clock_t(utime + tsk->signal->utime); in do_notify_parent()
2218 info.si_stime = nsec_to_clock_t(stime + tsk->signal->stime); in do_notify_parent()
2220 info.si_status = tsk->exit_code & 0x7f; in do_notify_parent()
2221 if (tsk->exit_code & 0x80) in do_notify_parent()
2223 else if (tsk->exit_code & 0x7f) in do_notify_parent()
2227 info.si_status = tsk->exit_code >> 8; in do_notify_parent()
2230 psig = tsk->parent->sighand; in do_notify_parent()
2231 spin_lock_irqsave(&psig->siglock, flags); in do_notify_parent()
2232 if (!tsk->ptrace && sig == SIGCHLD && in do_notify_parent()
2233 (psig->action[SIGCHLD-1].sa.sa_handler == SIG_IGN || in do_notify_parent()
2234 (psig->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDWAIT))) { in do_notify_parent()
2244 * blocked sys_wait4 might now return -ECHILD. in do_notify_parent()
2247 * is implementation-defined: we do (if you don't want in do_notify_parent()
2251 if (psig->action[SIGCHLD-1].sa.sa_handler == SIG_IGN) in do_notify_parent()
2259 __send_signal_locked(sig, &info, tsk->parent, PIDTYPE_TGID, false); in do_notify_parent()
2260 __wake_up_parent(tsk, tsk->parent); in do_notify_parent()
2261 spin_unlock_irqrestore(&psig->siglock, flags); in do_notify_parent()
2267 * do_notify_parent_cldstop - notify parent of stopped/continued state change
2274 * If %true, @tsk reports to @tsk->parent which should be the ptracer.
2289 parent = tsk->parent; in do_notify_parent_cldstop()
2291 tsk = tsk->group_leader; in do_notify_parent_cldstop()
2292 parent = tsk->real_parent; in do_notify_parent_cldstop()
2316 info.si_status = tsk->signal->group_exit_code & 0x7f; in do_notify_parent_cldstop()
2319 info.si_status = tsk->exit_code & 0x7f; in do_notify_parent_cldstop()
2321 default: in do_notify_parent_cldstop()
2325 sighand = parent->sighand; in do_notify_parent_cldstop()
2326 spin_lock_irqsave(&sighand->siglock, flags); in do_notify_parent_cldstop()
2327 if (sighand->action[SIGCHLD-1].sa.sa_handler != SIG_IGN && in do_notify_parent_cldstop()
2328 !(sighand->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDSTOP)) in do_notify_parent_cldstop()
2334 spin_unlock_irqrestore(&sighand->siglock, flags); in do_notify_parent_cldstop()
2338 * This must be called with current->sighand->siglock held.
2341 * We always set current->last_siginfo while stopped here.
2343 * being ptrace-stopped vs being job-control-stopped.
2351 __releases(¤t->sighand->siglock) in ptrace_stop()
2352 __acquires(¤t->sighand->siglock) in ptrace_stop()
2365 spin_unlock_irq(¤t->sighand->siglock); in ptrace_stop()
2367 spin_lock_irq(¤t->sighand->siglock); in ptrace_stop()
2376 if (!current->ptrace || __fatal_signal_pending(current)) in ptrace_stop()
2380 current->jobctl |= JOBCTL_TRACED; in ptrace_stop()
2385 * Also, transition to TRACED and updates to ->jobctl should be in ptrace_stop()
2402 current->ptrace_message = message; in ptrace_stop()
2403 current->last_siginfo = info; in ptrace_stop()
2404 current->exit_code = exit_code; in ptrace_stop()
2411 * TASK_TRACED is entered - ignore it. in ptrace_stop()
2413 if (why == CLD_STOPPED && (current->jobctl & JOBCTL_STOP_PENDING)) in ptrace_stop()
2418 if (info && info->si_code >> 8 == PTRACE_EVENT_STOP) in ptrace_stop()
2424 spin_unlock_irq(¤t->sighand->siglock); in ptrace_stop()
2429 * While ptraced, there are two parents - the ptracer and in ptrace_stop()
2436 if (current->ptrace) in ptrace_stop()
2438 if (gstop_done && (!current->ptrace || ptrace_reparented(current))) in ptrace_stop()
2454 * ptracer's sleep. The preempt-disable section ensures that there in ptrace_stop()
2480 * any signal-sending on another CPU that wants to examine it. in ptrace_stop()
2482 spin_lock_irq(¤t->sighand->siglock); in ptrace_stop()
2483 exit_code = current->exit_code; in ptrace_stop()
2484 current->last_siginfo = NULL; in ptrace_stop()
2485 current->ptrace_message = 0; in ptrace_stop()
2486 current->exit_code = 0; in ptrace_stop()
2489 current->jobctl &= ~(JOBCTL_LISTENING | JOBCTL_PTRACE_FROZEN); in ptrace_stop()
2522 spin_lock_irq(¤t->sighand->siglock); in ptrace_notify()
2524 spin_unlock_irq(¤t->sighand->siglock); in ptrace_notify()
2529 * do_signal_stop - handle group stop for SIGSTOP and other stop signals
2543 * Must be called with @current->sighand->siglock held, which is released
2551 __releases(¤t->sighand->siglock) in do_signal_stop()
2553 struct signal_struct *sig = current->signal; in do_signal_stop()
2555 if (!(current->jobctl & JOBCTL_STOP_PENDING)) { in do_signal_stop()
2559 /* signr will be recorded in task->jobctl for retries */ in do_signal_stop()
2562 if (!likely(current->jobctl & JOBCTL_STOP_DEQUEUED) || in do_signal_stop()
2563 unlikely(sig->flags & SIGNAL_GROUP_EXIT) || in do_signal_stop()
2564 unlikely(sig->group_exec_task)) in do_signal_stop()
2585 if (!(sig->flags & SIGNAL_STOP_STOPPED)) in do_signal_stop()
2586 sig->group_exit_code = signr; in do_signal_stop()
2588 sig->group_stop_count = 0; in do_signal_stop()
2590 sig->group_stop_count++; in do_signal_stop()
2600 sig->group_stop_count++; in do_signal_stop()
2601 if (likely(!(t->ptrace & PT_SEIZED))) in do_signal_stop()
2609 if (likely(!current->ptrace)) { in do_signal_stop()
2620 current->jobctl |= JOBCTL_STOPPED; in do_signal_stop()
2622 spin_unlock_irq(¤t->sighand->siglock); in do_signal_stop()
2654 * do_jobctl_trap - take care of ptrace jobctl traps
2665 * Must be called with @current->sighand->siglock held, which may be
2666 * released and re-acquired before returning with intervening sleep.
2670 struct signal_struct *signal = current->signal; in do_jobctl_trap()
2671 int signr = current->jobctl & JOBCTL_STOP_SIGMASK; in do_jobctl_trap()
2673 if (current->ptrace & PT_SEIZED) { in do_jobctl_trap()
2674 if (!signal->group_stop_count && in do_jobctl_trap()
2675 !(signal->flags & SIGNAL_STOP_STOPPED)) in do_jobctl_trap()
2687 * do_freezer_trap - handle the freezer jobctl trap
2693 * Must be called with @current->sighand->siglock held,
2697 __releases(¤t->sighand->siglock) in do_freezer_trap()
2704 if ((current->jobctl & (JOBCTL_PENDING_MASK | JOBCTL_TRAP_FREEZE)) != in do_freezer_trap()
2706 spin_unlock_irq(¤t->sighand->siglock); in do_freezer_trap()
2713 * immediately (if there is a non-fatal signal pending), and in do_freezer_trap()
2718 spin_unlock_irq(¤t->sighand->siglock); in do_freezer_trap()
2742 current->jobctl |= JOBCTL_STOP_DEQUEUED; in ptrace_signal()
2755 if (signr != info->si_signo) { in ptrace_signal()
2757 info->si_signo = signr; in ptrace_signal()
2758 info->si_errno = 0; in ptrace_signal()
2759 info->si_code = SI_USER; in ptrace_signal()
2761 info->si_pid = task_pid_vnr(current->parent); in ptrace_signal()
2762 info->si_uid = from_kuid_munged(current_user_ns(), in ptrace_signal()
2763 task_uid(current->parent)); in ptrace_signal()
2767 /* If the (new) signal is now blocked, requeue it. */ in ptrace_signal()
2768 if (sigismember(¤t->blocked, signr) || in ptrace_signal()
2779 switch (siginfo_layout(ksig->sig, ksig->info.si_code)) { in hide_si_addr_tag_bits()
2786 ksig->info.si_addr = arch_untagged_si_addr( in hide_si_addr_tag_bits()
2787 ksig->info.si_addr, ksig->sig, ksig->info.si_code); in hide_si_addr_tag_bits()
2801 struct sighand_struct *sighand = current->sighand; in get_signal()
2802 struct signal_struct *signal = current->signal; in get_signal()
2816 * Do this once, we can't return to user-mode if freezing() == T. in get_signal()
2823 spin_lock_irq(&sighand->siglock); in get_signal()
2830 if (unlikely(signal->flags & SIGNAL_CLD_MASK)) { in get_signal()
2833 if (signal->flags & SIGNAL_CLD_CONTINUED) in get_signal()
2838 signal->flags &= ~SIGNAL_CLD_MASK; in get_signal()
2840 spin_unlock_irq(&sighand->siglock); in get_signal()
2844 * always per-process and doesn't make whole lot of sense in get_signal()
2853 if (ptrace_reparented(current->group_leader)) in get_signal()
2854 do_notify_parent_cldstop(current->group_leader, in get_signal()
2866 if ((signal->flags & SIGNAL_GROUP_EXIT) || in get_signal()
2867 signal->group_exec_task) { in get_signal()
2869 sigdelset(¤t->pending.signal, SIGKILL); in get_signal()
2871 &sighand->action[SIGKILL-1]); in get_signal()
2875 * no need to initialize ksig->info/etc. in get_signal()
2880 if (unlikely(current->jobctl & JOBCTL_STOP_PENDING) && in get_signal()
2884 if (unlikely(current->jobctl & in get_signal()
2886 if (current->jobctl & JOBCTL_TRAP_MASK) { in get_signal()
2888 spin_unlock_irq(&sighand->siglock); in get_signal()
2889 } else if (current->jobctl & JOBCTL_TRAP_FREEZE) in get_signal()
2900 spin_unlock_irq(&sighand->siglock); in get_signal()
2912 signr = dequeue_synchronous_signal(&ksig->info); in get_signal()
2914 signr = dequeue_signal(¤t->blocked, &ksig->info, &type); in get_signal()
2919 if (unlikely(current->ptrace) && (signr != SIGKILL) && in get_signal()
2920 !(sighand->action[signr -1].sa.sa_flags & SA_IMMUTABLE)) { in get_signal()
2921 signr = ptrace_signal(signr, &ksig->info, type); in get_signal()
2926 ka = &sighand->action[signr-1]; in get_signal()
2929 trace_signal_deliver(signr, &ksig->info, ka); in get_signal()
2931 if (ka->sa.sa_handler == SIG_IGN) /* Do nothing. */ in get_signal()
2933 if (ka->sa.sa_handler != SIG_DFL) { in get_signal()
2935 ksig->ka = *ka; in get_signal()
2937 if (ka->sa.sa_flags & SA_ONESHOT) in get_signal()
2938 ka->sa.sa_handler = SIG_DFL; in get_signal()
2940 break; /* will return non-zero "signr" value */ in get_signal()
2944 * Now we are doing the default action for this signal. in get_signal()
2946 if (sig_kernel_ignore(signr)) /* Default is nothing. */ in get_signal()
2951 * Container-init gets no signals it doesn't want from same in get_signal()
2954 * Note that if global/container-init sees a sig_kernel_only() in get_signal()
2959 if (unlikely(signal->flags & SIGNAL_UNKILLABLE) && in get_signal()
2965 * The default action is to stop all threads in in get_signal()
2975 spin_unlock_irq(&sighand->siglock); in get_signal()
2982 spin_lock_irq(&sighand->siglock); in get_signal()
2998 spin_unlock_irq(&sighand->siglock); in get_signal()
3005 current->flags |= PF_SIGNALED; in get_signal()
3019 do_coredump(&ksig->info); in get_signal()
3028 if (current->flags & PF_USER_WORKER) in get_signal()
3037 spin_unlock_irq(&sighand->siglock); in get_signal()
3039 ksig->sig = signr; in get_signal()
3041 if (signr && !(ksig->ka.sa.sa_flags & SA_EXPOSE_TAGBITS)) in get_signal()
3048 * signal_delivered - called after signal delivery to update blocked signals
3050 * @stepping: nonzero if debugger single-step or block-step in use
3053 * delivered. It updates the blocked signals accordingly (@ksig->ka.sa.sa_mask
3054 * is always blocked), and the signal itself is blocked unless %SA_NODEFER
3055 * is set in @ksig->ka.sa.sa_flags. Tracing is notified.
3059 sigset_t blocked; in signal_delivered() local
3067 sigorsets(&blocked, ¤t->blocked, &ksig->ka.sa.sa_mask); in signal_delivered()
3068 if (!(ksig->ka.sa.sa_flags & SA_NODEFER)) in signal_delivered()
3069 sigaddset(&blocked, ksig->sig); in signal_delivered()
3070 set_current_blocked(&blocked); in signal_delivered()
3071 if (current->sas_ss_flags & SS_AUTODISARM) in signal_delivered()
3080 force_sigsegv(ksig->sig); in signal_setup_done()
3087 * group-wide signal. Other threads should be notified now to take
3095 sigandsets(&retarget, &tsk->signal->shared_pending.signal, which); in retarget_shared_pending()
3100 if (t->flags & PF_EXITING) in retarget_shared_pending()
3103 if (!has_pending_signals(&retarget, &t->blocked)) in retarget_shared_pending()
3106 sigandsets(&retarget, &retarget, &t->blocked); in retarget_shared_pending()
3122 * @tsk is about to have PF_EXITING set - lock out users which in exit_signals()
3127 if (thread_group_empty(tsk) || (tsk->signal->flags & SIGNAL_GROUP_EXIT)) { in exit_signals()
3129 tsk->flags |= PF_EXITING; in exit_signals()
3134 spin_lock_irq(&tsk->sighand->siglock); in exit_signals()
3136 * From now this task is not visible for group-wide signals, in exit_signals()
3140 tsk->flags |= PF_EXITING; in exit_signals()
3147 unblocked = tsk->blocked; in exit_signals()
3151 if (unlikely(tsk->jobctl & JOBCTL_STOP_PENDING) && in exit_signals()
3155 spin_unlock_irq(&tsk->sighand->siglock); in exit_signals()
3173 * sys_restart_syscall - restart a system call
3177 struct restart_block *restart = ¤t->restart_block; in SYSCALL_DEFINE0()
3178 return restart->fn(restart); in SYSCALL_DEFINE0()
3183 return -EINTR; in do_no_restart_syscall()
3190 /* A set of now blocked but previously unblocked signals. */ in __set_task_blocked()
3191 sigandnsets(&newblocked, newset, ¤t->blocked); in __set_task_blocked()
3194 tsk->blocked = *newset; in __set_task_blocked()
3199 * set_current_blocked - change current->blocked mask
3202 * It is wrong to change ->blocked directly, this helper should be used
3217 * to do. The current->blocked shouldn't be modified by other task. in __set_current_blocked()
3219 if (sigequalsets(&tsk->blocked, newset)) in __set_current_blocked()
3222 spin_lock_irq(&tsk->sighand->siglock); in __set_current_blocked()
3224 spin_unlock_irq(&tsk->sighand->siglock); in __set_current_blocked()
3231 * NOTE! Unlike the user-mode sys_sigprocmask(), the kernel
3240 /* Lockless, only current can change ->blocked, never from irq */ in sigprocmask()
3242 *oldset = tsk->blocked; in sigprocmask()
3246 sigorsets(&newset, &tsk->blocked, set); in sigprocmask()
3249 sigandnsets(&newset, &tsk->blocked, set); in sigprocmask()
3254 default: in sigprocmask()
3255 return -EINVAL; in sigprocmask()
3264 * The api helps set app-provided sigmasks.
3279 return -EINVAL; in set_user_sigmask()
3281 return -EFAULT; in set_user_sigmask()
3284 current->saved_sigmask = current->blocked; in set_user_sigmask()
3299 return -EINVAL; in set_compat_user_sigmask()
3301 return -EFAULT; in set_compat_user_sigmask()
3304 current->saved_sigmask = current->blocked; in set_compat_user_sigmask()
3312 * sys_rt_sigprocmask - change the list of currently blocked signals
3315 * @oset: previous value of signal mask if non-null
3326 return -EINVAL; in SYSCALL_DEFINE4()
3328 old_set = current->blocked; in SYSCALL_DEFINE4()
3332 return -EFAULT; in SYSCALL_DEFINE4()
3342 return -EFAULT; in SYSCALL_DEFINE4()
3352 sigset_t old_set = current->blocked; in COMPAT_SYSCALL_DEFINE4()
3356 return -EINVAL; in COMPAT_SYSCALL_DEFINE4()
3362 return -EFAULT; in COMPAT_SYSCALL_DEFINE4()
3375 spin_lock_irq(¤t->sighand->siglock); in do_sigpending()
3376 sigorsets(set, ¤t->pending.signal, in do_sigpending()
3377 ¤t->signal->shared_pending.signal); in do_sigpending()
3378 spin_unlock_irq(¤t->sighand->siglock); in do_sigpending()
3381 sigandsets(set, ¤t->blocked, set); in do_sigpending()
3385 * sys_rt_sigpending - examine a pending signal that has been raised
3386 * while blocked
3395 return -EINVAL; in SYSCALL_DEFINE2()
3400 return -EFAULT; in SYSCALL_DEFINE2()
3412 return -EINVAL; in COMPAT_SYSCALL_DEFINE2()
3504 return -EFAULT; in copy_siginfo_to_user()
3506 return -EFAULT; in copy_siginfo_to_user()
3513 if (unlikely(!known_siginfo_layout(info->si_signo, info->si_code))) { in post_copy_siginfo_from_user()
3524 return -EFAULT; in post_copy_siginfo_from_user()
3527 return -E2BIG; in post_copy_siginfo_from_user()
3537 return -EFAULT; in __copy_siginfo_from_user()
3538 to->si_signo = signo; in __copy_siginfo_from_user()
3545 return -EFAULT; in copy_siginfo_from_user()
3551 * copy_siginfo_to_external32 - copy a kernel siginfo into a compat user siginfo
3565 to->si_signo = from->si_signo; in copy_siginfo_to_external32()
3566 to->si_errno = from->si_errno; in copy_siginfo_to_external32()
3567 to->si_code = from->si_code; in copy_siginfo_to_external32()
3568 switch(siginfo_layout(from->si_signo, from->si_code)) { in copy_siginfo_to_external32()
3570 to->si_pid = from->si_pid; in copy_siginfo_to_external32()
3571 to->si_uid = from->si_uid; in copy_siginfo_to_external32()
3574 to->si_tid = from->si_tid; in copy_siginfo_to_external32()
3575 to->si_overrun = from->si_overrun; in copy_siginfo_to_external32()
3576 to->si_int = from->si_int; in copy_siginfo_to_external32()
3579 to->si_band = from->si_band; in copy_siginfo_to_external32()
3580 to->si_fd = from->si_fd; in copy_siginfo_to_external32()
3583 to->si_addr = ptr_to_compat(from->si_addr); in copy_siginfo_to_external32()
3586 to->si_addr = ptr_to_compat(from->si_addr); in copy_siginfo_to_external32()
3587 to->si_trapno = from->si_trapno; in copy_siginfo_to_external32()
3590 to->si_addr = ptr_to_compat(from->si_addr); in copy_siginfo_to_external32()
3591 to->si_addr_lsb = from->si_addr_lsb; in copy_siginfo_to_external32()
3594 to->si_addr = ptr_to_compat(from->si_addr); in copy_siginfo_to_external32()
3595 to->si_lower = ptr_to_compat(from->si_lower); in copy_siginfo_to_external32()
3596 to->si_upper = ptr_to_compat(from->si_upper); in copy_siginfo_to_external32()
3599 to->si_addr = ptr_to_compat(from->si_addr); in copy_siginfo_to_external32()
3600 to->si_pkey = from->si_pkey; in copy_siginfo_to_external32()
3603 to->si_addr = ptr_to_compat(from->si_addr); in copy_siginfo_to_external32()
3604 to->si_perf_data = from->si_perf_data; in copy_siginfo_to_external32()
3605 to->si_perf_type = from->si_perf_type; in copy_siginfo_to_external32()
3606 to->si_perf_flags = from->si_perf_flags; in copy_siginfo_to_external32()
3609 to->si_pid = from->si_pid; in copy_siginfo_to_external32()
3610 to->si_uid = from->si_uid; in copy_siginfo_to_external32()
3611 to->si_status = from->si_status; in copy_siginfo_to_external32()
3612 to->si_utime = from->si_utime; in copy_siginfo_to_external32()
3613 to->si_stime = from->si_stime; in copy_siginfo_to_external32()
3616 to->si_pid = from->si_pid; in copy_siginfo_to_external32()
3617 to->si_uid = from->si_uid; in copy_siginfo_to_external32()
3618 to->si_int = from->si_int; in copy_siginfo_to_external32()
3621 to->si_call_addr = ptr_to_compat(from->si_call_addr); in copy_siginfo_to_external32()
3622 to->si_syscall = from->si_syscall; in copy_siginfo_to_external32()
3623 to->si_arch = from->si_arch; in copy_siginfo_to_external32()
3635 return -EFAULT; in __copy_siginfo_to_user32()
3643 to->si_signo = from->si_signo; in post_copy_siginfo_from_user32()
3644 to->si_errno = from->si_errno; in post_copy_siginfo_from_user32()
3645 to->si_code = from->si_code; in post_copy_siginfo_from_user32()
3646 switch(siginfo_layout(from->si_signo, from->si_code)) { in post_copy_siginfo_from_user32()
3648 to->si_pid = from->si_pid; in post_copy_siginfo_from_user32()
3649 to->si_uid = from->si_uid; in post_copy_siginfo_from_user32()
3652 to->si_tid = from->si_tid; in post_copy_siginfo_from_user32()
3653 to->si_overrun = from->si_overrun; in post_copy_siginfo_from_user32()
3654 to->si_int = from->si_int; in post_copy_siginfo_from_user32()
3657 to->si_band = from->si_band; in post_copy_siginfo_from_user32()
3658 to->si_fd = from->si_fd; in post_copy_siginfo_from_user32()
3661 to->si_addr = compat_ptr(from->si_addr); in post_copy_siginfo_from_user32()
3664 to->si_addr = compat_ptr(from->si_addr); in post_copy_siginfo_from_user32()
3665 to->si_trapno = from->si_trapno; in post_copy_siginfo_from_user32()
3668 to->si_addr = compat_ptr(from->si_addr); in post_copy_siginfo_from_user32()
3669 to->si_addr_lsb = from->si_addr_lsb; in post_copy_siginfo_from_user32()
3672 to->si_addr = compat_ptr(from->si_addr); in post_copy_siginfo_from_user32()
3673 to->si_lower = compat_ptr(from->si_lower); in post_copy_siginfo_from_user32()
3674 to->si_upper = compat_ptr(from->si_upper); in post_copy_siginfo_from_user32()
3677 to->si_addr = compat_ptr(from->si_addr); in post_copy_siginfo_from_user32()
3678 to->si_pkey = from->si_pkey; in post_copy_siginfo_from_user32()
3681 to->si_addr = compat_ptr(from->si_addr); in post_copy_siginfo_from_user32()
3682 to->si_perf_data = from->si_perf_data; in post_copy_siginfo_from_user32()
3683 to->si_perf_type = from->si_perf_type; in post_copy_siginfo_from_user32()
3684 to->si_perf_flags = from->si_perf_flags; in post_copy_siginfo_from_user32()
3687 to->si_pid = from->si_pid; in post_copy_siginfo_from_user32()
3688 to->si_uid = from->si_uid; in post_copy_siginfo_from_user32()
3689 to->si_status = from->si_status; in post_copy_siginfo_from_user32()
3692 to->si_utime = from->_sifields._sigchld_x32._utime; in post_copy_siginfo_from_user32()
3693 to->si_stime = from->_sifields._sigchld_x32._stime; in post_copy_siginfo_from_user32()
3697 to->si_utime = from->si_utime; in post_copy_siginfo_from_user32()
3698 to->si_stime = from->si_stime; in post_copy_siginfo_from_user32()
3702 to->si_pid = from->si_pid; in post_copy_siginfo_from_user32()
3703 to->si_uid = from->si_uid; in post_copy_siginfo_from_user32()
3704 to->si_int = from->si_int; in post_copy_siginfo_from_user32()
3707 to->si_call_addr = compat_ptr(from->si_call_addr); in post_copy_siginfo_from_user32()
3708 to->si_syscall = from->si_syscall; in post_copy_siginfo_from_user32()
3709 to->si_arch = from->si_arch; in post_copy_siginfo_from_user32()
3721 return -EFAULT; in __copy_siginfo_from_user32()
3733 return -EFAULT; in copy_siginfo_from_user32()
3740 * do_sigtimedwait - wait for queued signals specified in @which
3742 * @info: if non-null, the signal's siginfo is returned here
3756 return -EINVAL; in do_sigtimedwait()
3767 spin_lock_irq(&tsk->sighand->siglock); in do_sigtimedwait()
3776 tsk->real_blocked = tsk->blocked; in do_sigtimedwait()
3777 sigandsets(&tsk->blocked, &tsk->blocked, &mask); in do_sigtimedwait()
3779 spin_unlock_irq(&tsk->sighand->siglock); in do_sigtimedwait()
3782 ret = schedule_hrtimeout_range(to, tsk->timer_slack_ns, in do_sigtimedwait()
3784 spin_lock_irq(&tsk->sighand->siglock); in do_sigtimedwait()
3785 __set_task_blocked(tsk, &tsk->real_blocked); in do_sigtimedwait()
3786 sigemptyset(&tsk->real_blocked); in do_sigtimedwait()
3789 spin_unlock_irq(&tsk->sighand->siglock); in do_sigtimedwait()
3793 return ret ? -EINTR : -EAGAIN; in do_sigtimedwait()
3797 * sys_rt_sigtimedwait - synchronously wait for queued signals specified
3800 * @uinfo: if non-null, the signal's siginfo is returned here
3816 return -EINVAL; in SYSCALL_DEFINE4()
3819 return -EFAULT; in SYSCALL_DEFINE4()
3823 return -EFAULT; in SYSCALL_DEFINE4()
3830 ret = -EFAULT; in SYSCALL_DEFINE4()
3848 return -EINVAL; in SYSCALL_DEFINE4()
3851 return -EFAULT; in SYSCALL_DEFINE4()
3855 return -EFAULT; in SYSCALL_DEFINE4()
3862 ret = -EFAULT; in SYSCALL_DEFINE4()
3880 return -EINVAL; in COMPAT_SYSCALL_DEFINE4()
3883 return -EFAULT; in COMPAT_SYSCALL_DEFINE4()
3887 return -EFAULT; in COMPAT_SYSCALL_DEFINE4()
3894 ret = -EFAULT; in COMPAT_SYSCALL_DEFINE4()
3911 return -EINVAL; in COMPAT_SYSCALL_DEFINE4()
3914 return -EFAULT; in COMPAT_SYSCALL_DEFINE4()
3918 return -EFAULT; in COMPAT_SYSCALL_DEFINE4()
3925 ret = -EFAULT; in COMPAT_SYSCALL_DEFINE4()
3937 info->si_signo = sig; in prepare_kill_siginfo()
3938 info->si_errno = 0; in prepare_kill_siginfo()
3939 info->si_code = (type == PIDTYPE_PID) ? SI_TKILL : SI_USER; in prepare_kill_siginfo()
3940 info->si_pid = task_tgid_vnr(current); in prepare_kill_siginfo()
3941 info->si_uid = from_kuid_munged(current_user_ns(), current_uid()); in prepare_kill_siginfo()
3945 * sys_kill - send a signal to a process
3973 p = p->parent; in access_pidfd_pidns()
3985 * conversions here. Note, this is a stop-gap measure and should not be in copy_siginfo_from_user_any()
4035 return -EINVAL; in do_pidfd_send_signal()
4040 return -EPERM; in do_pidfd_send_signal()
4052 * sys_pidfd_send_signal - Signal a process through a pidfd
4060 * In the future extension to @flags may be used to override the default scope
4073 return -EINVAL; in SYSCALL_DEFINE4()
4077 return -EINVAL; in SYSCALL_DEFINE4()
4088 default: { in SYSCALL_DEFINE4()
4091 return -EBADF; in SYSCALL_DEFINE4()
4099 return -EINVAL; in SYSCALL_DEFINE4()
4102 if (fd_file(f)->f_flags & PIDFD_THREAD) in SYSCALL_DEFINE4()
4118 int error = -ESRCH; in do_send_specific()
4135 if (unlikely(error == -ESRCH)) in do_send_specific()
4154 * sys_tgkill - send signal to one specific thread
4159 * This syscall also checks the @tgid and returns -ESRCH even if the PID
4167 return -EINVAL; in SYSCALL_DEFINE3()
4173 * sys_tkill - send signal to one specific task
4183 return -EINVAL; in SYSCALL_DEFINE2()
4193 if ((info->si_code >= 0 || info->si_code == SI_TKILL) && in do_rt_sigqueueinfo()
4195 return -EPERM; in do_rt_sigqueueinfo()
4202 * sys_rt_sigqueueinfo - send signal information to a signal
4235 return -EINVAL; in do_rt_tgsigqueueinfo()
4240 if ((info->si_code >= 0 || info->si_code == SI_TKILL) && in do_rt_tgsigqueueinfo()
4242 return -EPERM; in do_rt_tgsigqueueinfo()
4277 spin_lock_irq(¤t->sighand->siglock); in kernel_sigaction()
4278 current->sighand->action[sig - 1].sa.sa_handler = action; in kernel_sigaction()
4285 flush_sigqueue_mask(current, &mask, ¤t->signal->shared_pending); in kernel_sigaction()
4286 flush_sigqueue_mask(current, &mask, ¤t->pending); in kernel_sigaction()
4289 spin_unlock_irq(¤t->sighand->siglock); in kernel_sigaction()
4305 return -EINVAL; in do_sigaction()
4307 k = &p->sighand->action[sig-1]; in do_sigaction()
4309 spin_lock_irq(&p->sighand->siglock); in do_sigaction()
4310 if (k->sa.sa_flags & SA_IMMUTABLE) { in do_sigaction()
4311 spin_unlock_irq(&p->sighand->siglock); in do_sigaction()
4312 return -EINVAL; in do_sigaction()
4325 * support for flag bits and to allow the kernel to use non-uapi bits in do_sigaction()
4329 act->sa.sa_flags &= UAPI_SA_FLAGS; in do_sigaction()
4331 oact->sa.sa_flags &= UAPI_SA_FLAGS; in do_sigaction()
4336 bool was_ignored = k->sa.sa_handler == SIG_IGN; in do_sigaction()
4338 sigdelsetmask(&act->sa.sa_mask, in do_sigaction()
4345 * whether or not it is blocked." in do_sigaction()
4348 * pending and whose default action is to ignore the signal in do_sigaction()
4350 * be discarded, whether or not it is blocked" in do_sigaction()
4355 flush_sigqueue_mask(p, &mask, &p->signal->shared_pending); in do_sigaction()
4357 flush_sigqueue_mask(p, &mask, &t->pending); in do_sigaction()
4363 spin_unlock_irq(&p->sighand->siglock); in do_sigaction()
4369 __acquires(¤t->sighand->siglock) in sigaltstack_lock()
4371 spin_lock_irq(¤t->sighand->siglock); in sigaltstack_lock()
4375 __releases(¤t->sighand->siglock) in sigaltstack_unlock()
4377 spin_unlock_irq(¤t->sighand->siglock); in sigaltstack_unlock()
4393 oss->ss_sp = (void __user *) t->sas_ss_sp; in do_sigaltstack()
4394 oss->ss_size = t->sas_ss_size; in do_sigaltstack()
4395 oss->ss_flags = sas_ss_flags(sp) | in do_sigaltstack()
4396 (current->sas_ss_flags & SS_FLAG_BITS); in do_sigaltstack()
4400 void __user *ss_sp = ss->ss_sp; in do_sigaltstack()
4401 size_t ss_size = ss->ss_size; in do_sigaltstack()
4402 unsigned ss_flags = ss->ss_flags; in do_sigaltstack()
4406 return -EPERM; in do_sigaltstack()
4411 return -EINVAL; in do_sigaltstack()
4417 if (t->sas_ss_sp == (unsigned long)ss_sp && in do_sigaltstack()
4418 t->sas_ss_size == ss_size && in do_sigaltstack()
4419 t->sas_ss_flags == ss_flags) in do_sigaltstack()
4428 ret = -ENOMEM; in do_sigaltstack()
4430 ret = -ENOMEM; in do_sigaltstack()
4433 t->sas_ss_sp = (unsigned long) ss_sp; in do_sigaltstack()
4434 t->sas_ss_size = ss_size; in do_sigaltstack()
4435 t->sas_ss_flags = ss_flags; in do_sigaltstack()
4447 return -EFAULT; in SYSCALL_DEFINE2()
4452 err = -EFAULT; in SYSCALL_DEFINE2()
4460 return -EFAULT; in restore_altstack()
4470 int err = __put_user((void __user *)t->sas_ss_sp, &uss->ss_sp) | in __save_altstack()
4471 __put_user(t->sas_ss_flags, &uss->ss_flags) | in __save_altstack()
4472 __put_user(t->sas_ss_size, &uss->ss_size); in __save_altstack()
4486 return -EFAULT; in do_compat_sigaltstack()
4501 ret = -EFAULT; in do_compat_sigaltstack()
4516 /* squash all but -EFAULT for now */ in compat_restore_altstack()
4517 return err == -EFAULT ? err : 0; in compat_restore_altstack()
4524 err = __put_user(ptr_to_compat((void __user *)t->sas_ss_sp), in __compat_save_altstack()
4525 &uss->ss_sp) | in __compat_save_altstack()
4526 __put_user(t->sas_ss_flags, &uss->ss_flags) | in __compat_save_altstack()
4527 __put_user(t->sas_ss_size, &uss->ss_size); in __compat_save_altstack()
4535 * sys_sigpending - examine pending signals
4543 return -EINVAL; in SYSCALL_DEFINE1()
4548 return -EFAULT; in SYSCALL_DEFINE1()
4568 * sys_sigprocmask - examine and change blocked signals
4570 * @nset: signals to add or remove (if non-null)
4571 * @oset: previous value of signal mask if non-null
4583 old_set = current->blocked.sig[0]; in SYSCALL_DEFINE3()
4587 return -EFAULT; in SYSCALL_DEFINE3()
4589 new_blocked = current->blocked; in SYSCALL_DEFINE3()
4601 default: in SYSCALL_DEFINE3()
4602 return -EINVAL; in SYSCALL_DEFINE3()
4610 return -EFAULT; in SYSCALL_DEFINE3()
4619 * sys_rt_sigaction - alter an action taken by a process
4635 return -EINVAL; in SYSCALL_DEFINE4()
4638 return -EFAULT; in SYSCALL_DEFINE4()
4645 return -EFAULT; in SYSCALL_DEFINE4()
4663 return -EINVAL; in COMPAT_SYSCALL_DEFINE4()
4667 ret = get_user(handler, &act->sa_handler); in COMPAT_SYSCALL_DEFINE4()
4670 ret |= get_user(restorer, &act->sa_restorer); in COMPAT_SYSCALL_DEFINE4()
4673 ret |= get_compat_sigset(&new_ka.sa.sa_mask, &act->sa_mask); in COMPAT_SYSCALL_DEFINE4()
4674 ret |= get_user(new_ka.sa.sa_flags, &act->sa_flags); in COMPAT_SYSCALL_DEFINE4()
4676 return -EFAULT; in COMPAT_SYSCALL_DEFINE4()
4682 &oact->sa_handler); in COMPAT_SYSCALL_DEFINE4()
4683 ret |= put_compat_sigset(&oact->sa_mask, &old_ka.sa.sa_mask, in COMPAT_SYSCALL_DEFINE4()
4684 sizeof(oact->sa_mask)); in COMPAT_SYSCALL_DEFINE4()
4685 ret |= put_user(old_ka.sa.sa_flags, &oact->sa_flags); in COMPAT_SYSCALL_DEFINE4()
4688 &oact->sa_restorer); in COMPAT_SYSCALL_DEFINE4()
4707 __get_user(new_ka.sa.sa_handler, &act->sa_handler) || in SYSCALL_DEFINE3()
4708 __get_user(new_ka.sa.sa_restorer, &act->sa_restorer) || in SYSCALL_DEFINE3()
4709 __get_user(new_ka.sa.sa_flags, &act->sa_flags) || in SYSCALL_DEFINE3()
4710 __get_user(mask, &act->sa_mask)) in SYSCALL_DEFINE3()
4711 return -EFAULT; in SYSCALL_DEFINE3()
4722 __put_user(old_ka.sa.sa_handler, &oact->sa_handler) || in SYSCALL_DEFINE3()
4723 __put_user(old_ka.sa.sa_restorer, &oact->sa_restorer) || in SYSCALL_DEFINE3()
4724 __put_user(old_ka.sa.sa_flags, &oact->sa_flags) || in SYSCALL_DEFINE3()
4725 __put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask)) in SYSCALL_DEFINE3()
4726 return -EFAULT; in SYSCALL_DEFINE3()
4744 __get_user(handler, &act->sa_handler) || in COMPAT_SYSCALL_DEFINE3()
4745 __get_user(restorer, &act->sa_restorer) || in COMPAT_SYSCALL_DEFINE3()
4746 __get_user(new_ka.sa.sa_flags, &act->sa_flags) || in COMPAT_SYSCALL_DEFINE3()
4747 __get_user(mask, &act->sa_mask)) in COMPAT_SYSCALL_DEFINE3()
4748 return -EFAULT; in COMPAT_SYSCALL_DEFINE3()
4763 &oact->sa_handler) || in COMPAT_SYSCALL_DEFINE3()
4765 &oact->sa_restorer) || in COMPAT_SYSCALL_DEFINE3()
4766 __put_user(old_ka.sa.sa_flags, &oact->sa_flags) || in COMPAT_SYSCALL_DEFINE3()
4767 __put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask)) in COMPAT_SYSCALL_DEFINE3()
4768 return -EFAULT; in COMPAT_SYSCALL_DEFINE3()
4782 return current->blocked.sig[0]; in SYSCALL_DEFINE0()
4787 int old = current->blocked.sig[0]; in SYSCALL_DEFINE1()
4824 return -ERESTARTNOHAND; in SYSCALL_DEFINE0()
4831 current->saved_sigmask = current->blocked; in sigsuspend()
4839 return -ERESTARTNOHAND; in sigsuspend()
4843 * sys_rt_sigsuspend - replace the signal mask for a value with the
4854 return -EINVAL; in SYSCALL_DEFINE2()
4857 return -EFAULT; in SYSCALL_DEFINE2()
4868 return -EINVAL; in COMPAT_SYSCALL_DEFINE2()
4871 return -EFAULT; in COMPAT_SYSCALL_DEFINE2()
4879 sigset_t blocked; in SYSCALL_DEFINE1() local
4880 siginitset(&blocked, mask); in SYSCALL_DEFINE1()
4881 return sigsuspend(&blocked); in SYSCALL_DEFINE1()
4887 sigset_t blocked; in SYSCALL_DEFINE3() local
4888 siginitset(&blocked, mask); in SYSCALL_DEFINE3()
4889 return sigsuspend(&blocked); in SYSCALL_DEFINE3()
4975 .procname = "exception-trace",
5002 * kdb_send_sig - Allows kdb to send signals without exposing
5011 if (!spin_trylock(&t->sighand->siglock)) { in kdb_send_sig()
5020 spin_unlock(&t->sighand->siglock); in kdb_send_sig()
5030 spin_unlock(&t->sighand->siglock); in kdb_send_sig()
5033 sig, t->pid); in kdb_send_sig()
5035 kdb_printf("Signal %d is sent to process %d.\n", sig, t->pid); in kdb_send_sig()