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.
45 #include <linux/posix-timers.h>
69 return t->sighand->action[sig - 1].sa.sa_handler; in sig_handler()
89 if (unlikely(t->signal->flags & SIGNAL_UNKILLABLE) && in sig_task_ignored()
94 if (unlikely((t->flags & PF_KTHREAD) && in sig_task_ignored()
108 if (sigismember(&t->blocked, sig) || sigismember(&t->real_blocked, sig)) in sig_ignored()
116 if (t->ptrace && sig != SIGKILL) in sig_ignored()
123 * Re-calculate pending state from the set of locally pending
133 for (i = _NSIG_WORDS, ready = 0; --i >= 0 ;) in has_pending_signals()
134 ready |= signal->sig[i] &~ blocked->sig[i]; in has_pending_signals()
137 case 4: ready = signal->sig[3] &~ blocked->sig[3]; in has_pending_signals()
138 ready |= signal->sig[2] &~ blocked->sig[2]; in has_pending_signals()
139 ready |= signal->sig[1] &~ blocked->sig[1]; in has_pending_signals()
140 ready |= signal->sig[0] &~ blocked->sig[0]; in has_pending_signals()
143 case 2: ready = signal->sig[1] &~ blocked->sig[1]; in has_pending_signals()
144 ready |= signal->sig[0] &~ blocked->sig[0]; in has_pending_signals()
147 case 1: ready = signal->sig[0] &~ blocked->sig[0]; in has_pending_signals()
152 #define PENDING(p,b) has_pending_signals(&(p)->signal, (b))
156 if ((t->jobctl & (JOBCTL_PENDING_MASK | JOBCTL_TRAP_FREEZE)) || in recalc_sigpending_tsk()
157 PENDING(&t->pending, &t->blocked) || in recalc_sigpending_tsk()
158 PENDING(&t->signal->shared_pending, &t->blocked) || in recalc_sigpending_tsk()
166 * when it's possible the current syscall is returning -ERESTART*. in recalc_sigpending_tsk()
174 * This is superfluous when called on current, the wakeup is a harmless no-op.
195 spin_lock_irq(¤t->sighand->siglock); in calculate_sigpending()
198 spin_unlock_irq(¤t->sighand->siglock); in calculate_sigpending()
212 s = pending->signal.sig; in next_signal()
213 m = mask->sig; in next_signal()
264 current->comm, current->pid, sig); in print_dropped_signal()
268 * task_set_jobctl_pending - set jobctl pending bits
272 * Clear @mask from @task->jobctl. @mask must be subset of
279 * Must be called with @task->sighand->siglock held.
290 if (unlikely(fatal_signal_pending(task) || (task->flags & PF_EXITING))) in task_set_jobctl_pending()
294 task->jobctl &= ~JOBCTL_STOP_SIGMASK; in task_set_jobctl_pending()
296 task->jobctl |= mask; in task_set_jobctl_pending()
301 * task_clear_jobctl_trapping - clear jobctl trapping bit
306 * locking. @task->siglock guarantees that @task->parent points to the
310 * Must be called with @task->sighand->siglock held.
314 if (unlikely(task->jobctl & JOBCTL_TRAPPING)) { in task_clear_jobctl_trapping()
315 task->jobctl &= ~JOBCTL_TRAPPING; in task_clear_jobctl_trapping()
317 wake_up_bit(&task->jobctl, JOBCTL_TRAPPING_BIT); in task_clear_jobctl_trapping()
322 * task_clear_jobctl_pending - clear jobctl pending bits
326 * Clear @mask from @task->jobctl. @mask must be subset of
334 * Must be called with @task->sighand->siglock held.
343 task->jobctl &= ~mask; in task_clear_jobctl_pending()
345 if (!(task->jobctl & JOBCTL_PENDING_MASK)) in task_clear_jobctl_pending()
350 * task_participate_group_stop - participate in a group stop
359 * Must be called with @task->sighand->siglock held.
367 struct signal_struct *sig = task->signal; in task_participate_group_stop()
368 bool consume = task->jobctl & JOBCTL_STOP_CONSUME; in task_participate_group_stop()
370 WARN_ON_ONCE(!(task->jobctl & JOBCTL_STOP_PENDING)); in task_participate_group_stop()
377 if (!WARN_ON_ONCE(sig->group_stop_count == 0)) in task_participate_group_stop()
378 sig->group_stop_count--; in task_participate_group_stop()
384 if (!sig->group_stop_count && !(sig->flags & SIGNAL_STOP_STOPPED)) { in task_participate_group_stop()
393 unsigned long mask = current->jobctl & JOBCTL_STOP_SIGMASK; in task_join_group_stop()
394 struct signal_struct *sig = current->signal; in task_join_group_stop()
396 if (sig->group_stop_count) { in task_join_group_stop()
397 sig->group_stop_count++; in task_join_group_stop()
399 } else if (!(sig->flags & SIGNAL_STOP_STOPPED)) in task_join_group_stop()
402 /* Have the new thread join an on-going signal group stop */ in task_join_group_stop()
408 * - this may be called without locks if and only if t == current, otherwise an
443 INIT_LIST_HEAD(&q->list); in __sigqueue_alloc()
444 q->flags = sigqueue_flags; in __sigqueue_alloc()
445 q->ucounts = ucounts; in __sigqueue_alloc()
452 if (q->flags & SIGQUEUE_PREALLOC) in __sigqueue_free()
454 if (q->ucounts) { in __sigqueue_free()
455 dec_rlimit_put_ucounts(q->ucounts, UCOUNT_RLIMIT_SIGPENDING); in __sigqueue_free()
456 q->ucounts = NULL; in __sigqueue_free()
465 sigemptyset(&queue->signal); in flush_sigqueue()
466 while (!list_empty(&queue->list)) { in flush_sigqueue()
467 q = list_entry(queue->list.next, struct sigqueue , list); in flush_sigqueue()
468 list_del_init(&q->list); in flush_sigqueue()
480 spin_lock_irqsave(&t->sighand->siglock, flags); in flush_signals()
482 flush_sigqueue(&t->pending); in flush_signals()
483 flush_sigqueue(&t->signal->shared_pending); in flush_signals()
484 spin_unlock_irqrestore(&t->sighand->siglock, flags); in flush_signals()
494 signal = pending->signal; in __flush_itimer_signals()
497 list_for_each_entry_safe(q, n, &pending->list, list) { in __flush_itimer_signals()
498 int sig = q->info.si_signo; in __flush_itimer_signals()
500 if (likely(q->info.si_code != SI_TIMER)) { in __flush_itimer_signals()
504 list_del_init(&q->list); in __flush_itimer_signals()
509 sigorsets(&pending->signal, &signal, &retain); in __flush_itimer_signals()
517 spin_lock_irqsave(&tsk->sighand->siglock, flags); in flush_itimer_signals()
518 __flush_itimer_signals(&tsk->pending); in flush_itimer_signals()
519 __flush_itimer_signals(&tsk->signal->shared_pending); in flush_itimer_signals()
520 spin_unlock_irqrestore(&tsk->sighand->siglock, flags); in flush_itimer_signals()
529 t->sighand->action[i].sa.sa_handler = SIG_IGN; in ignore_signals()
542 struct k_sigaction *ka = &t->sighand->action[0]; in flush_signal_handlers()
543 for (i = _NSIG ; i != 0 ; i--) { in flush_signal_handlers()
544 if (force_default || ka->sa.sa_handler != SIG_IGN) in flush_signal_handlers()
545 ka->sa.sa_handler = SIG_DFL; in flush_signal_handlers()
546 ka->sa.sa_flags = 0; in flush_signal_handlers()
548 ka->sa.sa_restorer = NULL; in flush_signal_handlers()
550 sigemptyset(&ka->sa.sa_mask); in flush_signal_handlers()
557 void __user *handler = tsk->sighand->action[sig-1].sa.sa_handler; in unhandled_signal()
565 return !tsk->ptrace; in unhandled_signal()
577 list_for_each_entry(q, &list->list, list) { in collect_signal()
578 if (q->info.si_signo == sig) { in collect_signal()
585 sigdelset(&list->signal, sig); in collect_signal()
589 list_del_init(&first->list); in collect_signal()
590 copy_siginfo(info, &first->info); in collect_signal()
593 (first->flags & SIGQUEUE_PREALLOC) && in collect_signal()
594 (info->si_code == SI_TIMER) && in collect_signal()
595 (info->si_sys_private); in collect_signal()
601 * a fast-pathed signal or we must have been in collect_signal()
605 info->si_signo = sig; in collect_signal()
606 info->si_errno = 0; in collect_signal()
607 info->si_code = SI_USER; in collect_signal()
608 info->si_pid = 0; in collect_signal()
609 info->si_uid = 0; in collect_signal()
637 signr = __dequeue_signal(&tsk->pending, mask, info, &resched_timer); in dequeue_signal()
639 signr = __dequeue_signal(&tsk->signal->shared_pending, in dequeue_signal()
648 * compliant with the old way of self-restarting in dequeue_signal()
656 struct hrtimer *tmr = &tsk->signal->real_timer; in dequeue_signal()
659 tsk->signal->it_real_incr != 0) { in dequeue_signal()
660 hrtimer_forward(tmr, tmr->base->get_time(), in dequeue_signal()
661 tsk->signal->it_real_incr); in dequeue_signal()
682 * is to alert stop-signal processing code when another in dequeue_signal()
685 current->jobctl |= JOBCTL_STOP_DEQUEUED; in dequeue_signal()
692 * irqs disabled here, since the posix-timers code is in dequeue_signal()
695 spin_unlock(&tsk->sighand->siglock); in dequeue_signal()
697 spin_lock(&tsk->sighand->siglock); in dequeue_signal()
700 info->si_sys_private = 0; in dequeue_signal()
710 struct sigpending *pending = &tsk->pending; in dequeue_synchronous_signal()
716 if (!((pending->signal.sig[0] & ~tsk->blocked.sig[0]) & SYNCHRONOUS_MASK)) in dequeue_synchronous_signal()
722 list_for_each_entry(q, &pending->list, list) { in dequeue_synchronous_signal()
724 if ((q->info.si_code > SI_USER) && in dequeue_synchronous_signal()
725 (sigmask(q->info.si_signo) & SYNCHRONOUS_MASK)) { in dequeue_synchronous_signal()
735 list_for_each_entry_continue(q, &pending->list, list) { in dequeue_synchronous_signal()
736 if (q->info.si_signo == sync->info.si_signo) in dequeue_synchronous_signal()
740 sigdelset(&pending->signal, sync->info.si_signo); in dequeue_synchronous_signal()
743 list_del_init(&sync->list); in dequeue_synchronous_signal()
744 copy_siginfo(info, &sync->info); in dequeue_synchronous_signal()
746 return info->si_signo; in dequeue_synchronous_signal()
758 * goes through ->blocked
765 * case. We don't check t->state here because there is a race with it in signal_wake_up_state()
785 sigandsets(&m, mask, &s->signal); in flush_sigqueue_mask()
789 sigandnsets(&s->signal, &s->signal, mask); in flush_sigqueue_mask()
790 list_for_each_entry_safe(q, n, &s->list, list) { in flush_sigqueue_mask()
791 if (sigismember(mask, q->info.si_signo)) { in flush_sigqueue_mask()
792 list_del_init(&q->list); in flush_sigqueue_mask()
817 return uid_eq(cred->euid, tcred->suid) || in kill_ok_by_cred()
818 uid_eq(cred->euid, tcred->uid) || in kill_ok_by_cred()
819 uid_eq(cred->uid, tcred->suid) || in kill_ok_by_cred()
820 uid_eq(cred->uid, tcred->uid) || in kill_ok_by_cred()
821 ns_capable(tcred->user_ns, CAP_KILL); in kill_ok_by_cred()
826 * - the caller must hold the RCU read lock
835 return -EINVAL; in check_kill_permission()
857 return -EPERM; in check_kill_permission()
865 * ptrace_trap_notify - schedule trap to notify ptracer
874 * re-trap for the new event. If trapped otherwise, STOP trap will be
879 * Must be called with @task->sighand->siglock held.
883 WARN_ON_ONCE(!(t->ptrace & PT_SEIZED)); in ptrace_trap_notify()
884 assert_spin_locked(&t->sighand->siglock); in ptrace_trap_notify()
887 ptrace_signal_wake_up(t, t->jobctl & JOBCTL_LISTENING); in ptrace_trap_notify()
891 * Handle magic process-wide effects of stop/continue signals. Unlike
892 * the signal actions, these happen immediately at signal-generation
902 struct signal_struct *signal = p->signal; in prepare_signal()
906 if (signal->flags & (SIGNAL_GROUP_EXIT | SIGNAL_GROUP_COREDUMP)) { in prepare_signal()
907 if (!(signal->flags & SIGNAL_GROUP_EXIT)) in prepare_signal()
917 flush_sigqueue_mask(&flush, &signal->shared_pending); in prepare_signal()
919 flush_sigqueue_mask(&flush, &t->pending); in prepare_signal()
926 flush_sigqueue_mask(&flush, &signal->shared_pending); in prepare_signal()
928 flush_sigqueue_mask(&flush, &t->pending); in prepare_signal()
930 if (likely(!(t->ptrace & PT_SEIZED))) in prepare_signal()
945 if (signal->flags & SIGNAL_STOP_STOPPED) in prepare_signal()
947 else if (signal->group_stop_count) in prepare_signal()
953 * will take ->siglock, notice SIGNAL_CLD_MASK, and in prepare_signal()
957 signal->group_stop_count = 0; in prepare_signal()
958 signal->group_exit_code = 0; in prepare_signal()
975 if (sigismember(&p->blocked, sig)) in wants_signal()
978 if (p->flags & PF_EXITING) in wants_signal()
992 struct signal_struct *signal = p->signal; in complete_signal()
1013 t = signal->curr_target; in complete_signal()
1016 if (t == signal->curr_target) in complete_signal()
1024 signal->curr_target = t; in complete_signal()
1032 !(signal->flags & SIGNAL_GROUP_EXIT) && in complete_signal()
1033 !sigismember(&t->real_blocked, sig) && in complete_signal()
1034 (sig == SIGKILL || !p->ptrace)) { in complete_signal()
1045 signal->flags = SIGNAL_GROUP_EXIT; in complete_signal()
1046 signal->group_exit_code = sig; in complete_signal()
1047 signal->group_stop_count = 0; in complete_signal()
1051 sigaddset(&t->pending.signal, SIGKILL); in complete_signal()
1059 * The signal is already in the shared-pending queue. in complete_signal()
1068 return (sig < SIGRTMIN) && sigismember(&signals->signal, sig); in legacy_queue()
1079 assert_spin_locked(&t->sighand->siglock); in __send_signal()
1085 pending = (type != PIDTYPE_PID) ? &t->signal->shared_pending : &t->pending; in __send_signal()
1087 * Short-circuit ignored signals and support queuing in __send_signal()
1088 * exactly one non-rt signal, so that we can get more in __send_signal()
1099 if ((sig == SIGKILL) || (t->flags & PF_KTHREAD)) in __send_signal()
1103 * Real-time signals must be queued if sent by sigqueue, or in __send_signal()
1104 * some other real-time mechanism. It is implementation in __send_signal()
1112 override_rlimit = (is_si_special(info) || info->si_code >= 0); in __send_signal()
1119 list_add_tail(&q->list, &pending->list); in __send_signal()
1122 clear_siginfo(&q->info); in __send_signal()
1123 q->info.si_signo = sig; in __send_signal()
1124 q->info.si_errno = 0; in __send_signal()
1125 q->info.si_code = SI_USER; in __send_signal()
1126 q->info.si_pid = task_tgid_nr_ns(current, in __send_signal()
1129 q->info.si_uid = in __send_signal()
1135 clear_siginfo(&q->info); in __send_signal()
1136 q->info.si_signo = sig; in __send_signal()
1137 q->info.si_errno = 0; in __send_signal()
1138 q->info.si_code = SI_KERNEL; in __send_signal()
1139 q->info.si_pid = 0; in __send_signal()
1140 q->info.si_uid = 0; in __send_signal()
1143 copy_siginfo(&q->info, info); in __send_signal()
1147 sig >= SIGRTMIN && info->si_code != SI_USER) { in __send_signal()
1154 ret = -EAGAIN; in __send_signal()
1166 sigaddset(&pending->signal, sig); in __send_signal()
1168 /* Let multiprocess signals appear after on-going forks */ in __send_signal()
1171 hlist_for_each_entry(delayed, &t->signal->multiprocess, node) { in __send_signal()
1172 sigset_t *signal = &delayed->signal; in __send_signal()
1191 switch (siginfo_layout(info->si_signo, info->si_code)) { in has_si_pid_and_uid()
1231 kuid_t uid = make_kuid(current_user_ns(), info->si_uid); in send_signal()
1232 info->si_uid = from_kuid_munged(t_user_ns, uid); in send_signal()
1237 force = (info->si_code == SI_KERNEL); in send_signal()
1241 info->si_pid = 0; in send_signal()
1254 pr_info("code at %08lx: ", regs->ip); in print_fatal_signal()
1260 if (get_user(insn, (unsigned char *)(regs->ip + i))) in print_fatal_signal()
1279 __setup("print-fatal-signals=", setup_print_fatal_signals);
1291 int ret = -ESRCH; in do_send_sig_info()
1318 int sig = info->si_signo; in force_sig_info_to_task()
1320 spin_lock_irqsave(&t->sighand->siglock, flags); in force_sig_info_to_task()
1321 action = &t->sighand->action[sig-1]; in force_sig_info_to_task()
1322 ignored = action->sa.sa_handler == SIG_IGN; in force_sig_info_to_task()
1323 blocked = sigismember(&t->blocked, sig); in force_sig_info_to_task()
1325 action->sa.sa_handler = SIG_DFL; in force_sig_info_to_task()
1327 sigdelset(&t->blocked, sig); in force_sig_info_to_task()
1335 if (action->sa.sa_handler == SIG_DFL && !t->ptrace) in force_sig_info_to_task()
1336 t->signal->flags &= ~SIGNAL_UNKILLABLE; in force_sig_info_to_task()
1338 spin_unlock_irqrestore(&t->sighand->siglock, flags); in force_sig_info_to_task()
1356 p->signal->group_stop_count = 0; in zap_other_threads()
1363 if (t->exit_state) in zap_other_threads()
1365 sigaddset(&t->pending.signal, SIGKILL); in zap_other_threads()
1379 sighand = rcu_dereference(tsk->sighand); in __lock_task_sighand()
1386 * initializes ->siglock: this slab can't go away, it has in __lock_task_sighand()
1387 * the same object type, ->siglock can't be reinitialized. in __lock_task_sighand()
1389 * We need to ensure that tsk->sighand is still the same in __lock_task_sighand()
1392 * must see ->sighand == NULL. in __lock_task_sighand()
1394 spin_lock_irqsave(&sighand->siglock, *flags); in __lock_task_sighand()
1395 if (likely(sighand == rcu_access_pointer(tsk->sighand))) in __lock_task_sighand()
1397 spin_unlock_irqrestore(&sighand->siglock, *flags); in __lock_task_sighand()
1410 sighand = rcu_dereference(task->sighand); in lockdep_assert_task_sighand_held()
1412 lockdep_assert_held(&sighand->siglock); in lockdep_assert_task_sighand_held()
1440 * - the caller must hold at least a readlock on tasklist_lock
1448 retval = -ESRCH; in __kill_pgrp_info()
1459 int error = -ESRCH; in kill_pid_info()
1468 if (likely(!p || error != -ESRCH)) in kill_pid_info()
1493 return uid_eq(cred->euid, pcred->suid) || in kill_as_cred_perm()
1494 uid_eq(cred->euid, pcred->uid) || in kill_as_cred_perm()
1495 uid_eq(cred->uid, pcred->suid) || in kill_as_cred_perm()
1496 uid_eq(cred->uid, pcred->uid); in kill_as_cred_perm()
1530 int ret = -EINVAL; in kill_pid_usb_asyncio()
1544 ret = -ESRCH; in kill_pid_usb_asyncio()
1548 ret = -EPERM; in kill_pid_usb_asyncio()
1560 ret = -ESRCH; in kill_pid_usb_asyncio()
1571 * POSIX specifies that kill(-1,sig) is unspecified, but what we have
1582 /* -INT_MIN is undefined. Exclude this case to avoid a UBSAN warning */ in kill_something_info()
1584 return -ESRCH; in kill_something_info()
1587 if (pid != -1) { in kill_something_info()
1589 pid ? find_vpid(-pid) : task_pgrp(current)); in kill_something_info()
1600 if (err != -EPERM) in kill_something_info()
1604 ret = count ? retval : -ESRCH; in kill_something_info()
1622 return -EINVAL; in send_sig_info()
1653 * When things go south during signal handling, we
1664 spin_lock_irqsave(&p->sighand->siglock, flags); in force_sigsegv()
1665 p->sighand->action[sig - 1].sa.sa_handler = SIG_DFL; in force_sigsegv()
1666 spin_unlock_irqrestore(&p->sighand->siglock, flags); in force_sigsegv()
1790 * force_sig_seccomp - signals the task to allow in-process syscall emulation
1792 * @reason: filter-supplied reason code to send to userland (via si_errno)
1811 * the errno field, instead of an actual errno value.
1887 return __sigqueue_alloc(-1, current, GFP_KERNEL, 0, SIGQUEUE_PREALLOC); in sigqueue_alloc()
1893 spinlock_t *lock = ¤t->sighand->siglock; in sigqueue_free()
1895 BUG_ON(!(q->flags & SIGQUEUE_PREALLOC)); in sigqueue_free()
1897 * We must hold ->siglock while testing q->list in sigqueue_free()
1899 * __exit_signal()->flush_sigqueue(). in sigqueue_free()
1902 q->flags &= ~SIGQUEUE_PREALLOC; in sigqueue_free()
1907 if (!list_empty(&q->list)) in sigqueue_free()
1917 int sig = q->info.si_signo; in send_sigqueue()
1923 BUG_ON(!(q->flags & SIGQUEUE_PREALLOC)); in send_sigqueue()
1925 ret = -1; in send_sigqueue()
1937 if (unlikely(!list_empty(&q->list))) { in send_sigqueue()
1942 BUG_ON(q->info.si_code != SI_TIMER); in send_sigqueue()
1943 q->info.si_overrun++; in send_sigqueue()
1947 q->info.si_overrun = 0; in send_sigqueue()
1950 pending = (type != PIDTYPE_PID) ? &t->signal->shared_pending : &t->pending; in send_sigqueue()
1951 list_add_tail(&q->list, &pending->list); in send_sigqueue()
1952 sigaddset(&pending->signal, sig); in send_sigqueue()
1956 trace_signal_generate(sig, &q->info, t, type != PIDTYPE_PID, result); in send_sigqueue()
1967 WARN_ON(task->exit_state == 0); in do_notify_pidfd()
1969 wake_up_all(&pid->wait_pidfd); in do_notify_pidfd()
1977 * self-reaping.
1987 BUG_ON(sig == -1); in do_notify_parent()
1992 BUG_ON(!tsk->ptrace && in do_notify_parent()
1993 (tsk->group_leader != tsk || !thread_group_empty(tsk))); in do_notify_parent()
2003 if (tsk->parent_exec_id != READ_ONCE(tsk->parent->self_exec_id)) in do_notify_parent()
2022 info.si_pid = task_pid_nr_ns(tsk, task_active_pid_ns(tsk->parent)); in do_notify_parent()
2023 info.si_uid = from_kuid_munged(task_cred_xxx(tsk->parent, user_ns), in do_notify_parent()
2028 info.si_utime = nsec_to_clock_t(utime + tsk->signal->utime); in do_notify_parent()
2029 info.si_stime = nsec_to_clock_t(stime + tsk->signal->stime); in do_notify_parent()
2031 info.si_status = tsk->exit_code & 0x7f; in do_notify_parent()
2032 if (tsk->exit_code & 0x80) in do_notify_parent()
2034 else if (tsk->exit_code & 0x7f) in do_notify_parent()
2038 info.si_status = tsk->exit_code >> 8; in do_notify_parent()
2041 psig = tsk->parent->sighand; in do_notify_parent()
2042 spin_lock_irqsave(&psig->siglock, flags); in do_notify_parent()
2043 if (!tsk->ptrace && sig == SIGCHLD && in do_notify_parent()
2044 (psig->action[SIGCHLD-1].sa.sa_handler == SIG_IGN || in do_notify_parent()
2045 (psig->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDWAIT))) { in do_notify_parent()
2055 * blocked sys_wait4 might now return -ECHILD. in do_notify_parent()
2058 * is implementation-defined: we do (if you don't want in do_notify_parent()
2062 if (psig->action[SIGCHLD-1].sa.sa_handler == SIG_IGN) in do_notify_parent()
2070 __send_signal(sig, &info, tsk->parent, PIDTYPE_TGID, false); in do_notify_parent()
2071 __wake_up_parent(tsk, tsk->parent); in do_notify_parent()
2072 spin_unlock_irqrestore(&psig->siglock, flags); in do_notify_parent()
2078 * do_notify_parent_cldstop - notify parent of stopped/continued state change
2085 * If %true, @tsk reports to @tsk->parent which should be the ptracer.
2100 parent = tsk->parent; in do_notify_parent_cldstop()
2102 tsk = tsk->group_leader; in do_notify_parent_cldstop()
2103 parent = tsk->real_parent; in do_notify_parent_cldstop()
2127 info.si_status = tsk->signal->group_exit_code & 0x7f; in do_notify_parent_cldstop()
2130 info.si_status = tsk->exit_code & 0x7f; in do_notify_parent_cldstop()
2136 sighand = parent->sighand; in do_notify_parent_cldstop()
2137 spin_lock_irqsave(&sighand->siglock, flags); in do_notify_parent_cldstop()
2138 if (sighand->action[SIGCHLD-1].sa.sa_handler != SIG_IGN && in do_notify_parent_cldstop()
2139 !(sighand->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDSTOP)) in do_notify_parent_cldstop()
2145 spin_unlock_irqrestore(&sighand->siglock, flags); in do_notify_parent_cldstop()
2150 if (!likely(current->ptrace)) in may_ptrace_stop()
2158 * ->siglock we must see ->core_state != NULL. Otherwise it in may_ptrace_stop()
2165 if (unlikely(current->mm->core_state) && in may_ptrace_stop()
2166 unlikely(current->mm == current->parent->mm)) in may_ptrace_stop()
2173 * Return non-zero if there is a SIGKILL that should be waking us up.
2178 return sigismember(&tsk->pending.signal, SIGKILL) || in sigkill_pending()
2179 sigismember(&tsk->signal->shared_pending.signal, SIGKILL); in sigkill_pending()
2183 * This must be called with current->sighand->siglock held.
2186 * We always set current->last_siginfo while stopped here.
2188 * being ptrace-stopped vs being job-control-stopped.
2191 * is gone, we keep current->exit_code unless clear_code.
2194 __releases(¤t->sighand->siglock) in ptrace_stop()
2195 __acquires(¤t->sighand->siglock) in ptrace_stop()
2211 spin_unlock_irq(¤t->sighand->siglock); in ptrace_stop()
2213 spin_lock_irq(¤t->sighand->siglock); in ptrace_stop()
2223 * Also, transition to TRACED and updates to ->jobctl should be in ptrace_stop()
2240 current->last_siginfo = info; in ptrace_stop()
2241 current->exit_code = exit_code; in ptrace_stop()
2248 * TASK_TRACED is entered - ignore it. in ptrace_stop()
2250 if (why == CLD_STOPPED && (current->jobctl & JOBCTL_STOP_PENDING)) in ptrace_stop()
2255 if (info && info->si_code >> 8 == PTRACE_EVENT_STOP) in ptrace_stop()
2261 spin_unlock_irq(¤t->sighand->siglock); in ptrace_stop()
2267 * While ptraced, there are two parents - the ptracer and in ptrace_stop()
2297 * JOBCTL_STOP_PENDING on us and we'll re-enter in ptrace_stop()
2307 current->exit_code = 0; in ptrace_stop()
2314 * any signal-sending on another CPU that wants to examine it. in ptrace_stop()
2316 spin_lock_irq(¤t->sighand->siglock); in ptrace_stop()
2317 current->last_siginfo = NULL; in ptrace_stop()
2320 current->jobctl &= ~JOBCTL_LISTENING; in ptrace_stop()
2347 if (unlikely(current->task_works)) in ptrace_notify()
2350 spin_lock_irq(¤t->sighand->siglock); in ptrace_notify()
2352 spin_unlock_irq(¤t->sighand->siglock); in ptrace_notify()
2356 * do_signal_stop - handle group stop for SIGSTOP and other stop signals
2370 * Must be called with @current->sighand->siglock held, which is released
2378 __releases(¤t->sighand->siglock) in do_signal_stop()
2380 struct signal_struct *sig = current->signal; in do_signal_stop()
2382 if (!(current->jobctl & JOBCTL_STOP_PENDING)) { in do_signal_stop()
2386 /* signr will be recorded in task->jobctl for retries */ in do_signal_stop()
2389 if (!likely(current->jobctl & JOBCTL_STOP_DEQUEUED) || in do_signal_stop()
2411 if (!(sig->flags & SIGNAL_STOP_STOPPED)) in do_signal_stop()
2412 sig->group_exit_code = signr; in do_signal_stop()
2414 sig->group_stop_count = 0; in do_signal_stop()
2417 sig->group_stop_count++; in do_signal_stop()
2428 sig->group_stop_count++; in do_signal_stop()
2429 if (likely(!(t->ptrace & PT_SEIZED))) in do_signal_stop()
2437 if (likely(!current->ptrace)) { in do_signal_stop()
2449 spin_unlock_irq(¤t->sighand->siglock); in do_signal_stop()
2481 * do_jobctl_trap - take care of ptrace jobctl traps
2492 * Must be called with @current->sighand->siglock held, which may be
2493 * released and re-acquired before returning with intervening sleep.
2497 struct signal_struct *signal = current->signal; in do_jobctl_trap()
2498 int signr = current->jobctl & JOBCTL_STOP_SIGMASK; in do_jobctl_trap()
2500 if (current->ptrace & PT_SEIZED) { in do_jobctl_trap()
2501 if (!signal->group_stop_count && in do_jobctl_trap()
2502 !(signal->flags & SIGNAL_STOP_STOPPED)) in do_jobctl_trap()
2510 current->exit_code = 0; in do_jobctl_trap()
2515 * do_freezer_trap - handle the freezer jobctl trap
2521 * Must be called with @current->sighand->siglock held,
2525 __releases(¤t->sighand->siglock) in do_freezer_trap()
2532 if ((current->jobctl & (JOBCTL_PENDING_MASK | JOBCTL_TRAP_FREEZE)) != in do_freezer_trap()
2534 spin_unlock_irq(¤t->sighand->siglock); in do_freezer_trap()
2541 * immediately (if there is a non-fatal signal pending), and in do_freezer_trap()
2546 spin_unlock_irq(¤t->sighand->siglock); in do_freezer_trap()
2562 current->jobctl |= JOBCTL_STOP_DEQUEUED; in ptrace_signal()
2566 signr = current->exit_code; in ptrace_signal()
2570 current->exit_code = 0; in ptrace_signal()
2578 if (signr != info->si_signo) { in ptrace_signal()
2580 info->si_signo = signr; in ptrace_signal()
2581 info->si_errno = 0; in ptrace_signal()
2582 info->si_code = SI_USER; in ptrace_signal()
2584 info->si_pid = task_pid_vnr(current->parent); in ptrace_signal()
2585 info->si_uid = from_kuid_munged(current_user_ns(), in ptrace_signal()
2586 task_uid(current->parent)); in ptrace_signal()
2591 if (sigismember(¤t->blocked, signr)) { in ptrace_signal()
2601 switch (siginfo_layout(ksig->sig, ksig->info.si_code)) { in hide_si_addr_tag_bits()
2608 ksig->info.si_addr = arch_untagged_si_addr( in hide_si_addr_tag_bits()
2609 ksig->info.si_addr, ksig->sig, ksig->info.si_code); in hide_si_addr_tag_bits()
2623 struct sighand_struct *sighand = current->sighand; in get_signal()
2624 struct signal_struct *signal = current->signal; in get_signal()
2627 if (unlikely(current->task_works)) in get_signal()
2631 * For non-generic architectures, check for TIF_NOTIFY_SIGNAL so in get_signal()
2646 * Do this once, we can't return to user-mode if freezing() == T. in get_signal()
2653 spin_lock_irq(&sighand->siglock); in get_signal()
2660 if (unlikely(signal->flags & SIGNAL_CLD_MASK)) { in get_signal()
2663 if (signal->flags & SIGNAL_CLD_CONTINUED) in get_signal()
2668 signal->flags &= ~SIGNAL_CLD_MASK; in get_signal()
2670 spin_unlock_irq(&sighand->siglock); in get_signal()
2674 * always per-process and doesn't make whole lot of sense in get_signal()
2683 if (ptrace_reparented(current->group_leader)) in get_signal()
2684 do_notify_parent_cldstop(current->group_leader, in get_signal()
2693 ksig->info.si_signo = signr = SIGKILL; in get_signal()
2694 sigdelset(¤t->pending.signal, SIGKILL); in get_signal()
2696 &sighand->action[SIGKILL - 1]); in get_signal()
2704 if (unlikely(current->jobctl & JOBCTL_STOP_PENDING) && in get_signal()
2708 if (unlikely(current->jobctl & in get_signal()
2710 if (current->jobctl & JOBCTL_TRAP_MASK) { in get_signal()
2712 spin_unlock_irq(&sighand->siglock); in get_signal()
2713 } else if (current->jobctl & JOBCTL_TRAP_FREEZE) in get_signal()
2724 spin_unlock_irq(&sighand->siglock); in get_signal()
2735 signr = dequeue_synchronous_signal(&ksig->info); in get_signal()
2737 signr = dequeue_signal(current, ¤t->blocked, &ksig->info); in get_signal()
2742 if (unlikely(current->ptrace) && signr != SIGKILL) { in get_signal()
2743 signr = ptrace_signal(signr, &ksig->info); in get_signal()
2748 ka = &sighand->action[signr-1]; in get_signal()
2751 trace_signal_deliver(signr, &ksig->info, ka); in get_signal()
2753 if (ka->sa.sa_handler == SIG_IGN) /* Do nothing. */ in get_signal()
2755 if (ka->sa.sa_handler != SIG_DFL) { in get_signal()
2757 ksig->ka = *ka; in get_signal()
2759 if (ka->sa.sa_flags & SA_ONESHOT) in get_signal()
2760 ka->sa.sa_handler = SIG_DFL; in get_signal()
2762 break; /* will return non-zero "signr" value */ in get_signal()
2773 * Container-init gets no signals it doesn't want from same in get_signal()
2776 * Note that if global/container-init sees a sig_kernel_only() in get_signal()
2781 if (unlikely(signal->flags & SIGNAL_UNKILLABLE) && in get_signal()
2797 spin_unlock_irq(&sighand->siglock); in get_signal()
2804 spin_lock_irq(&sighand->siglock); in get_signal()
2807 if (likely(do_signal_stop(ksig->info.si_signo))) { in get_signal()
2820 spin_unlock_irq(&sighand->siglock); in get_signal()
2827 current->flags |= PF_SIGNALED; in get_signal()
2831 print_fatal_signal(ksig->info.si_signo); in get_signal()
2841 do_coredump(&ksig->info); in get_signal()
2849 if (current->flags & PF_IO_WORKER) in get_signal()
2855 do_group_exit(ksig->info.si_signo); in get_signal()
2858 spin_unlock_irq(&sighand->siglock); in get_signal()
2860 ksig->sig = signr; in get_signal()
2862 if (!(ksig->ka.sa.sa_flags & SA_EXPOSE_TAGBITS)) in get_signal()
2865 return ksig->sig > 0; in get_signal()
2869 * signal_delivered -
2871 * @stepping: nonzero if debugger single-step or block-step in use
2874 * delivered. It updates the blocked signals accordingly (@ksig->ka.sa.sa_mask
2876 * is set in @ksig->ka.sa.sa_flags. Tracing is notified.
2888 sigorsets(&blocked, ¤t->blocked, &ksig->ka.sa.sa_mask); in signal_delivered()
2889 if (!(ksig->ka.sa.sa_flags & SA_NODEFER)) in signal_delivered()
2890 sigaddset(&blocked, ksig->sig); in signal_delivered()
2892 if (current->sas_ss_flags & SS_AUTODISARM) in signal_delivered()
2900 force_sigsegv(ksig->sig); in signal_setup_done()
2907 * group-wide signal. Other threads should be notified now to take
2915 sigandsets(&retarget, &tsk->signal->shared_pending.signal, which); in retarget_shared_pending()
2921 if (t->flags & PF_EXITING) in retarget_shared_pending()
2924 if (!has_pending_signals(&retarget, &t->blocked)) in retarget_shared_pending()
2927 sigandsets(&retarget, &retarget, &t->blocked); in retarget_shared_pending()
2943 * @tsk is about to have PF_EXITING set - lock out users which in exit_signals()
2948 if (thread_group_empty(tsk) || signal_group_exit(tsk->signal)) { in exit_signals()
2949 tsk->flags |= PF_EXITING; in exit_signals()
2954 spin_lock_irq(&tsk->sighand->siglock); in exit_signals()
2956 * From now this task is not visible for group-wide signals, in exit_signals()
2959 tsk->flags |= PF_EXITING; in exit_signals()
2966 unblocked = tsk->blocked; in exit_signals()
2970 if (unlikely(tsk->jobctl & JOBCTL_STOP_PENDING) && in exit_signals()
2974 spin_unlock_irq(&tsk->sighand->siglock); in exit_signals()
2992 * sys_restart_syscall - restart a system call
2996 struct restart_block *restart = ¤t->restart_block; in SYSCALL_DEFINE0()
2997 return restart->fn(restart); in SYSCALL_DEFINE0()
3002 return -EINTR; in do_no_restart_syscall()
3010 sigandnsets(&newblocked, newset, ¤t->blocked); in __set_task_blocked()
3013 tsk->blocked = *newset; in __set_task_blocked()
3018 * set_current_blocked - change current->blocked mask
3021 * It is wrong to change ->blocked directly, this helper should be used
3036 * to do. The current->blocked shouldn't be modified by other task. in __set_current_blocked()
3038 if (sigequalsets(&tsk->blocked, newset)) in __set_current_blocked()
3041 spin_lock_irq(&tsk->sighand->siglock); in __set_current_blocked()
3043 spin_unlock_irq(&tsk->sighand->siglock); in __set_current_blocked()
3050 * NOTE! Unlike the user-mode sys_sigprocmask(), the kernel
3059 /* Lockless, only current can change ->blocked, never from irq */ in sigprocmask()
3061 *oldset = tsk->blocked; in sigprocmask()
3065 sigorsets(&newset, &tsk->blocked, set); in sigprocmask()
3068 sigandnsets(&newset, &tsk->blocked, set); in sigprocmask()
3074 return -EINVAL; in sigprocmask()
3083 * The api helps set app-provided sigmasks.
3098 return -EINVAL; in set_user_sigmask()
3100 return -EFAULT; in set_user_sigmask()
3103 current->saved_sigmask = current->blocked; in set_user_sigmask()
3118 return -EINVAL; in set_compat_user_sigmask()
3120 return -EFAULT; in set_compat_user_sigmask()
3123 current->saved_sigmask = current->blocked; in set_compat_user_sigmask()
3131 * sys_rt_sigprocmask - change the list of currently blocked signals
3134 * @oset: previous value of signal mask if non-null
3145 return -EINVAL; in SYSCALL_DEFINE4()
3147 old_set = current->blocked; in SYSCALL_DEFINE4()
3151 return -EFAULT; in SYSCALL_DEFINE4()
3161 return -EFAULT; in SYSCALL_DEFINE4()
3171 sigset_t old_set = current->blocked; in COMPAT_SYSCALL_DEFINE4()
3175 return -EINVAL; in COMPAT_SYSCALL_DEFINE4()
3181 return -EFAULT; in COMPAT_SYSCALL_DEFINE4()
3194 spin_lock_irq(¤t->sighand->siglock); in do_sigpending()
3195 sigorsets(set, ¤t->pending.signal, in do_sigpending()
3196 ¤t->signal->shared_pending.signal); in do_sigpending()
3197 spin_unlock_irq(¤t->sighand->siglock); in do_sigpending()
3200 sigandsets(set, ¤t->blocked, set); in do_sigpending()
3204 * sys_rt_sigpending - examine a pending signal that has been raised
3214 return -EINVAL; in SYSCALL_DEFINE2()
3219 return -EFAULT; in SYSCALL_DEFINE2()
3231 return -EINVAL; in COMPAT_SYSCALL_DEFINE2()
3323 return -EFAULT; in copy_siginfo_to_user()
3325 return -EFAULT; in copy_siginfo_to_user()
3332 if (unlikely(!known_siginfo_layout(info->si_signo, info->si_code))) { in post_copy_siginfo_from_user()
3343 return -EFAULT; in post_copy_siginfo_from_user()
3346 return -E2BIG; in post_copy_siginfo_from_user()
3356 return -EFAULT; in __copy_siginfo_from_user()
3357 to->si_signo = signo; in __copy_siginfo_from_user()
3364 return -EFAULT; in copy_siginfo_from_user()
3370 * copy_siginfo_to_external32 - copy a kernel siginfo into a compat user siginfo
3384 to->si_signo = from->si_signo; in copy_siginfo_to_external32()
3385 to->si_errno = from->si_errno; in copy_siginfo_to_external32()
3386 to->si_code = from->si_code; in copy_siginfo_to_external32()
3387 switch(siginfo_layout(from->si_signo, from->si_code)) { in copy_siginfo_to_external32()
3389 to->si_pid = from->si_pid; in copy_siginfo_to_external32()
3390 to->si_uid = from->si_uid; in copy_siginfo_to_external32()
3393 to->si_tid = from->si_tid; in copy_siginfo_to_external32()
3394 to->si_overrun = from->si_overrun; in copy_siginfo_to_external32()
3395 to->si_int = from->si_int; in copy_siginfo_to_external32()
3398 to->si_band = from->si_band; in copy_siginfo_to_external32()
3399 to->si_fd = from->si_fd; in copy_siginfo_to_external32()
3402 to->si_addr = ptr_to_compat(from->si_addr); in copy_siginfo_to_external32()
3405 to->si_addr = ptr_to_compat(from->si_addr); in copy_siginfo_to_external32()
3406 to->si_trapno = from->si_trapno; in copy_siginfo_to_external32()
3409 to->si_addr = ptr_to_compat(from->si_addr); in copy_siginfo_to_external32()
3410 to->si_addr_lsb = from->si_addr_lsb; in copy_siginfo_to_external32()
3413 to->si_addr = ptr_to_compat(from->si_addr); in copy_siginfo_to_external32()
3414 to->si_lower = ptr_to_compat(from->si_lower); in copy_siginfo_to_external32()
3415 to->si_upper = ptr_to_compat(from->si_upper); in copy_siginfo_to_external32()
3418 to->si_addr = ptr_to_compat(from->si_addr); in copy_siginfo_to_external32()
3419 to->si_pkey = from->si_pkey; in copy_siginfo_to_external32()
3422 to->si_addr = ptr_to_compat(from->si_addr); in copy_siginfo_to_external32()
3423 to->si_perf_data = from->si_perf_data; in copy_siginfo_to_external32()
3424 to->si_perf_type = from->si_perf_type; in copy_siginfo_to_external32()
3427 to->si_pid = from->si_pid; in copy_siginfo_to_external32()
3428 to->si_uid = from->si_uid; in copy_siginfo_to_external32()
3429 to->si_status = from->si_status; in copy_siginfo_to_external32()
3430 to->si_utime = from->si_utime; in copy_siginfo_to_external32()
3431 to->si_stime = from->si_stime; in copy_siginfo_to_external32()
3434 to->si_pid = from->si_pid; in copy_siginfo_to_external32()
3435 to->si_uid = from->si_uid; in copy_siginfo_to_external32()
3436 to->si_int = from->si_int; in copy_siginfo_to_external32()
3439 to->si_call_addr = ptr_to_compat(from->si_call_addr); in copy_siginfo_to_external32()
3440 to->si_syscall = from->si_syscall; in copy_siginfo_to_external32()
3441 to->si_arch = from->si_arch; in copy_siginfo_to_external32()
3453 return -EFAULT; in __copy_siginfo_to_user32()
3461 to->si_signo = from->si_signo; in post_copy_siginfo_from_user32()
3462 to->si_errno = from->si_errno; in post_copy_siginfo_from_user32()
3463 to->si_code = from->si_code; in post_copy_siginfo_from_user32()
3464 switch(siginfo_layout(from->si_signo, from->si_code)) { in post_copy_siginfo_from_user32()
3466 to->si_pid = from->si_pid; in post_copy_siginfo_from_user32()
3467 to->si_uid = from->si_uid; in post_copy_siginfo_from_user32()
3470 to->si_tid = from->si_tid; in post_copy_siginfo_from_user32()
3471 to->si_overrun = from->si_overrun; in post_copy_siginfo_from_user32()
3472 to->si_int = from->si_int; in post_copy_siginfo_from_user32()
3475 to->si_band = from->si_band; in post_copy_siginfo_from_user32()
3476 to->si_fd = from->si_fd; in post_copy_siginfo_from_user32()
3479 to->si_addr = compat_ptr(from->si_addr); in post_copy_siginfo_from_user32()
3482 to->si_addr = compat_ptr(from->si_addr); in post_copy_siginfo_from_user32()
3483 to->si_trapno = from->si_trapno; in post_copy_siginfo_from_user32()
3486 to->si_addr = compat_ptr(from->si_addr); in post_copy_siginfo_from_user32()
3487 to->si_addr_lsb = from->si_addr_lsb; in post_copy_siginfo_from_user32()
3490 to->si_addr = compat_ptr(from->si_addr); in post_copy_siginfo_from_user32()
3491 to->si_lower = compat_ptr(from->si_lower); in post_copy_siginfo_from_user32()
3492 to->si_upper = compat_ptr(from->si_upper); in post_copy_siginfo_from_user32()
3495 to->si_addr = compat_ptr(from->si_addr); in post_copy_siginfo_from_user32()
3496 to->si_pkey = from->si_pkey; in post_copy_siginfo_from_user32()
3499 to->si_addr = compat_ptr(from->si_addr); in post_copy_siginfo_from_user32()
3500 to->si_perf_data = from->si_perf_data; in post_copy_siginfo_from_user32()
3501 to->si_perf_type = from->si_perf_type; in post_copy_siginfo_from_user32()
3504 to->si_pid = from->si_pid; in post_copy_siginfo_from_user32()
3505 to->si_uid = from->si_uid; in post_copy_siginfo_from_user32()
3506 to->si_status = from->si_status; in post_copy_siginfo_from_user32()
3509 to->si_utime = from->_sifields._sigchld_x32._utime; in post_copy_siginfo_from_user32()
3510 to->si_stime = from->_sifields._sigchld_x32._stime; in post_copy_siginfo_from_user32()
3514 to->si_utime = from->si_utime; in post_copy_siginfo_from_user32()
3515 to->si_stime = from->si_stime; in post_copy_siginfo_from_user32()
3519 to->si_pid = from->si_pid; in post_copy_siginfo_from_user32()
3520 to->si_uid = from->si_uid; in post_copy_siginfo_from_user32()
3521 to->si_int = from->si_int; in post_copy_siginfo_from_user32()
3524 to->si_call_addr = compat_ptr(from->si_call_addr); in post_copy_siginfo_from_user32()
3525 to->si_syscall = from->si_syscall; in post_copy_siginfo_from_user32()
3526 to->si_arch = from->si_arch; in post_copy_siginfo_from_user32()
3538 return -EFAULT; in __copy_siginfo_from_user32()
3550 return -EFAULT; in copy_siginfo_from_user32()
3557 * do_sigtimedwait - wait for queued signals specified in @which
3559 * @info: if non-null, the signal's siginfo is returned here
3572 return -EINVAL; in do_sigtimedwait()
3583 spin_lock_irq(&tsk->sighand->siglock); in do_sigtimedwait()
3592 tsk->real_blocked = tsk->blocked; in do_sigtimedwait()
3593 sigandsets(&tsk->blocked, &tsk->blocked, &mask); in do_sigtimedwait()
3595 spin_unlock_irq(&tsk->sighand->siglock); in do_sigtimedwait()
3598 ret = freezable_schedule_hrtimeout_range(to, tsk->timer_slack_ns, in do_sigtimedwait()
3600 spin_lock_irq(&tsk->sighand->siglock); in do_sigtimedwait()
3601 __set_task_blocked(tsk, &tsk->real_blocked); in do_sigtimedwait()
3602 sigemptyset(&tsk->real_blocked); in do_sigtimedwait()
3605 spin_unlock_irq(&tsk->sighand->siglock); in do_sigtimedwait()
3609 return ret ? -EINTR : -EAGAIN; in do_sigtimedwait()
3613 * sys_rt_sigtimedwait - synchronously wait for queued signals specified
3616 * @uinfo: if non-null, the signal's siginfo is returned here
3632 return -EINVAL; in SYSCALL_DEFINE4()
3635 return -EFAULT; in SYSCALL_DEFINE4()
3639 return -EFAULT; in SYSCALL_DEFINE4()
3646 ret = -EFAULT; in SYSCALL_DEFINE4()
3664 return -EINVAL; in SYSCALL_DEFINE4()
3667 return -EFAULT; in SYSCALL_DEFINE4()
3671 return -EFAULT; in SYSCALL_DEFINE4()
3678 ret = -EFAULT; in SYSCALL_DEFINE4()
3696 return -EINVAL; in COMPAT_SYSCALL_DEFINE4()
3699 return -EFAULT; in COMPAT_SYSCALL_DEFINE4()
3703 return -EFAULT; in COMPAT_SYSCALL_DEFINE4()
3710 ret = -EFAULT; in COMPAT_SYSCALL_DEFINE4()
3727 return -EINVAL; in COMPAT_SYSCALL_DEFINE4()
3730 return -EFAULT; in COMPAT_SYSCALL_DEFINE4()
3734 return -EFAULT; in COMPAT_SYSCALL_DEFINE4()
3741 ret = -EFAULT; in COMPAT_SYSCALL_DEFINE4()
3752 info->si_signo = sig; in prepare_kill_siginfo()
3753 info->si_errno = 0; in prepare_kill_siginfo()
3754 info->si_code = SI_USER; in prepare_kill_siginfo()
3755 info->si_pid = task_tgid_vnr(current); in prepare_kill_siginfo()
3756 info->si_uid = from_kuid_munged(current_user_ns(), current_uid()); in prepare_kill_siginfo()
3760 * sys_kill - send a signal to a process
3788 p = p->parent; in access_pidfd_pidns()
3800 * conversions here. Note, this is a stop-gap measure and should not be in copy_siginfo_from_user_any()
3822 * sys_pidfd_send_signal - Signal a process through a pidfd
3829 * kill(<positive-pid>, <signal>. It does not signal threads or process
3849 return -EINVAL; in SYSCALL_DEFINE4()
3853 return -EBADF; in SYSCALL_DEFINE4()
3862 ret = -EINVAL; in SYSCALL_DEFINE4()
3871 ret = -EINVAL; in SYSCALL_DEFINE4()
3876 ret = -EPERM; in SYSCALL_DEFINE4()
3895 int error = -ESRCH; in do_send_specific()
3912 if (unlikely(error == -ESRCH)) in do_send_specific()
3936 * sys_tgkill - send signal to one specific thread
3941 * This syscall also checks the @tgid and returns -ESRCH even if the PID
3949 return -EINVAL; in SYSCALL_DEFINE3()
3955 * sys_tkill - send signal to one specific task
3965 return -EINVAL; in SYSCALL_DEFINE2()
3975 if ((info->si_code >= 0 || info->si_code == SI_TKILL) && in do_rt_sigqueueinfo()
3977 return -EPERM; in do_rt_sigqueueinfo()
3984 * sys_rt_sigqueueinfo - send signal information to a signal
4017 return -EINVAL; in do_rt_tgsigqueueinfo()
4022 if ((info->si_code >= 0 || info->si_code == SI_TKILL) && in do_rt_tgsigqueueinfo()
4024 return -EPERM; in do_rt_tgsigqueueinfo()
4059 spin_lock_irq(¤t->sighand->siglock); in kernel_sigaction()
4060 current->sighand->action[sig - 1].sa.sa_handler = action; in kernel_sigaction()
4067 flush_sigqueue_mask(&mask, ¤t->signal->shared_pending); in kernel_sigaction()
4068 flush_sigqueue_mask(&mask, ¤t->pending); in kernel_sigaction()
4071 spin_unlock_irq(¤t->sighand->siglock); in kernel_sigaction()
4087 return -EINVAL; in do_sigaction()
4089 k = &p->sighand->action[sig-1]; in do_sigaction()
4091 spin_lock_irq(&p->sighand->siglock); in do_sigaction()
4103 * support for flag bits and to allow the kernel to use non-uapi bits in do_sigaction()
4107 act->sa.sa_flags &= UAPI_SA_FLAGS; in do_sigaction()
4109 oact->sa.sa_flags &= UAPI_SA_FLAGS; in do_sigaction()
4114 sigdelsetmask(&act->sa.sa_mask, in do_sigaction()
4131 flush_sigqueue_mask(&mask, &p->signal->shared_pending); in do_sigaction()
4133 flush_sigqueue_mask(&mask, &t->pending); in do_sigaction()
4137 spin_unlock_irq(&p->sighand->siglock); in do_sigaction()
4149 oss->ss_sp = (void __user *) t->sas_ss_sp; in do_sigaltstack()
4150 oss->ss_size = t->sas_ss_size; in do_sigaltstack()
4151 oss->ss_flags = sas_ss_flags(sp) | in do_sigaltstack()
4152 (current->sas_ss_flags & SS_FLAG_BITS); in do_sigaltstack()
4156 void __user *ss_sp = ss->ss_sp; in do_sigaltstack()
4157 size_t ss_size = ss->ss_size; in do_sigaltstack()
4158 unsigned ss_flags = ss->ss_flags; in do_sigaltstack()
4162 return -EPERM; in do_sigaltstack()
4167 return -EINVAL; in do_sigaltstack()
4174 return -ENOMEM; in do_sigaltstack()
4177 t->sas_ss_sp = (unsigned long) ss_sp; in do_sigaltstack()
4178 t->sas_ss_size = ss_size; in do_sigaltstack()
4179 t->sas_ss_flags = ss_flags; in do_sigaltstack()
4189 return -EFAULT; in SYSCALL_DEFINE2()
4194 err = -EFAULT; in SYSCALL_DEFINE2()
4202 return -EFAULT; in restore_altstack()
4212 int err = __put_user((void __user *)t->sas_ss_sp, &uss->ss_sp) | in __save_altstack()
4213 __put_user(t->sas_ss_flags, &uss->ss_flags) | in __save_altstack()
4214 __put_user(t->sas_ss_size, &uss->ss_size); in __save_altstack()
4228 return -EFAULT; in do_compat_sigaltstack()
4243 ret = -EFAULT; in do_compat_sigaltstack()
4258 /* squash all but -EFAULT for now */ in compat_restore_altstack()
4259 return err == -EFAULT ? err : 0; in compat_restore_altstack()
4266 err = __put_user(ptr_to_compat((void __user *)t->sas_ss_sp), in __compat_save_altstack()
4267 &uss->ss_sp) | in __compat_save_altstack()
4268 __put_user(t->sas_ss_flags, &uss->ss_flags) | in __compat_save_altstack()
4269 __put_user(t->sas_ss_size, &uss->ss_size); in __compat_save_altstack()
4277 * sys_sigpending - examine pending signals
4285 return -EINVAL; in SYSCALL_DEFINE1()
4290 return -EFAULT; in SYSCALL_DEFINE1()
4310 * sys_sigprocmask - examine and change blocked signals
4312 * @nset: signals to add or remove (if non-null)
4313 * @oset: previous value of signal mask if non-null
4325 old_set = current->blocked.sig[0]; in SYSCALL_DEFINE3()
4329 return -EFAULT; in SYSCALL_DEFINE3()
4331 new_blocked = current->blocked; in SYSCALL_DEFINE3()
4344 return -EINVAL; in SYSCALL_DEFINE3()
4352 return -EFAULT; in SYSCALL_DEFINE3()
4361 * sys_rt_sigaction - alter an action taken by a process
4377 return -EINVAL; in SYSCALL_DEFINE4()
4380 return -EFAULT; in SYSCALL_DEFINE4()
4387 return -EFAULT; in SYSCALL_DEFINE4()
4405 return -EINVAL; in COMPAT_SYSCALL_DEFINE4()
4409 ret = get_user(handler, &act->sa_handler); in COMPAT_SYSCALL_DEFINE4()
4412 ret |= get_user(restorer, &act->sa_restorer); in COMPAT_SYSCALL_DEFINE4()
4415 ret |= get_compat_sigset(&new_ka.sa.sa_mask, &act->sa_mask); in COMPAT_SYSCALL_DEFINE4()
4416 ret |= get_user(new_ka.sa.sa_flags, &act->sa_flags); in COMPAT_SYSCALL_DEFINE4()
4418 return -EFAULT; in COMPAT_SYSCALL_DEFINE4()
4424 &oact->sa_handler); in COMPAT_SYSCALL_DEFINE4()
4425 ret |= put_compat_sigset(&oact->sa_mask, &old_ka.sa.sa_mask, in COMPAT_SYSCALL_DEFINE4()
4426 sizeof(oact->sa_mask)); in COMPAT_SYSCALL_DEFINE4()
4427 ret |= put_user(old_ka.sa.sa_flags, &oact->sa_flags); in COMPAT_SYSCALL_DEFINE4()
4430 &oact->sa_restorer); in COMPAT_SYSCALL_DEFINE4()
4449 __get_user(new_ka.sa.sa_handler, &act->sa_handler) || in SYSCALL_DEFINE3()
4450 __get_user(new_ka.sa.sa_restorer, &act->sa_restorer) || in SYSCALL_DEFINE3()
4451 __get_user(new_ka.sa.sa_flags, &act->sa_flags) || in SYSCALL_DEFINE3()
4452 __get_user(mask, &act->sa_mask)) in SYSCALL_DEFINE3()
4453 return -EFAULT; in SYSCALL_DEFINE3()
4464 __put_user(old_ka.sa.sa_handler, &oact->sa_handler) || in SYSCALL_DEFINE3()
4465 __put_user(old_ka.sa.sa_restorer, &oact->sa_restorer) || in SYSCALL_DEFINE3()
4466 __put_user(old_ka.sa.sa_flags, &oact->sa_flags) || in SYSCALL_DEFINE3()
4467 __put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask)) in SYSCALL_DEFINE3()
4468 return -EFAULT; in SYSCALL_DEFINE3()
4486 __get_user(handler, &act->sa_handler) || in COMPAT_SYSCALL_DEFINE3()
4487 __get_user(restorer, &act->sa_restorer) || in COMPAT_SYSCALL_DEFINE3()
4488 __get_user(new_ka.sa.sa_flags, &act->sa_flags) || in COMPAT_SYSCALL_DEFINE3()
4489 __get_user(mask, &act->sa_mask)) in COMPAT_SYSCALL_DEFINE3()
4490 return -EFAULT; in COMPAT_SYSCALL_DEFINE3()
4505 &oact->sa_handler) || in COMPAT_SYSCALL_DEFINE3()
4507 &oact->sa_restorer) || in COMPAT_SYSCALL_DEFINE3()
4508 __put_user(old_ka.sa.sa_flags, &oact->sa_flags) || in COMPAT_SYSCALL_DEFINE3()
4509 __put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask)) in COMPAT_SYSCALL_DEFINE3()
4510 return -EFAULT; in COMPAT_SYSCALL_DEFINE3()
4524 return current->blocked.sig[0]; in SYSCALL_DEFINE0()
4529 int old = current->blocked.sig[0]; in SYSCALL_DEFINE1()
4566 return -ERESTARTNOHAND; in SYSCALL_DEFINE0()
4573 current->saved_sigmask = current->blocked; in sigsuspend()
4581 return -ERESTARTNOHAND; in sigsuspend()
4585 * sys_rt_sigsuspend - replace the signal mask for a value with the
4596 return -EINVAL; in SYSCALL_DEFINE2()
4599 return -EFAULT; in SYSCALL_DEFINE2()
4610 return -EINVAL; in COMPAT_SYSCALL_DEFINE2()
4613 return -EFAULT; in COMPAT_SYSCALL_DEFINE2()
4645 #define CHECK_OFFSET(field) \ in siginfo_buildtime_checks() argument
4646 BUILD_BUG_ON(offsetof(siginfo_t, field) != offsetof(kernel_siginfo_t, field)) in siginfo_buildtime_checks()
4722 * kdb_send_sig - Allows kdb to send signals without exposing
4731 if (!spin_trylock(&t->sighand->siglock)) { in kdb_send_sig()
4740 spin_unlock(&t->sighand->siglock); in kdb_send_sig()
4750 spin_unlock(&t->sighand->siglock); in kdb_send_sig()
4753 sig, t->pid); in kdb_send_sig()
4755 kdb_printf("Signal %d is sent to process %d.\n", sig, t->pid); in kdb_send_sig()