Lines Matching +full:south +full:- +full:field
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>
71 return t->sighand->action[sig - 1].sa.sa_handler; in sig_handler()
91 if (unlikely(t->signal->flags & SIGNAL_UNKILLABLE) && in sig_task_ignored()
96 if (unlikely((t->flags & PF_KTHREAD) && in sig_task_ignored()
110 if (sigismember(&t->blocked, sig) || sigismember(&t->real_blocked, sig)) in sig_ignored()
118 if (t->ptrace && sig != SIGKILL) in sig_ignored()
125 * Re-calculate pending state from the set of locally pending
135 for (i = _NSIG_WORDS, ready = 0; --i >= 0 ;) in has_pending_signals()
136 ready |= signal->sig[i] &~ blocked->sig[i]; in has_pending_signals()
139 case 4: ready = signal->sig[3] &~ blocked->sig[3]; in has_pending_signals()
140 ready |= signal->sig[2] &~ blocked->sig[2]; in has_pending_signals()
141 ready |= signal->sig[1] &~ blocked->sig[1]; in has_pending_signals()
142 ready |= signal->sig[0] &~ blocked->sig[0]; in has_pending_signals()
145 case 2: ready = signal->sig[1] &~ blocked->sig[1]; in has_pending_signals()
146 ready |= signal->sig[0] &~ blocked->sig[0]; in has_pending_signals()
149 case 1: ready = signal->sig[0] &~ blocked->sig[0]; in has_pending_signals()
154 #define PENDING(p,b) has_pending_signals(&(p)->signal, (b))
158 if ((t->jobctl & (JOBCTL_PENDING_MASK | JOBCTL_TRAP_FREEZE)) || in recalc_sigpending_tsk()
159 PENDING(&t->pending, &t->blocked) || in recalc_sigpending_tsk()
160 PENDING(&t->signal->shared_pending, &t->blocked) || in recalc_sigpending_tsk()
168 * when it's possible the current syscall is returning -ERESTART*. in recalc_sigpending_tsk()
176 * This is superfluous when called on current, the wakeup is a harmless no-op.
197 spin_lock_irq(¤t->sighand->siglock); in calculate_sigpending()
200 spin_unlock_irq(¤t->sighand->siglock); in calculate_sigpending()
214 s = pending->signal.sig; in next_signal()
215 m = mask->sig; in next_signal()
266 current->comm, current->pid, sig); in print_dropped_signal()
270 * task_set_jobctl_pending - set jobctl pending bits
274 * Clear @mask from @task->jobctl. @mask must be subset of
281 * Must be called with @task->sighand->siglock held.
292 if (unlikely(fatal_signal_pending(task) || (task->flags & PF_EXITING))) in task_set_jobctl_pending()
296 task->jobctl &= ~JOBCTL_STOP_SIGMASK; in task_set_jobctl_pending()
298 task->jobctl |= mask; in task_set_jobctl_pending()
303 * task_clear_jobctl_trapping - clear jobctl trapping bit
308 * locking. @task->siglock guarantees that @task->parent points to the
312 * Must be called with @task->sighand->siglock held.
316 if (unlikely(task->jobctl & JOBCTL_TRAPPING)) { in task_clear_jobctl_trapping()
317 task->jobctl &= ~JOBCTL_TRAPPING; in task_clear_jobctl_trapping()
319 wake_up_bit(&task->jobctl, JOBCTL_TRAPPING_BIT); in task_clear_jobctl_trapping()
324 * task_clear_jobctl_pending - clear jobctl pending bits
328 * Clear @mask from @task->jobctl. @mask must be subset of
336 * Must be called with @task->sighand->siglock held.
345 task->jobctl &= ~mask; in task_clear_jobctl_pending()
347 if (!(task->jobctl & JOBCTL_PENDING_MASK)) in task_clear_jobctl_pending()
352 * task_participate_group_stop - participate in a group stop
361 * Must be called with @task->sighand->siglock held.
369 struct signal_struct *sig = task->signal; in task_participate_group_stop()
370 bool consume = task->jobctl & JOBCTL_STOP_CONSUME; in task_participate_group_stop()
372 WARN_ON_ONCE(!(task->jobctl & JOBCTL_STOP_PENDING)); in task_participate_group_stop()
379 if (!WARN_ON_ONCE(sig->group_stop_count == 0)) in task_participate_group_stop()
380 sig->group_stop_count--; in task_participate_group_stop()
386 if (!sig->group_stop_count && !(sig->flags & SIGNAL_STOP_STOPPED)) { in task_participate_group_stop()
395 unsigned long mask = current->jobctl & JOBCTL_STOP_SIGMASK; in task_join_group_stop()
396 struct signal_struct *sig = current->signal; in task_join_group_stop()
398 if (sig->group_stop_count) { in task_join_group_stop()
399 sig->group_stop_count++; in task_join_group_stop()
401 } else if (!(sig->flags & SIGNAL_STOP_STOPPED)) in task_join_group_stop()
404 /* Have the new thread join an on-going signal group stop */ in task_join_group_stop()
410 * - this may be called without locks if and only if t == current, otherwise an
446 INIT_LIST_HEAD(&q->list); in __sigqueue_alloc()
447 q->flags = sigqueue_flags; in __sigqueue_alloc()
448 q->ucounts = ucounts; in __sigqueue_alloc()
455 if (q->flags & SIGQUEUE_PREALLOC) in __sigqueue_free()
457 if (q->ucounts) { in __sigqueue_free()
458 dec_rlimit_put_ucounts(q->ucounts, UCOUNT_RLIMIT_SIGPENDING); in __sigqueue_free()
459 q->ucounts = NULL; in __sigqueue_free()
468 sigemptyset(&queue->signal); in flush_sigqueue()
469 while (!list_empty(&queue->list)) { in flush_sigqueue()
470 q = list_entry(queue->list.next, struct sigqueue , list); in flush_sigqueue()
471 list_del_init(&q->list); in flush_sigqueue()
483 spin_lock_irqsave(&t->sighand->siglock, flags); in flush_signals()
485 flush_sigqueue(&t->pending); in flush_signals()
486 flush_sigqueue(&t->signal->shared_pending); in flush_signals()
487 spin_unlock_irqrestore(&t->sighand->siglock, flags); in flush_signals()
497 signal = pending->signal; in __flush_itimer_signals()
500 list_for_each_entry_safe(q, n, &pending->list, list) { in __flush_itimer_signals()
501 int sig = q->info.si_signo; in __flush_itimer_signals()
503 if (likely(q->info.si_code != SI_TIMER)) { in __flush_itimer_signals()
507 list_del_init(&q->list); in __flush_itimer_signals()
512 sigorsets(&pending->signal, &signal, &retain); in __flush_itimer_signals()
520 spin_lock_irqsave(&tsk->sighand->siglock, flags); in flush_itimer_signals()
521 __flush_itimer_signals(&tsk->pending); in flush_itimer_signals()
522 __flush_itimer_signals(&tsk->signal->shared_pending); in flush_itimer_signals()
523 spin_unlock_irqrestore(&tsk->sighand->siglock, flags); in flush_itimer_signals()
532 t->sighand->action[i].sa.sa_handler = SIG_IGN; in ignore_signals()
545 struct k_sigaction *ka = &t->sighand->action[0]; in flush_signal_handlers()
546 for (i = _NSIG ; i != 0 ; i--) { in flush_signal_handlers()
547 if (force_default || ka->sa.sa_handler != SIG_IGN) in flush_signal_handlers()
548 ka->sa.sa_handler = SIG_DFL; in flush_signal_handlers()
549 ka->sa.sa_flags = 0; in flush_signal_handlers()
551 ka->sa.sa_restorer = NULL; in flush_signal_handlers()
553 sigemptyset(&ka->sa.sa_mask); in flush_signal_handlers()
560 void __user *handler = tsk->sighand->action[sig-1].sa.sa_handler; in unhandled_signal()
572 return !tsk->ptrace; in unhandled_signal()
584 list_for_each_entry(q, &list->list, list) { in collect_signal()
585 if (q->info.si_signo == sig) { in collect_signal()
592 sigdelset(&list->signal, sig); in collect_signal()
596 list_del_init(&first->list); in collect_signal()
597 copy_siginfo(info, &first->info); in collect_signal()
600 (first->flags & SIGQUEUE_PREALLOC) && in collect_signal()
601 (info->si_code == SI_TIMER) && in collect_signal()
602 (info->si_sys_private); in collect_signal()
608 * a fast-pathed signal or we must have been in collect_signal()
612 info->si_signo = sig; in collect_signal()
613 info->si_errno = 0; in collect_signal()
614 info->si_code = SI_USER; in collect_signal()
615 info->si_pid = 0; in collect_signal()
616 info->si_uid = 0; in collect_signal()
646 signr = __dequeue_signal(&tsk->pending, mask, info, &resched_timer); in dequeue_signal()
649 signr = __dequeue_signal(&tsk->signal->shared_pending, in dequeue_signal()
658 * compliant with the old way of self-restarting in dequeue_signal()
666 struct hrtimer *tmr = &tsk->signal->real_timer; in dequeue_signal()
669 tsk->signal->it_real_incr != 0) { in dequeue_signal()
670 hrtimer_forward(tmr, tmr->base->get_time(), in dequeue_signal()
671 tsk->signal->it_real_incr); in dequeue_signal()
692 * is to alert stop-signal processing code when another in dequeue_signal()
695 current->jobctl |= JOBCTL_STOP_DEQUEUED; in dequeue_signal()
702 * irqs disabled here, since the posix-timers code is in dequeue_signal()
705 spin_unlock(&tsk->sighand->siglock); in dequeue_signal()
707 spin_lock(&tsk->sighand->siglock); in dequeue_signal()
710 info->si_sys_private = 0; in dequeue_signal()
720 struct sigpending *pending = &tsk->pending; in dequeue_synchronous_signal()
726 if (!((pending->signal.sig[0] & ~tsk->blocked.sig[0]) & SYNCHRONOUS_MASK)) in dequeue_synchronous_signal()
732 list_for_each_entry(q, &pending->list, list) { in dequeue_synchronous_signal()
734 if ((q->info.si_code > SI_USER) && in dequeue_synchronous_signal()
735 (sigmask(q->info.si_signo) & SYNCHRONOUS_MASK)) { in dequeue_synchronous_signal()
745 list_for_each_entry_continue(q, &pending->list, list) { in dequeue_synchronous_signal()
746 if (q->info.si_signo == sync->info.si_signo) in dequeue_synchronous_signal()
750 sigdelset(&pending->signal, sync->info.si_signo); in dequeue_synchronous_signal()
753 list_del_init(&sync->list); in dequeue_synchronous_signal()
754 copy_siginfo(info, &sync->info); in dequeue_synchronous_signal()
756 return info->si_signo; in dequeue_synchronous_signal()
768 * goes through ->blocked
772 lockdep_assert_held(&t->sighand->siglock); in signal_wake_up_state()
778 * case. We don't check t->state here because there is a race with it in signal_wake_up_state()
798 sigandsets(&m, mask, &s->signal); in flush_sigqueue_mask()
802 sigandnsets(&s->signal, &s->signal, mask); in flush_sigqueue_mask()
803 list_for_each_entry_safe(q, n, &s->list, list) { in flush_sigqueue_mask()
804 if (sigismember(mask, q->info.si_signo)) { in flush_sigqueue_mask()
805 list_del_init(&q->list); in flush_sigqueue_mask()
830 return uid_eq(cred->euid, tcred->suid) || in kill_ok_by_cred()
831 uid_eq(cred->euid, tcred->uid) || in kill_ok_by_cred()
832 uid_eq(cred->uid, tcred->suid) || in kill_ok_by_cred()
833 uid_eq(cred->uid, tcred->uid) || in kill_ok_by_cred()
834 ns_capable(tcred->user_ns, CAP_KILL); in kill_ok_by_cred()
839 * - the caller must hold the RCU read lock
848 return -EINVAL; in check_kill_permission()
870 return -EPERM; in check_kill_permission()
878 * ptrace_trap_notify - schedule trap to notify ptracer
887 * re-trap for the new event. If trapped otherwise, STOP trap will be
892 * Must be called with @task->sighand->siglock held.
896 WARN_ON_ONCE(!(t->ptrace & PT_SEIZED)); in ptrace_trap_notify()
897 lockdep_assert_held(&t->sighand->siglock); in ptrace_trap_notify()
900 ptrace_signal_wake_up(t, t->jobctl & JOBCTL_LISTENING); in ptrace_trap_notify()
904 * Handle magic process-wide effects of stop/continue signals. Unlike
905 * the signal actions, these happen immediately at signal-generation
915 struct signal_struct *signal = p->signal; in prepare_signal()
919 if (signal->flags & SIGNAL_GROUP_EXIT) { in prepare_signal()
920 if (signal->core_state) in prepare_signal()
931 flush_sigqueue_mask(&flush, &signal->shared_pending); in prepare_signal()
933 flush_sigqueue_mask(&flush, &t->pending); in prepare_signal()
940 flush_sigqueue_mask(&flush, &signal->shared_pending); in prepare_signal()
942 flush_sigqueue_mask(&flush, &t->pending); in prepare_signal()
944 if (likely(!(t->ptrace & PT_SEIZED))) { in prepare_signal()
945 t->jobctl &= ~JOBCTL_STOPPED; in prepare_signal()
960 if (signal->flags & SIGNAL_STOP_STOPPED) in prepare_signal()
962 else if (signal->group_stop_count) in prepare_signal()
968 * will take ->siglock, notice SIGNAL_CLD_MASK, and in prepare_signal()
972 signal->group_stop_count = 0; in prepare_signal()
973 signal->group_exit_code = 0; in prepare_signal()
990 if (sigismember(&p->blocked, sig)) in wants_signal()
993 if (p->flags & PF_EXITING) in wants_signal()
1007 struct signal_struct *signal = p->signal; in complete_signal()
1027 t = signal->curr_target; in complete_signal()
1030 if (t == signal->curr_target) in complete_signal()
1038 signal->curr_target = t; in complete_signal()
1046 (signal->core_state || !(signal->flags & SIGNAL_GROUP_EXIT)) && in complete_signal()
1047 !sigismember(&t->real_blocked, sig) && in complete_signal()
1048 (sig == SIGKILL || !p->ptrace)) { in complete_signal()
1059 signal->flags = SIGNAL_GROUP_EXIT; in complete_signal()
1060 signal->group_exit_code = sig; in complete_signal()
1061 signal->group_stop_count = 0; in complete_signal()
1065 sigaddset(&t->pending.signal, SIGKILL); in complete_signal()
1073 * The signal is already in the shared-pending queue. in complete_signal()
1082 return (sig < SIGRTMIN) && sigismember(&signals->signal, sig); in legacy_queue()
1093 lockdep_assert_held(&t->sighand->siglock); in __send_signal_locked()
1099 pending = (type != PIDTYPE_PID) ? &t->signal->shared_pending : &t->pending; in __send_signal_locked()
1101 * Short-circuit ignored signals and support queuing in __send_signal_locked()
1102 * exactly one non-rt signal, so that we can get more in __send_signal_locked()
1113 if ((sig == SIGKILL) || (t->flags & PF_KTHREAD)) in __send_signal_locked()
1117 * Real-time signals must be queued if sent by sigqueue, or in __send_signal_locked()
1118 * some other real-time mechanism. It is implementation in __send_signal_locked()
1126 override_rlimit = (is_si_special(info) || info->si_code >= 0); in __send_signal_locked()
1133 list_add_tail(&q->list, &pending->list); in __send_signal_locked()
1136 clear_siginfo(&q->info); in __send_signal_locked()
1137 q->info.si_signo = sig; in __send_signal_locked()
1138 q->info.si_errno = 0; in __send_signal_locked()
1139 q->info.si_code = SI_USER; in __send_signal_locked()
1140 q->info.si_pid = task_tgid_nr_ns(current, in __send_signal_locked()
1143 q->info.si_uid = in __send_signal_locked()
1149 clear_siginfo(&q->info); in __send_signal_locked()
1150 q->info.si_signo = sig; in __send_signal_locked()
1151 q->info.si_errno = 0; in __send_signal_locked()
1152 q->info.si_code = SI_KERNEL; in __send_signal_locked()
1153 q->info.si_pid = 0; in __send_signal_locked()
1154 q->info.si_uid = 0; in __send_signal_locked()
1157 copy_siginfo(&q->info, info); in __send_signal_locked()
1161 sig >= SIGRTMIN && info->si_code != SI_USER) { in __send_signal_locked()
1168 ret = -EAGAIN; in __send_signal_locked()
1180 sigaddset(&pending->signal, sig); in __send_signal_locked()
1182 /* Let multiprocess signals appear after on-going forks */ in __send_signal_locked()
1185 hlist_for_each_entry(delayed, &t->signal->multiprocess, node) { in __send_signal_locked()
1186 sigset_t *signal = &delayed->signal; in __send_signal_locked()
1205 switch (siginfo_layout(info->si_signo, info->si_code)) { in has_si_pid_and_uid()
1245 kuid_t uid = make_kuid(current_user_ns(), info->si_uid); in send_signal_locked()
1246 info->si_uid = from_kuid_munged(t_user_ns, uid); in send_signal_locked()
1251 force = (info->si_code == SI_KERNEL); in send_signal_locked()
1255 info->si_pid = 0; in send_signal_locked()
1270 exe_file, current->comm, signr); in print_fatal_signal()
1274 current->comm, signr); in print_fatal_signal()
1278 pr_info("code at %08lx: ", regs->ip); in print_fatal_signal()
1284 if (get_user(insn, (unsigned char *)(regs->ip + i))) in print_fatal_signal()
1303 __setup("print-fatal-signals=", setup_print_fatal_signals);
1309 int ret = -ESRCH; in do_send_sig_info()
1343 int sig = info->si_signo; in force_sig_info_to_task()
1345 spin_lock_irqsave(&t->sighand->siglock, flags); in force_sig_info_to_task()
1346 action = &t->sighand->action[sig-1]; in force_sig_info_to_task()
1347 ignored = action->sa.sa_handler == SIG_IGN; in force_sig_info_to_task()
1348 blocked = sigismember(&t->blocked, sig); in force_sig_info_to_task()
1350 action->sa.sa_handler = SIG_DFL; in force_sig_info_to_task()
1352 action->sa.sa_flags |= SA_IMMUTABLE; in force_sig_info_to_task()
1354 sigdelset(&t->blocked, sig); in force_sig_info_to_task()
1362 if (action->sa.sa_handler == SIG_DFL && in force_sig_info_to_task()
1363 (!t->ptrace || (handler == HANDLER_EXIT))) in force_sig_info_to_task()
1364 t->signal->flags &= ~SIGNAL_UNKILLABLE; in force_sig_info_to_task()
1366 spin_unlock_irqrestore(&t->sighand->siglock, flags); in force_sig_info_to_task()
1384 p->signal->group_stop_count = 0; in zap_other_threads()
1389 if ((t->flags & (PF_IO_WORKER | PF_USER_WORKER)) != PF_USER_WORKER) in zap_other_threads()
1393 if (t->exit_state) in zap_other_threads()
1395 sigaddset(&t->pending.signal, SIGKILL); in zap_other_threads()
1409 sighand = rcu_dereference(tsk->sighand); in __lock_task_sighand()
1416 * initializes ->siglock: this slab can't go away, it has in __lock_task_sighand()
1417 * the same object type, ->siglock can't be reinitialized. in __lock_task_sighand()
1419 * We need to ensure that tsk->sighand is still the same in __lock_task_sighand()
1422 * must see ->sighand == NULL. in __lock_task_sighand()
1424 spin_lock_irqsave(&sighand->siglock, *flags); in __lock_task_sighand()
1425 if (likely(sighand == rcu_access_pointer(tsk->sighand))) in __lock_task_sighand()
1427 spin_unlock_irqrestore(&sighand->siglock, *flags); in __lock_task_sighand()
1440 sighand = rcu_dereference(task->sighand); in lockdep_assert_task_sighand_held()
1442 lockdep_assert_held(&sighand->siglock); in lockdep_assert_task_sighand_held()
1470 * - the caller must hold at least a readlock on tasklist_lock
1478 retval = -ESRCH; in __kill_pgrp_info()
1489 int error = -ESRCH; in kill_pid_info()
1498 if (likely(!p || error != -ESRCH)) in kill_pid_info()
1523 return uid_eq(cred->euid, pcred->suid) || in kill_as_cred_perm()
1524 uid_eq(cred->euid, pcred->uid) || in kill_as_cred_perm()
1525 uid_eq(cred->uid, pcred->suid) || in kill_as_cred_perm()
1526 uid_eq(cred->uid, pcred->uid); in kill_as_cred_perm()
1560 int ret = -EINVAL; in kill_pid_usb_asyncio()
1574 ret = -ESRCH; in kill_pid_usb_asyncio()
1578 ret = -EPERM; in kill_pid_usb_asyncio()
1590 ret = -ESRCH; in kill_pid_usb_asyncio()
1601 * POSIX specifies that kill(-1,sig) is unspecified, but what we have
1612 /* -INT_MIN is undefined. Exclude this case to avoid a UBSAN warning */ in kill_something_info()
1614 return -ESRCH; in kill_something_info()
1617 if (pid != -1) { in kill_something_info()
1619 pid ? find_vpid(-pid) : task_pgrp(current)); in kill_something_info()
1630 if (err != -EPERM) in kill_something_info()
1634 ret = count ? retval : -ESRCH; in kill_something_info()
1652 return -EINVAL; in send_sig_info()
1709 * When things go south during signal handling, we
1844 info.si_perf_flags = sigismember(¤t->blocked, info.si_signo) ? in send_sig_perf()
1852 * force_sig_seccomp - signals the task to allow in-process syscall emulation
1854 * @reason: filter-supplied reason code to send to userland (via si_errno)
1875 * the errno field, instead of an actual errno value.
1951 return __sigqueue_alloc(-1, current, GFP_KERNEL, 0, SIGQUEUE_PREALLOC); in sigqueue_alloc()
1957 spinlock_t *lock = ¤t->sighand->siglock; in sigqueue_free()
1959 BUG_ON(!(q->flags & SIGQUEUE_PREALLOC)); in sigqueue_free()
1961 * We must hold ->siglock while testing q->list in sigqueue_free()
1963 * __exit_signal()->flush_sigqueue(). in sigqueue_free()
1966 q->flags &= ~SIGQUEUE_PREALLOC; in sigqueue_free()
1971 if (!list_empty(&q->list)) in sigqueue_free()
1981 int sig = q->info.si_signo; in send_sigqueue()
1987 BUG_ON(!(q->flags & SIGQUEUE_PREALLOC)); in send_sigqueue()
1989 ret = -1; in send_sigqueue()
1996 * into t->pending). in send_sigqueue()
2007 same_thread_group(t, current) && !current->exit_state) in send_sigqueue()
2018 if (unlikely(!list_empty(&q->list))) { in send_sigqueue()
2023 BUG_ON(q->info.si_code != SI_TIMER); in send_sigqueue()
2024 q->info.si_overrun++; in send_sigqueue()
2028 q->info.si_overrun = 0; in send_sigqueue()
2031 pending = (type != PIDTYPE_PID) ? &t->signal->shared_pending : &t->pending; in send_sigqueue()
2032 list_add_tail(&q->list, &pending->list); in send_sigqueue()
2033 sigaddset(&pending->signal, sig); in send_sigqueue()
2037 trace_signal_generate(sig, &q->info, t, type != PIDTYPE_PID, result); in send_sigqueue()
2048 WARN_ON(task->exit_state == 0); in do_notify_pidfd()
2050 wake_up_all(&pid->wait_pidfd); in do_notify_pidfd()
2058 * self-reaping.
2068 WARN_ON_ONCE(sig == -1); in do_notify_parent()
2073 WARN_ON_ONCE(!tsk->ptrace && in do_notify_parent()
2074 (tsk->group_leader != tsk || !thread_group_empty(tsk))); in do_notify_parent()
2084 if (tsk->parent_exec_id != READ_ONCE(tsk->parent->self_exec_id)) in do_notify_parent()
2103 info.si_pid = task_pid_nr_ns(tsk, task_active_pid_ns(tsk->parent)); in do_notify_parent()
2104 info.si_uid = from_kuid_munged(task_cred_xxx(tsk->parent, user_ns), in do_notify_parent()
2109 info.si_utime = nsec_to_clock_t(utime + tsk->signal->utime); in do_notify_parent()
2110 info.si_stime = nsec_to_clock_t(stime + tsk->signal->stime); in do_notify_parent()
2112 info.si_status = tsk->exit_code & 0x7f; in do_notify_parent()
2113 if (tsk->exit_code & 0x80) in do_notify_parent()
2115 else if (tsk->exit_code & 0x7f) in do_notify_parent()
2119 info.si_status = tsk->exit_code >> 8; in do_notify_parent()
2122 psig = tsk->parent->sighand; in do_notify_parent()
2123 spin_lock_irqsave(&psig->siglock, flags); in do_notify_parent()
2124 if (!tsk->ptrace && sig == SIGCHLD && in do_notify_parent()
2125 (psig->action[SIGCHLD-1].sa.sa_handler == SIG_IGN || in do_notify_parent()
2126 (psig->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDWAIT))) { in do_notify_parent()
2136 * blocked sys_wait4 might now return -ECHILD. in do_notify_parent()
2139 * is implementation-defined: we do (if you don't want in do_notify_parent()
2143 if (psig->action[SIGCHLD-1].sa.sa_handler == SIG_IGN) in do_notify_parent()
2151 __send_signal_locked(sig, &info, tsk->parent, PIDTYPE_TGID, false); in do_notify_parent()
2152 __wake_up_parent(tsk, tsk->parent); in do_notify_parent()
2153 spin_unlock_irqrestore(&psig->siglock, flags); in do_notify_parent()
2159 * do_notify_parent_cldstop - notify parent of stopped/continued state change
2166 * If %true, @tsk reports to @tsk->parent which should be the ptracer.
2181 parent = tsk->parent; in do_notify_parent_cldstop()
2183 tsk = tsk->group_leader; in do_notify_parent_cldstop()
2184 parent = tsk->real_parent; in do_notify_parent_cldstop()
2208 info.si_status = tsk->signal->group_exit_code & 0x7f; in do_notify_parent_cldstop()
2211 info.si_status = tsk->exit_code & 0x7f; in do_notify_parent_cldstop()
2217 sighand = parent->sighand; in do_notify_parent_cldstop()
2218 spin_lock_irqsave(&sighand->siglock, flags); in do_notify_parent_cldstop()
2219 if (sighand->action[SIGCHLD-1].sa.sa_handler != SIG_IGN && in do_notify_parent_cldstop()
2220 !(sighand->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDSTOP)) in do_notify_parent_cldstop()
2226 spin_unlock_irqrestore(&sighand->siglock, flags); in do_notify_parent_cldstop()
2230 * This must be called with current->sighand->siglock held.
2233 * We always set current->last_siginfo while stopped here.
2235 * being ptrace-stopped vs being job-control-stopped.
2243 __releases(¤t->sighand->siglock) in ptrace_stop()
2244 __acquires(¤t->sighand->siglock) in ptrace_stop()
2257 spin_unlock_irq(¤t->sighand->siglock); in ptrace_stop()
2259 spin_lock_irq(¤t->sighand->siglock); in ptrace_stop()
2268 if (!current->ptrace || __fatal_signal_pending(current)) in ptrace_stop()
2272 current->jobctl |= JOBCTL_TRACED; in ptrace_stop()
2277 * Also, transition to TRACED and updates to ->jobctl should be in ptrace_stop()
2294 current->ptrace_message = message; in ptrace_stop()
2295 current->last_siginfo = info; in ptrace_stop()
2296 current->exit_code = exit_code; in ptrace_stop()
2303 * TASK_TRACED is entered - ignore it. in ptrace_stop()
2305 if (why == CLD_STOPPED && (current->jobctl & JOBCTL_STOP_PENDING)) in ptrace_stop()
2310 if (info && info->si_code >> 8 == PTRACE_EVENT_STOP) in ptrace_stop()
2316 spin_unlock_irq(¤t->sighand->siglock); in ptrace_stop()
2321 * While ptraced, there are two parents - the ptracer and in ptrace_stop()
2328 if (current->ptrace) in ptrace_stop()
2330 if (gstop_done && (!current->ptrace || ptrace_reparented(current))) in ptrace_stop()
2349 * any signal-sending on another CPU that wants to examine it. in ptrace_stop()
2351 spin_lock_irq(¤t->sighand->siglock); in ptrace_stop()
2352 exit_code = current->exit_code; in ptrace_stop()
2353 current->last_siginfo = NULL; in ptrace_stop()
2354 current->ptrace_message = 0; in ptrace_stop()
2355 current->exit_code = 0; in ptrace_stop()
2358 current->jobctl &= ~(JOBCTL_LISTENING | JOBCTL_PTRACE_FROZEN); in ptrace_stop()
2391 spin_lock_irq(¤t->sighand->siglock); in ptrace_notify()
2393 spin_unlock_irq(¤t->sighand->siglock); in ptrace_notify()
2398 * do_signal_stop - handle group stop for SIGSTOP and other stop signals
2412 * Must be called with @current->sighand->siglock held, which is released
2420 __releases(¤t->sighand->siglock) in do_signal_stop()
2422 struct signal_struct *sig = current->signal; in do_signal_stop()
2424 if (!(current->jobctl & JOBCTL_STOP_PENDING)) { in do_signal_stop()
2428 /* signr will be recorded in task->jobctl for retries */ in do_signal_stop()
2431 if (!likely(current->jobctl & JOBCTL_STOP_DEQUEUED) || in do_signal_stop()
2432 unlikely(sig->flags & SIGNAL_GROUP_EXIT) || in do_signal_stop()
2433 unlikely(sig->group_exec_task)) in do_signal_stop()
2454 if (!(sig->flags & SIGNAL_STOP_STOPPED)) in do_signal_stop()
2455 sig->group_exit_code = signr; in do_signal_stop()
2457 sig->group_stop_count = 0; in do_signal_stop()
2460 sig->group_stop_count++; in do_signal_stop()
2471 sig->group_stop_count++; in do_signal_stop()
2472 if (likely(!(t->ptrace & PT_SEIZED))) in do_signal_stop()
2480 if (likely(!current->ptrace)) { in do_signal_stop()
2491 current->jobctl |= JOBCTL_STOPPED; in do_signal_stop()
2493 spin_unlock_irq(¤t->sighand->siglock); in do_signal_stop()
2525 * do_jobctl_trap - take care of ptrace jobctl traps
2536 * Must be called with @current->sighand->siglock held, which may be
2537 * released and re-acquired before returning with intervening sleep.
2541 struct signal_struct *signal = current->signal; in do_jobctl_trap()
2542 int signr = current->jobctl & JOBCTL_STOP_SIGMASK; in do_jobctl_trap()
2544 if (current->ptrace & PT_SEIZED) { in do_jobctl_trap()
2545 if (!signal->group_stop_count && in do_jobctl_trap()
2546 !(signal->flags & SIGNAL_STOP_STOPPED)) in do_jobctl_trap()
2558 * do_freezer_trap - handle the freezer jobctl trap
2564 * Must be called with @current->sighand->siglock held,
2568 __releases(¤t->sighand->siglock) in do_freezer_trap()
2575 if ((current->jobctl & (JOBCTL_PENDING_MASK | JOBCTL_TRAP_FREEZE)) != in do_freezer_trap()
2577 spin_unlock_irq(¤t->sighand->siglock); in do_freezer_trap()
2584 * immediately (if there is a non-fatal signal pending), and in do_freezer_trap()
2589 spin_unlock_irq(¤t->sighand->siglock); in do_freezer_trap()
2613 current->jobctl |= JOBCTL_STOP_DEQUEUED; in ptrace_signal()
2626 if (signr != info->si_signo) { in ptrace_signal()
2628 info->si_signo = signr; in ptrace_signal()
2629 info->si_errno = 0; in ptrace_signal()
2630 info->si_code = SI_USER; in ptrace_signal()
2632 info->si_pid = task_pid_vnr(current->parent); in ptrace_signal()
2633 info->si_uid = from_kuid_munged(current_user_ns(), in ptrace_signal()
2634 task_uid(current->parent)); in ptrace_signal()
2639 if (sigismember(¤t->blocked, signr) || in ptrace_signal()
2650 switch (siginfo_layout(ksig->sig, ksig->info.si_code)) { in hide_si_addr_tag_bits()
2657 ksig->info.si_addr = arch_untagged_si_addr( in hide_si_addr_tag_bits()
2658 ksig->info.si_addr, ksig->sig, ksig->info.si_code); in hide_si_addr_tag_bits()
2672 struct sighand_struct *sighand = current->sighand; in get_signal()
2673 struct signal_struct *signal = current->signal; in get_signal()
2687 * Do this once, we can't return to user-mode if freezing() == T. in get_signal()
2694 spin_lock_irq(&sighand->siglock); in get_signal()
2701 if (unlikely(signal->flags & SIGNAL_CLD_MASK)) { in get_signal()
2704 if (signal->flags & SIGNAL_CLD_CONTINUED) in get_signal()
2709 signal->flags &= ~SIGNAL_CLD_MASK; in get_signal()
2711 spin_unlock_irq(&sighand->siglock); in get_signal()
2715 * always per-process and doesn't make whole lot of sense in get_signal()
2724 if (ptrace_reparented(current->group_leader)) in get_signal()
2725 do_notify_parent_cldstop(current->group_leader, in get_signal()
2737 if ((signal->flags & SIGNAL_GROUP_EXIT) || in get_signal()
2738 signal->group_exec_task) { in get_signal()
2739 clear_siginfo(&ksig->info); in get_signal()
2740 ksig->info.si_signo = signr = SIGKILL; in get_signal()
2741 sigdelset(¤t->pending.signal, SIGKILL); in get_signal()
2743 &sighand->action[SIGKILL - 1]); in get_signal()
2748 if (unlikely(current->jobctl & JOBCTL_STOP_PENDING) && in get_signal()
2752 if (unlikely(current->jobctl & in get_signal()
2754 if (current->jobctl & JOBCTL_TRAP_MASK) { in get_signal()
2756 spin_unlock_irq(&sighand->siglock); in get_signal()
2757 } else if (current->jobctl & JOBCTL_TRAP_FREEZE) in get_signal()
2768 spin_unlock_irq(&sighand->siglock); in get_signal()
2780 signr = dequeue_synchronous_signal(&ksig->info); in get_signal()
2782 signr = dequeue_signal(current, ¤t->blocked, in get_signal()
2783 &ksig->info, &type); in get_signal()
2788 if (unlikely(current->ptrace) && (signr != SIGKILL) && in get_signal()
2789 !(sighand->action[signr -1].sa.sa_flags & SA_IMMUTABLE)) { in get_signal()
2790 signr = ptrace_signal(signr, &ksig->info, type); in get_signal()
2795 ka = &sighand->action[signr-1]; in get_signal()
2798 trace_signal_deliver(signr, &ksig->info, ka); in get_signal()
2800 if (ka->sa.sa_handler == SIG_IGN) /* Do nothing. */ in get_signal()
2802 if (ka->sa.sa_handler != SIG_DFL) { in get_signal()
2804 ksig->ka = *ka; in get_signal()
2806 if (ka->sa.sa_flags & SA_ONESHOT) in get_signal()
2807 ka->sa.sa_handler = SIG_DFL; in get_signal()
2809 break; /* will return non-zero "signr" value */ in get_signal()
2820 * Container-init gets no signals it doesn't want from same in get_signal()
2823 * Note that if global/container-init sees a sig_kernel_only() in get_signal()
2828 if (unlikely(signal->flags & SIGNAL_UNKILLABLE) && in get_signal()
2844 spin_unlock_irq(&sighand->siglock); in get_signal()
2851 spin_lock_irq(&sighand->siglock); in get_signal()
2854 if (likely(do_signal_stop(ksig->info.si_signo))) { in get_signal()
2867 spin_unlock_irq(&sighand->siglock); in get_signal()
2874 current->flags |= PF_SIGNALED; in get_signal()
2878 print_fatal_signal(ksig->info.si_signo); in get_signal()
2888 do_coredump(&ksig->info); in get_signal()
2896 if (current->flags & PF_USER_WORKER) in get_signal()
2902 do_group_exit(ksig->info.si_signo); in get_signal()
2905 spin_unlock_irq(&sighand->siglock); in get_signal()
2907 ksig->sig = signr; in get_signal()
2909 if (!(ksig->ka.sa.sa_flags & SA_EXPOSE_TAGBITS)) in get_signal()
2912 return ksig->sig > 0; in get_signal()
2916 * signal_delivered - called after signal delivery to update blocked signals
2918 * @stepping: nonzero if debugger single-step or block-step in use
2921 * delivered. It updates the blocked signals accordingly (@ksig->ka.sa.sa_mask
2923 * is set in @ksig->ka.sa.sa_flags. Tracing is notified.
2935 sigorsets(&blocked, ¤t->blocked, &ksig->ka.sa.sa_mask); in signal_delivered()
2936 if (!(ksig->ka.sa.sa_flags & SA_NODEFER)) in signal_delivered()
2937 sigaddset(&blocked, ksig->sig); in signal_delivered()
2939 if (current->sas_ss_flags & SS_AUTODISARM) in signal_delivered()
2948 force_sigsegv(ksig->sig); in signal_setup_done()
2955 * group-wide signal. Other threads should be notified now to take
2963 sigandsets(&retarget, &tsk->signal->shared_pending.signal, which); in retarget_shared_pending()
2969 if (t->flags & PF_EXITING) in retarget_shared_pending()
2972 if (!has_pending_signals(&retarget, &t->blocked)) in retarget_shared_pending()
2975 sigandsets(&retarget, &retarget, &t->blocked); in retarget_shared_pending()
2991 * @tsk is about to have PF_EXITING set - lock out users which in exit_signals()
2996 if (thread_group_empty(tsk) || (tsk->signal->flags & SIGNAL_GROUP_EXIT)) { in exit_signals()
2998 tsk->flags |= PF_EXITING; in exit_signals()
3003 spin_lock_irq(&tsk->sighand->siglock); in exit_signals()
3005 * From now this task is not visible for group-wide signals, in exit_signals()
3009 tsk->flags |= PF_EXITING; in exit_signals()
3016 unblocked = tsk->blocked; in exit_signals()
3020 if (unlikely(tsk->jobctl & JOBCTL_STOP_PENDING) && in exit_signals()
3024 spin_unlock_irq(&tsk->sighand->siglock); in exit_signals()
3042 * sys_restart_syscall - restart a system call
3046 struct restart_block *restart = ¤t->restart_block; in SYSCALL_DEFINE0()
3047 return restart->fn(restart); in SYSCALL_DEFINE0()
3052 return -EINTR; in do_no_restart_syscall()
3060 sigandnsets(&newblocked, newset, ¤t->blocked); in __set_task_blocked()
3063 tsk->blocked = *newset; in __set_task_blocked()
3068 * set_current_blocked - change current->blocked mask
3071 * It is wrong to change ->blocked directly, this helper should be used
3086 * to do. The current->blocked shouldn't be modified by other task. in __set_current_blocked()
3088 if (sigequalsets(&tsk->blocked, newset)) in __set_current_blocked()
3091 spin_lock_irq(&tsk->sighand->siglock); in __set_current_blocked()
3093 spin_unlock_irq(&tsk->sighand->siglock); in __set_current_blocked()
3100 * NOTE! Unlike the user-mode sys_sigprocmask(), the kernel
3109 /* Lockless, only current can change ->blocked, never from irq */ in sigprocmask()
3111 *oldset = tsk->blocked; in sigprocmask()
3115 sigorsets(&newset, &tsk->blocked, set); in sigprocmask()
3118 sigandnsets(&newset, &tsk->blocked, set); in sigprocmask()
3124 return -EINVAL; in sigprocmask()
3133 * The api helps set app-provided sigmasks.
3148 return -EINVAL; in set_user_sigmask()
3150 return -EFAULT; in set_user_sigmask()
3153 current->saved_sigmask = current->blocked; in set_user_sigmask()
3168 return -EINVAL; in set_compat_user_sigmask()
3170 return -EFAULT; in set_compat_user_sigmask()
3173 current->saved_sigmask = current->blocked; in set_compat_user_sigmask()
3181 * sys_rt_sigprocmask - change the list of currently blocked signals
3184 * @oset: previous value of signal mask if non-null
3195 return -EINVAL; in SYSCALL_DEFINE4()
3197 old_set = current->blocked; in SYSCALL_DEFINE4()
3201 return -EFAULT; in SYSCALL_DEFINE4()
3211 return -EFAULT; in SYSCALL_DEFINE4()
3221 sigset_t old_set = current->blocked; in COMPAT_SYSCALL_DEFINE4()
3225 return -EINVAL; in COMPAT_SYSCALL_DEFINE4()
3231 return -EFAULT; in COMPAT_SYSCALL_DEFINE4()
3244 spin_lock_irq(¤t->sighand->siglock); in do_sigpending()
3245 sigorsets(set, ¤t->pending.signal, in do_sigpending()
3246 ¤t->signal->shared_pending.signal); in do_sigpending()
3247 spin_unlock_irq(¤t->sighand->siglock); in do_sigpending()
3250 sigandsets(set, ¤t->blocked, set); in do_sigpending()
3254 * sys_rt_sigpending - examine a pending signal that has been raised
3264 return -EINVAL; in SYSCALL_DEFINE2()
3269 return -EFAULT; in SYSCALL_DEFINE2()
3281 return -EINVAL; in COMPAT_SYSCALL_DEFINE2()
3373 return -EFAULT; in copy_siginfo_to_user()
3375 return -EFAULT; in copy_siginfo_to_user()
3382 if (unlikely(!known_siginfo_layout(info->si_signo, info->si_code))) { in post_copy_siginfo_from_user()
3393 return -EFAULT; in post_copy_siginfo_from_user()
3396 return -E2BIG; in post_copy_siginfo_from_user()
3406 return -EFAULT; in __copy_siginfo_from_user()
3407 to->si_signo = signo; in __copy_siginfo_from_user()
3414 return -EFAULT; in copy_siginfo_from_user()
3420 * copy_siginfo_to_external32 - copy a kernel siginfo into a compat user siginfo
3434 to->si_signo = from->si_signo; in copy_siginfo_to_external32()
3435 to->si_errno = from->si_errno; in copy_siginfo_to_external32()
3436 to->si_code = from->si_code; in copy_siginfo_to_external32()
3437 switch(siginfo_layout(from->si_signo, from->si_code)) { in copy_siginfo_to_external32()
3439 to->si_pid = from->si_pid; in copy_siginfo_to_external32()
3440 to->si_uid = from->si_uid; in copy_siginfo_to_external32()
3443 to->si_tid = from->si_tid; in copy_siginfo_to_external32()
3444 to->si_overrun = from->si_overrun; in copy_siginfo_to_external32()
3445 to->si_int = from->si_int; in copy_siginfo_to_external32()
3448 to->si_band = from->si_band; in copy_siginfo_to_external32()
3449 to->si_fd = from->si_fd; in copy_siginfo_to_external32()
3452 to->si_addr = ptr_to_compat(from->si_addr); in copy_siginfo_to_external32()
3455 to->si_addr = ptr_to_compat(from->si_addr); in copy_siginfo_to_external32()
3456 to->si_trapno = from->si_trapno; in copy_siginfo_to_external32()
3459 to->si_addr = ptr_to_compat(from->si_addr); in copy_siginfo_to_external32()
3460 to->si_addr_lsb = from->si_addr_lsb; in copy_siginfo_to_external32()
3463 to->si_addr = ptr_to_compat(from->si_addr); in copy_siginfo_to_external32()
3464 to->si_lower = ptr_to_compat(from->si_lower); in copy_siginfo_to_external32()
3465 to->si_upper = ptr_to_compat(from->si_upper); in copy_siginfo_to_external32()
3468 to->si_addr = ptr_to_compat(from->si_addr); in copy_siginfo_to_external32()
3469 to->si_pkey = from->si_pkey; in copy_siginfo_to_external32()
3472 to->si_addr = ptr_to_compat(from->si_addr); in copy_siginfo_to_external32()
3473 to->si_perf_data = from->si_perf_data; in copy_siginfo_to_external32()
3474 to->si_perf_type = from->si_perf_type; in copy_siginfo_to_external32()
3475 to->si_perf_flags = from->si_perf_flags; in copy_siginfo_to_external32()
3478 to->si_pid = from->si_pid; in copy_siginfo_to_external32()
3479 to->si_uid = from->si_uid; in copy_siginfo_to_external32()
3480 to->si_status = from->si_status; in copy_siginfo_to_external32()
3481 to->si_utime = from->si_utime; in copy_siginfo_to_external32()
3482 to->si_stime = from->si_stime; in copy_siginfo_to_external32()
3485 to->si_pid = from->si_pid; in copy_siginfo_to_external32()
3486 to->si_uid = from->si_uid; in copy_siginfo_to_external32()
3487 to->si_int = from->si_int; in copy_siginfo_to_external32()
3490 to->si_call_addr = ptr_to_compat(from->si_call_addr); in copy_siginfo_to_external32()
3491 to->si_syscall = from->si_syscall; in copy_siginfo_to_external32()
3492 to->si_arch = from->si_arch; in copy_siginfo_to_external32()
3504 return -EFAULT; in __copy_siginfo_to_user32()
3512 to->si_signo = from->si_signo; in post_copy_siginfo_from_user32()
3513 to->si_errno = from->si_errno; in post_copy_siginfo_from_user32()
3514 to->si_code = from->si_code; in post_copy_siginfo_from_user32()
3515 switch(siginfo_layout(from->si_signo, from->si_code)) { in post_copy_siginfo_from_user32()
3517 to->si_pid = from->si_pid; in post_copy_siginfo_from_user32()
3518 to->si_uid = from->si_uid; in post_copy_siginfo_from_user32()
3521 to->si_tid = from->si_tid; in post_copy_siginfo_from_user32()
3522 to->si_overrun = from->si_overrun; in post_copy_siginfo_from_user32()
3523 to->si_int = from->si_int; in post_copy_siginfo_from_user32()
3526 to->si_band = from->si_band; in post_copy_siginfo_from_user32()
3527 to->si_fd = from->si_fd; in post_copy_siginfo_from_user32()
3530 to->si_addr = compat_ptr(from->si_addr); in post_copy_siginfo_from_user32()
3533 to->si_addr = compat_ptr(from->si_addr); in post_copy_siginfo_from_user32()
3534 to->si_trapno = from->si_trapno; in post_copy_siginfo_from_user32()
3537 to->si_addr = compat_ptr(from->si_addr); in post_copy_siginfo_from_user32()
3538 to->si_addr_lsb = from->si_addr_lsb; in post_copy_siginfo_from_user32()
3541 to->si_addr = compat_ptr(from->si_addr); in post_copy_siginfo_from_user32()
3542 to->si_lower = compat_ptr(from->si_lower); in post_copy_siginfo_from_user32()
3543 to->si_upper = compat_ptr(from->si_upper); in post_copy_siginfo_from_user32()
3546 to->si_addr = compat_ptr(from->si_addr); in post_copy_siginfo_from_user32()
3547 to->si_pkey = from->si_pkey; in post_copy_siginfo_from_user32()
3550 to->si_addr = compat_ptr(from->si_addr); in post_copy_siginfo_from_user32()
3551 to->si_perf_data = from->si_perf_data; in post_copy_siginfo_from_user32()
3552 to->si_perf_type = from->si_perf_type; in post_copy_siginfo_from_user32()
3553 to->si_perf_flags = from->si_perf_flags; in post_copy_siginfo_from_user32()
3556 to->si_pid = from->si_pid; in post_copy_siginfo_from_user32()
3557 to->si_uid = from->si_uid; in post_copy_siginfo_from_user32()
3558 to->si_status = from->si_status; in post_copy_siginfo_from_user32()
3561 to->si_utime = from->_sifields._sigchld_x32._utime; in post_copy_siginfo_from_user32()
3562 to->si_stime = from->_sifields._sigchld_x32._stime; in post_copy_siginfo_from_user32()
3566 to->si_utime = from->si_utime; in post_copy_siginfo_from_user32()
3567 to->si_stime = from->si_stime; in post_copy_siginfo_from_user32()
3571 to->si_pid = from->si_pid; in post_copy_siginfo_from_user32()
3572 to->si_uid = from->si_uid; in post_copy_siginfo_from_user32()
3573 to->si_int = from->si_int; in post_copy_siginfo_from_user32()
3576 to->si_call_addr = compat_ptr(from->si_call_addr); in post_copy_siginfo_from_user32()
3577 to->si_syscall = from->si_syscall; in post_copy_siginfo_from_user32()
3578 to->si_arch = from->si_arch; in post_copy_siginfo_from_user32()
3590 return -EFAULT; in __copy_siginfo_from_user32()
3602 return -EFAULT; in copy_siginfo_from_user32()
3609 * do_sigtimedwait - wait for queued signals specified in @which
3611 * @info: if non-null, the signal's siginfo is returned here
3625 return -EINVAL; in do_sigtimedwait()
3636 spin_lock_irq(&tsk->sighand->siglock); in do_sigtimedwait()
3645 tsk->real_blocked = tsk->blocked; in do_sigtimedwait()
3646 sigandsets(&tsk->blocked, &tsk->blocked, &mask); in do_sigtimedwait()
3648 spin_unlock_irq(&tsk->sighand->siglock); in do_sigtimedwait()
3651 ret = schedule_hrtimeout_range(to, tsk->timer_slack_ns, in do_sigtimedwait()
3653 spin_lock_irq(&tsk->sighand->siglock); in do_sigtimedwait()
3654 __set_task_blocked(tsk, &tsk->real_blocked); in do_sigtimedwait()
3655 sigemptyset(&tsk->real_blocked); in do_sigtimedwait()
3658 spin_unlock_irq(&tsk->sighand->siglock); in do_sigtimedwait()
3662 return ret ? -EINTR : -EAGAIN; in do_sigtimedwait()
3666 * sys_rt_sigtimedwait - synchronously wait for queued signals specified
3669 * @uinfo: if non-null, the signal's siginfo is returned here
3685 return -EINVAL; in SYSCALL_DEFINE4()
3688 return -EFAULT; in SYSCALL_DEFINE4()
3692 return -EFAULT; in SYSCALL_DEFINE4()
3699 ret = -EFAULT; in SYSCALL_DEFINE4()
3717 return -EINVAL; in SYSCALL_DEFINE4()
3720 return -EFAULT; in SYSCALL_DEFINE4()
3724 return -EFAULT; in SYSCALL_DEFINE4()
3731 ret = -EFAULT; in SYSCALL_DEFINE4()
3749 return -EINVAL; in COMPAT_SYSCALL_DEFINE4()
3752 return -EFAULT; in COMPAT_SYSCALL_DEFINE4()
3756 return -EFAULT; in COMPAT_SYSCALL_DEFINE4()
3763 ret = -EFAULT; in COMPAT_SYSCALL_DEFINE4()
3780 return -EINVAL; in COMPAT_SYSCALL_DEFINE4()
3783 return -EFAULT; in COMPAT_SYSCALL_DEFINE4()
3787 return -EFAULT; in COMPAT_SYSCALL_DEFINE4()
3794 ret = -EFAULT; in COMPAT_SYSCALL_DEFINE4()
3805 info->si_signo = sig; in prepare_kill_siginfo()
3806 info->si_errno = 0; in prepare_kill_siginfo()
3807 info->si_code = SI_USER; in prepare_kill_siginfo()
3808 info->si_pid = task_tgid_vnr(current); in prepare_kill_siginfo()
3809 info->si_uid = from_kuid_munged(current_user_ns(), current_uid()); in prepare_kill_siginfo()
3813 * sys_kill - send a signal to a process
3841 p = p->parent; in access_pidfd_pidns()
3853 * conversions here. Note, this is a stop-gap measure and should not be in copy_siginfo_from_user_any()
3875 * sys_pidfd_send_signal - Signal a process through a pidfd
3882 * kill(<positive-pid>, <signal>. It does not signal threads or process
3902 return -EINVAL; in SYSCALL_DEFINE4()
3906 return -EBADF; in SYSCALL_DEFINE4()
3915 ret = -EINVAL; in SYSCALL_DEFINE4()
3924 ret = -EINVAL; in SYSCALL_DEFINE4()
3929 ret = -EPERM; in SYSCALL_DEFINE4()
3948 int error = -ESRCH; in do_send_specific()
3965 if (unlikely(error == -ESRCH)) in do_send_specific()
3989 * sys_tgkill - send signal to one specific thread
3994 * This syscall also checks the @tgid and returns -ESRCH even if the PID
4002 return -EINVAL; in SYSCALL_DEFINE3()
4008 * sys_tkill - send signal to one specific task
4018 return -EINVAL; in SYSCALL_DEFINE2()
4028 if ((info->si_code >= 0 || info->si_code == SI_TKILL) && in do_rt_sigqueueinfo()
4030 return -EPERM; in do_rt_sigqueueinfo()
4037 * sys_rt_sigqueueinfo - send signal information to a signal
4070 return -EINVAL; in do_rt_tgsigqueueinfo()
4075 if ((info->si_code >= 0 || info->si_code == SI_TKILL) && in do_rt_tgsigqueueinfo()
4077 return -EPERM; in do_rt_tgsigqueueinfo()
4112 spin_lock_irq(¤t->sighand->siglock); in kernel_sigaction()
4113 current->sighand->action[sig - 1].sa.sa_handler = action; in kernel_sigaction()
4120 flush_sigqueue_mask(&mask, ¤t->signal->shared_pending); in kernel_sigaction()
4121 flush_sigqueue_mask(&mask, ¤t->pending); in kernel_sigaction()
4124 spin_unlock_irq(¤t->sighand->siglock); in kernel_sigaction()
4140 return -EINVAL; in do_sigaction()
4142 k = &p->sighand->action[sig-1]; in do_sigaction()
4144 spin_lock_irq(&p->sighand->siglock); in do_sigaction()
4145 if (k->sa.sa_flags & SA_IMMUTABLE) { in do_sigaction()
4146 spin_unlock_irq(&p->sighand->siglock); in do_sigaction()
4147 return -EINVAL; in do_sigaction()
4160 * support for flag bits and to allow the kernel to use non-uapi bits in do_sigaction()
4164 act->sa.sa_flags &= UAPI_SA_FLAGS; in do_sigaction()
4166 oact->sa.sa_flags &= UAPI_SA_FLAGS; in do_sigaction()
4171 sigdelsetmask(&act->sa.sa_mask, in do_sigaction()
4188 flush_sigqueue_mask(&mask, &p->signal->shared_pending); in do_sigaction()
4190 flush_sigqueue_mask(&mask, &t->pending); in do_sigaction()
4194 spin_unlock_irq(&p->sighand->siglock); in do_sigaction()
4200 __acquires(¤t->sighand->siglock) in sigaltstack_lock()
4202 spin_lock_irq(¤t->sighand->siglock); in sigaltstack_lock()
4206 __releases(¤t->sighand->siglock) in sigaltstack_unlock()
4208 spin_unlock_irq(¤t->sighand->siglock); in sigaltstack_unlock()
4224 oss->ss_sp = (void __user *) t->sas_ss_sp; in do_sigaltstack()
4225 oss->ss_size = t->sas_ss_size; in do_sigaltstack()
4226 oss->ss_flags = sas_ss_flags(sp) | in do_sigaltstack()
4227 (current->sas_ss_flags & SS_FLAG_BITS); in do_sigaltstack()
4231 void __user *ss_sp = ss->ss_sp; in do_sigaltstack()
4232 size_t ss_size = ss->ss_size; in do_sigaltstack()
4233 unsigned ss_flags = ss->ss_flags; in do_sigaltstack()
4237 return -EPERM; in do_sigaltstack()
4242 return -EINVAL; in do_sigaltstack()
4248 if (t->sas_ss_sp == (unsigned long)ss_sp && in do_sigaltstack()
4249 t->sas_ss_size == ss_size && in do_sigaltstack()
4250 t->sas_ss_flags == ss_flags) in do_sigaltstack()
4259 ret = -ENOMEM; in do_sigaltstack()
4261 ret = -ENOMEM; in do_sigaltstack()
4264 t->sas_ss_sp = (unsigned long) ss_sp; in do_sigaltstack()
4265 t->sas_ss_size = ss_size; in do_sigaltstack()
4266 t->sas_ss_flags = ss_flags; in do_sigaltstack()
4278 return -EFAULT; in SYSCALL_DEFINE2()
4283 err = -EFAULT; in SYSCALL_DEFINE2()
4291 return -EFAULT; in restore_altstack()
4301 int err = __put_user((void __user *)t->sas_ss_sp, &uss->ss_sp) | in __save_altstack()
4302 __put_user(t->sas_ss_flags, &uss->ss_flags) | in __save_altstack()
4303 __put_user(t->sas_ss_size, &uss->ss_size); in __save_altstack()
4317 return -EFAULT; in do_compat_sigaltstack()
4332 ret = -EFAULT; in do_compat_sigaltstack()
4347 /* squash all but -EFAULT for now */ in compat_restore_altstack()
4348 return err == -EFAULT ? err : 0; in compat_restore_altstack()
4355 err = __put_user(ptr_to_compat((void __user *)t->sas_ss_sp), in __compat_save_altstack()
4356 &uss->ss_sp) | in __compat_save_altstack()
4357 __put_user(t->sas_ss_flags, &uss->ss_flags) | in __compat_save_altstack()
4358 __put_user(t->sas_ss_size, &uss->ss_size); in __compat_save_altstack()
4366 * sys_sigpending - examine pending signals
4374 return -EINVAL; in SYSCALL_DEFINE1()
4379 return -EFAULT; in SYSCALL_DEFINE1()
4399 * sys_sigprocmask - examine and change blocked signals
4401 * @nset: signals to add or remove (if non-null)
4402 * @oset: previous value of signal mask if non-null
4414 old_set = current->blocked.sig[0]; in SYSCALL_DEFINE3()
4418 return -EFAULT; in SYSCALL_DEFINE3()
4420 new_blocked = current->blocked; in SYSCALL_DEFINE3()
4433 return -EINVAL; in SYSCALL_DEFINE3()
4441 return -EFAULT; in SYSCALL_DEFINE3()
4450 * sys_rt_sigaction - alter an action taken by a process
4466 return -EINVAL; in SYSCALL_DEFINE4()
4469 return -EFAULT; in SYSCALL_DEFINE4()
4476 return -EFAULT; in SYSCALL_DEFINE4()
4494 return -EINVAL; in COMPAT_SYSCALL_DEFINE4()
4498 ret = get_user(handler, &act->sa_handler); in COMPAT_SYSCALL_DEFINE4()
4501 ret |= get_user(restorer, &act->sa_restorer); in COMPAT_SYSCALL_DEFINE4()
4504 ret |= get_compat_sigset(&new_ka.sa.sa_mask, &act->sa_mask); in COMPAT_SYSCALL_DEFINE4()
4505 ret |= get_user(new_ka.sa.sa_flags, &act->sa_flags); in COMPAT_SYSCALL_DEFINE4()
4507 return -EFAULT; in COMPAT_SYSCALL_DEFINE4()
4513 &oact->sa_handler); in COMPAT_SYSCALL_DEFINE4()
4514 ret |= put_compat_sigset(&oact->sa_mask, &old_ka.sa.sa_mask, in COMPAT_SYSCALL_DEFINE4()
4515 sizeof(oact->sa_mask)); in COMPAT_SYSCALL_DEFINE4()
4516 ret |= put_user(old_ka.sa.sa_flags, &oact->sa_flags); in COMPAT_SYSCALL_DEFINE4()
4519 &oact->sa_restorer); in COMPAT_SYSCALL_DEFINE4()
4538 __get_user(new_ka.sa.sa_handler, &act->sa_handler) || in SYSCALL_DEFINE3()
4539 __get_user(new_ka.sa.sa_restorer, &act->sa_restorer) || in SYSCALL_DEFINE3()
4540 __get_user(new_ka.sa.sa_flags, &act->sa_flags) || in SYSCALL_DEFINE3()
4541 __get_user(mask, &act->sa_mask)) in SYSCALL_DEFINE3()
4542 return -EFAULT; in SYSCALL_DEFINE3()
4553 __put_user(old_ka.sa.sa_handler, &oact->sa_handler) || in SYSCALL_DEFINE3()
4554 __put_user(old_ka.sa.sa_restorer, &oact->sa_restorer) || in SYSCALL_DEFINE3()
4555 __put_user(old_ka.sa.sa_flags, &oact->sa_flags) || in SYSCALL_DEFINE3()
4556 __put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask)) in SYSCALL_DEFINE3()
4557 return -EFAULT; in SYSCALL_DEFINE3()
4575 __get_user(handler, &act->sa_handler) || in COMPAT_SYSCALL_DEFINE3()
4576 __get_user(restorer, &act->sa_restorer) || in COMPAT_SYSCALL_DEFINE3()
4577 __get_user(new_ka.sa.sa_flags, &act->sa_flags) || in COMPAT_SYSCALL_DEFINE3()
4578 __get_user(mask, &act->sa_mask)) in COMPAT_SYSCALL_DEFINE3()
4579 return -EFAULT; in COMPAT_SYSCALL_DEFINE3()
4594 &oact->sa_handler) || in COMPAT_SYSCALL_DEFINE3()
4596 &oact->sa_restorer) || in COMPAT_SYSCALL_DEFINE3()
4597 __put_user(old_ka.sa.sa_flags, &oact->sa_flags) || in COMPAT_SYSCALL_DEFINE3()
4598 __put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask)) in COMPAT_SYSCALL_DEFINE3()
4599 return -EFAULT; in COMPAT_SYSCALL_DEFINE3()
4613 return current->blocked.sig[0]; in SYSCALL_DEFINE0()
4618 int old = current->blocked.sig[0]; in SYSCALL_DEFINE1()
4655 return -ERESTARTNOHAND; in SYSCALL_DEFINE0()
4662 current->saved_sigmask = current->blocked; in sigsuspend()
4670 return -ERESTARTNOHAND; in sigsuspend()
4674 * sys_rt_sigsuspend - replace the signal mask for a value with the
4685 return -EINVAL; in SYSCALL_DEFINE2()
4688 return -EFAULT; in SYSCALL_DEFINE2()
4699 return -EINVAL; in COMPAT_SYSCALL_DEFINE2()
4702 return -EFAULT; in COMPAT_SYSCALL_DEFINE2()
4734 #define CHECK_OFFSET(field) \ in siginfo_buildtime_checks() argument
4735 BUILD_BUG_ON(offsetof(siginfo_t, field) != offsetof(kernel_siginfo_t, field)) in siginfo_buildtime_checks()
4806 .procname = "exception-trace",
4834 * kdb_send_sig - Allows kdb to send signals without exposing
4843 if (!spin_trylock(&t->sighand->siglock)) { in kdb_send_sig()
4852 spin_unlock(&t->sighand->siglock); in kdb_send_sig()
4862 spin_unlock(&t->sighand->siglock); in kdb_send_sig()
4865 sig, t->pid); in kdb_send_sig()
4867 kdb_printf("Signal %d is sent to process %d.\n", sig, t->pid); in kdb_send_sig()