13 #include <linux/slab.h>
14 #include <linux/export.h>
16 #include <linux/sched.h>
18 #include <linux/tty.h>
19 #include <linux/binfmts.h>
23 #include <linux/ptrace.h>
24 #include <linux/signal.h>
25 #include <linux/signalfd.h>
28 #include <linux/capability.h>
34 #define CREATE_TRACE_POINTS
37 #include <asm/param.h>
38 #include <asm/uaccess.h>
39 #include <asm/unistd.h>
40 #include <asm/siginfo.h>
41 #include <asm/cacheflush.h>
54 return t->
sighand->action[sig - 1].sa.sa_handler;
57 static int sig_handler_ignored(
void __user *handler,
int sig)
74 return sig_handler_ignored(handler, sig);
77 static int sig_ignored(
struct task_struct *t,
int sig,
bool force)
87 if (!sig_task_ignored(t, sig, force))
108 ready |= signal->
sig[i] &~ blocked->
sig[i];
111 case 4: ready = signal->
sig[3] &~ blocked->
sig[3];
112 ready |= signal->
sig[2] &~ blocked->
sig[2];
113 ready |= signal->
sig[1] &~ blocked->
sig[1];
114 ready |= signal->
sig[0] &~ blocked->
sig[0];
117 case 2: ready = signal->
sig[1] &~ blocked->
sig[1];
118 ready |= signal->
sig[0] &~ blocked->
sig[0];
121 case 1: ready = signal->
sig[0] &~ blocked->
sig[0];
126 #define PENDING(p,b) has_pending_signals(&(p)->signal, (b))
128 static int recalc_sigpending_tsk(
struct task_struct *t)
150 if (recalc_sigpending_tsk(t))
163 #define SYNCHRONOUS_MASK \
164 (sigmask(SIGSEGV) | sigmask(SIGBUS) | sigmask(SIGILL) | \
165 sigmask(SIGTRAP) | sigmask(SIGFPE) | sigmask(SIGSYS))
169 unsigned long i, *
s, *
m,
x;
213 static inline void print_dropped_signal(
int sig)
217 if (!print_fatal_signals)
223 printk(
KERN_INFO "%s/%d: reached RLIMIT_SIGPENDING, dropped signal %d\n",
254 task->
jobctl &= ~JOBCTL_STOP_SIGMASK;
370 if (override_rlimit ||
375 print_dropped_signal(sig);
382 INIT_LIST_HEAD(&q->
list);
390 static void __sigqueue_free(
struct sigqueue *q)
403 sigemptyset(&queue->
signal);
404 while (!list_empty(&queue->
list)) {
406 list_del_init(&q->
list);
427 spin_unlock_irqrestore(&t->
sighand->siglock, flags);
430 static void __flush_itimer_signals(
struct sigpending *pending)
436 sigemptyset(&retain);
442 sigaddset(&retain, sig);
444 sigdelset(&signal, sig);
445 list_del_init(&q->
list);
450 sigorsets(&pending->
signal, &signal, &retain);
459 __flush_itimer_signals(&tsk->
pending);
460 __flush_itimer_signals(&tsk->
signal->shared_pending);
461 spin_unlock_irqrestore(&tsk->
sighand->siglock, flags);
468 for (i = 0; i <
_NSIG; ++
i)
483 for (i =
_NSIG ; i != 0 ; i--) {
484 if (force_default || ka->
sa.sa_handler !=
SIG_IGN)
487 sigemptyset(&ka->
sa.sa_mask);
494 void __user *handler = tsk->
sighand->action[sig-1].sa.sa_handler;
495 if (is_global_init(tsk))
521 spin_unlock_irqrestore(&
current->sighand->siglock, flags);
535 spin_unlock_irqrestore(&
current->sighand->siglock, flags);
554 sigdelset(&list->
signal, sig);
558 list_del_init(&first->
list);
559 copy_siginfo(info, &first->
info);
560 __sigqueue_free(first);
590 collect_signal(sig, pending, info);
609 signr = __dequeue_signal(&tsk->
pending, mask, info);
611 signr = __dequeue_signal(&tsk->
signal->shared_pending,
629 if (!hrtimer_is_queued(tmr) &&
630 tsk->
signal->it_real_incr.tv64 != 0) {
632 tsk->
signal->it_real_incr);
664 spin_unlock(&tsk->
sighand->siglock);
666 spin_lock(&tsk->
sighand->siglock);
716 sigandsets(&m, mask, &s->
signal);
717 if (sigisemptyset(&m))
723 list_del_init(&q->
list);
735 static int rm_from_queue(
unsigned long mask,
struct sigpending *s)
739 if (!sigtestsetmask(&s->
signal, mask))
742 sigdelsetmask(&s->
signal, mask);
746 list_del_init(&q->
list);
753 static inline int is_si_special(
const struct siginfo *info)
758 static inline bool si_fromuser(
const struct siginfo *info)
772 if (uid_eq(cred->
euid, tcred->
suid) ||
773 uid_eq(cred->
euid, tcred->
uid) ||
774 uid_eq(cred->
uid, tcred->
suid) ||
775 uid_eq(cred->
uid, tcred->
uid))
788 static int check_kill_permission(
int sig,
struct siginfo *info,
794 if (!valid_signal(sig))
797 if (!si_fromuser(info))
804 if (!same_thread_group(
current, t) &&
805 !kill_ok_by_cred(t)) {
808 sid = task_session(t);
813 if (!sid || sid == task_session(
current))
840 static void ptrace_trap_notify(
struct task_struct *t)
859 static int prepare_signal(
int sig,
struct task_struct *
p,
bool force)
890 ptrace_trap_notify(t);
919 return !sig_ignored(p, sig, force);
930 static inline int wants_signal(
int sig,
struct task_struct *p)
940 return task_curr(p) || !signal_pending(p);
954 if (wants_signal(sig, p))
956 else if (!group || thread_group_empty(p))
967 while (!wants_signal(sig, t)) {
1024 #ifdef CONFIG_USER_NS
1025 static inline void userns_fixup_signal_uid(
struct siginfo *info,
struct task_struct *t)
1039 static inline void userns_fixup_signal_uid(
struct siginfo *info,
struct task_struct *t)
1046 int group,
int from_ancestor_ns)
1050 int override_rlimit;
1056 if (!prepare_signal(sig, t,
1067 if (legacy_queue(pending, sig))
1088 override_rlimit = (is_si_special(info) || info->
si_code >= 0);
1090 override_rlimit = 0;
1096 switch ((
unsigned long) info) {
1113 copy_siginfo(&q->
info, info);
1114 if (from_ancestor_ns)
1119 userns_fixup_signal_uid(&q->
info, t);
1121 }
else if (!is_si_special(info)) {
1141 signalfd_notify(t, sig);
1142 sigaddset(&pending->
signal, sig);
1143 complete_signal(sig, t, group);
1145 trace_signal_generate(sig, info, t, group,
result);
1152 int from_ancestor_ns = 0;
1154 #ifdef CONFIG_PID_NS
1155 from_ancestor_ns = si_fromuser(info) &&
1159 return __send_signal(sig, info, t, group, from_ancestor_ns);
1162 static void print_fatal_signal(
struct pt_regs *
regs,
int signr)
1164 printk(
"%s/%d: potentially unexpected fatal signal %d.\n",
1167 #if defined(__i386__) && !defined(__arch_um__)
1168 printk(
"code at %08lx: ", regs->ip);
1171 for (i = 0; i < 16; i++) {
1174 if (
get_user(insn, (
unsigned char *)(regs->ip + i)))
1186 static int __init setup_print_fatal_signals(
char *
str)
1193 __setup(
"print-fatal-signals=", setup_print_fatal_signals);
1198 return send_signal(sig, info, p, 1);
1204 return send_signal(sig, info, t, 0);
1210 unsigned long flags;
1213 if (lock_task_sighand(p, &flags)) {
1214 ret = send_signal(sig, info, p, group);
1215 unlock_task_sighand(p, &flags);
1235 unsigned long int flags;
1240 action = &t->
sighand->action[sig-1];
1241 ignored = action->
sa.sa_handler ==
SIG_IGN;
1243 if (blocked || ignored) {
1252 ret = specific_send_sig_info(sig, info, t);
1253 spin_unlock_irqrestore(&t->
sighand->siglock, flags);
1266 p->
signal->group_stop_count = 0;
1283 unsigned long *flags)
1302 spin_unlock(&sighand->
siglock);
1318 ret = check_kill_permission(sig, info, p);
1344 return success ? 0 :
retval;
1380 static int kill_as_cred_perm(
const struct cred *cred,
1384 if (!uid_eq(cred->
euid, pcred->
suid) && !uid_eq(cred->
euid, pcred->
uid) &&
1385 !uid_eq(cred->
uid, pcred->
suid) && !uid_eq(cred->
uid, pcred->
uid))
1392 const struct cred *cred,
u32 secid)
1396 unsigned long flags;
1398 if (!valid_signal(sig))
1407 if (si_fromuser(info) && !kill_as_cred_perm(cred, p)) {
1416 if (lock_task_sighand(p, &flags)) {
1417 ret = __send_signal(sig, info, p, 1, 0);
1418 unlock_task_sighand(p, &flags);
1435 static int kill_something_info(
int sig,
struct siginfo *info,
pid_t pid)
1455 if (task_pid_vnr(p) > 1 &&
1456 !same_thread_group(p,
current)) {
1480 if (!valid_signal(sig))
1486 #define __si_special(priv) \
1487 ((priv) ? SEND_SIG_PRIV : SEND_SIG_NOINFO)
1511 unsigned long flags;
1514 spin_unlock_irqrestore(&p->
sighand->siglock, flags);
1559 unsigned long flags;
1574 if (!list_empty(&q->
list))
1576 spin_unlock_irqrestore(lock, flags);
1586 unsigned long flags;
1592 if (!
likely(lock_task_sighand(t, &flags)))
1597 if (!prepare_signal(sig, t,
false))
1607 q->
info.si_overrun++;
1611 q->
info.si_overrun = 0;
1613 signalfd_notify(t, sig);
1616 sigaddset(&pending->
signal, sig);
1617 complete_signal(sig, t, group);
1620 trace_signal_generate(sig, &q->
info, t, group, result);
1621 unlock_task_sighand(t, &flags);
1636 unsigned long flags;
1638 bool autoreap =
false;
1646 (tsk->
group_leader != tsk || !thread_group_empty(tsk)));
1689 psig = tsk->
parent->sighand;
1713 if (valid_signal(sig) && sig)
1716 spin_unlock_irqrestore(&psig->
siglock, flags);
1734 static void do_notify_parent_cldstop(
struct task_struct *tsk,
1735 bool for_ptracer,
int why)
1738 unsigned long flags;
1755 info.si_pid = task_pid_nr_ns(tsk, parent->
nsproxy->pid_ns);
1768 info.si_status = tsk->
signal->group_exit_code & 0x7f;
1786 spin_unlock_irqrestore(&sighand->
siglock, flags);
1789 static inline int may_ptrace_stop(
void)
1813 static int sigkill_pending(
struct task_struct *tsk)
1830 static void ptrace_stop(
int exit_code,
int why,
int clear_code,
siginfo_t *info)
1834 bool gstop_done =
false;
1848 spin_unlock_irq(&
current->sighand->siglock);
1850 spin_lock_irq(&
current->sighand->siglock);
1865 current->exit_code = exit_code;
1875 gstop_done = task_participate_group_stop(
current);
1885 spin_unlock_irq(&
current->sighand->siglock);
1887 if (may_ptrace_stop()) {
1898 do_notify_parent_cldstop(
current,
true, why);
1899 if (gstop_done && ptrace_reparented(
current))
1900 do_notify_parent_cldstop(
current,
false, why);
1924 do_notify_parent_cldstop(
current,
false, why);
1944 spin_lock_irq(&
current->sighand->siglock);
1955 recalc_sigpending_tsk(
current);
1958 static void ptrace_do_notify(
int signr,
int exit_code,
int why)
1962 memset(&info, 0,
sizeof info);
1965 info.si_pid = task_pid_vnr(
current);
1969 ptrace_stop(exit_code, why, 1, &info);
1978 spin_lock_irq(&
current->sighand->siglock);
1980 spin_unlock_irq(&
current->sighand->siglock);
2005 static bool do_signal_stop(
int signr)
2048 t = next_thread(t)) {
2060 ptrace_trap_notify(t);
2073 if (task_participate_group_stop(
current))
2077 spin_unlock_irq(&
current->sighand->siglock);
2090 do_notify_parent_cldstop(
current,
false, notify);
2122 static void do_jobctl_trap(
void)
2141 static int ptrace_signal(
int signr,
siginfo_t *info,
2175 info->si_pid = task_pid_vnr(
current->parent);
2183 specific_send_sig_info(signr, info,
current);
2191 struct pt_regs *regs,
void *cookie)
2212 spin_lock_irq(&sighand->
siglock);
2228 spin_unlock_irq(&sighand->
siglock);
2239 do_notify_parent_cldstop(
current,
false, why);
2241 if (ptrace_reparented(
current->group_leader))
2242 do_notify_parent_cldstop(
current->group_leader,
2258 spin_unlock_irq(&sighand->
siglock);
2268 signr = ptrace_signal(signr, info,
2274 ka = &sighand->
action[signr-1];
2277 trace_signal_deliver(signr, info, ka);
2323 spin_unlock_irq(&sighand->
siglock);
2330 spin_lock_irq(&sighand->
siglock);
2345 spin_unlock_irq(&sighand->
siglock);
2354 print_fatal_signal(regs, info->
si_signo);
2372 spin_unlock_irq(&sighand->
siglock);
2390 struct pt_regs *regs,
int stepping)
2398 clear_restore_sigmask();
2400 sigorsets(&blocked, &
current->blocked, &ka->
sa.sa_mask);
2402 sigaddset(&blocked, sig);
2404 tracehook_signal_handler(sig, info, ka, regs, stepping);
2417 sigandsets(&retarget, &tsk->
signal->shared_pending.signal, which);
2418 if (sigisemptyset(&retarget))
2426 if (!has_pending_signals(&retarget, &t->
blocked))
2429 sigandsets(&retarget, &retarget, &t->
blocked);
2431 if (!signal_pending(t))
2434 if (sigisemptyset(&retarget))
2448 threadgroup_change_begin(tsk);
2450 if (thread_group_empty(tsk) || signal_group_exit(tsk->
signal)) {
2452 threadgroup_change_end(tsk);
2456 spin_lock_irq(&tsk->
sighand->siglock);
2463 threadgroup_change_end(tsk);
2465 if (!signal_pending(tsk))
2469 signotset(&unblocked);
2470 retarget_shared_pending(tsk, &unblocked);
2473 task_participate_group_stop(tsk))
2476 spin_unlock_irq(&tsk->
sighand->siglock);
2484 do_notify_parent_cldstop(tsk,
false, group_stop);
2510 return restart->
fn(restart);
2520 if (signal_pending(tsk) && !thread_group_empty(tsk)) {
2523 sigandnsets(&newblocked, newset, &
current->blocked);
2524 retarget_shared_pending(tsk, &newblocked);
2541 spin_lock_irq(&tsk->
sighand->siglock);
2542 __set_task_blocked(tsk, newset);
2543 spin_unlock_irq(&tsk->
sighand->siglock);
2550 spin_lock_irq(&tsk->
sighand->siglock);
2551 __set_task_blocked(tsk, newset);
2552 spin_unlock_irq(&tsk->
sighand->siglock);
2574 sigorsets(&newset, &tsk->
blocked,
set);
2577 sigandnsets(&newset, &tsk->
blocked,
set);
2598 sigset_t __user *, oset,
size_t, sigsetsize)
2604 if (sigsetsize !=
sizeof(
sigset_t))
2635 spin_lock_irq(&
current->sighand->siglock);
2636 sigorsets(&pending, &
current->pending.signal,
2637 &
current->signal->shared_pending.signal);
2638 spin_unlock_irq(&
current->sighand->siglock);
2641 sigandsets(&pending, &
current->blocked, &pending);
2662 #ifndef HAVE_ARCH_COPY_SIGINFO_TO_USER
2687 err |=
__put_user(from->si_pid, &to->si_pid);
2688 err |=
__put_user(from->si_uid, &to->si_uid);
2691 err |=
__put_user(from->si_tid, &to->si_tid);
2692 err |=
__put_user(from->si_overrun, &to->si_overrun);
2693 err |=
__put_user(from->si_ptr, &to->si_ptr);
2696 err |=
__put_user(from->si_band, &to->si_band);
2700 err |=
__put_user(from->si_addr, &to->si_addr);
2701 #ifdef __ARCH_SI_TRAPNO
2702 err |=
__put_user(from->si_trapno, &to->si_trapno);
2704 #ifdef BUS_MCEERR_AO
2710 err |=
__put_user(from->si_addr_lsb, &to->si_addr_lsb);
2714 err |=
__put_user(from->si_pid, &to->si_pid);
2715 err |=
__put_user(from->si_uid, &to->si_uid);
2716 err |=
__put_user(from->si_status, &to->si_status);
2717 err |=
__put_user(from->si_utime, &to->si_utime);
2718 err |=
__put_user(from->si_stime, &to->si_stime);
2722 err |=
__put_user(from->si_pid, &to->si_pid);
2723 err |=
__put_user(from->si_uid, &to->si_uid);
2724 err |=
__put_user(from->si_ptr, &to->si_ptr);
2726 #ifdef __ARCH_SIGSYS
2728 err |=
__put_user(from->si_call_addr, &to->si_call_addr);
2729 err |=
__put_user(from->si_syscall, &to->si_syscall);
2730 err |=
__put_user(from->si_arch, &to->si_arch);
2734 err |=
__put_user(from->si_pid, &to->si_pid);
2735 err |=
__put_user(from->si_uid, &to->si_uid);
2758 if (!timespec_valid(ts))
2775 spin_lock_irq(&tsk->
sighand->siglock);
2777 if (!sig && timeout) {
2787 spin_unlock_irq(&tsk->
sighand->siglock);
2791 spin_lock_irq(&tsk->
sighand->siglock);
2796 spin_unlock_irq(&tsk->
sighand->siglock);
2821 if (sigsetsize !=
sizeof(
sigset_t))
2834 if (ret > 0 && uinfo) {
2854 info.si_pid = task_tgid_vnr(
current);
2857 return kill_something_info(sig, &info, pid);
2868 if (p && (tgid <= 0 || task_tgid_vnr(p) == tgid)) {
2869 error = check_kill_permission(sig, info, p);
2874 if (!error && sig) {
2890 static int do_tkill(
pid_t tgid,
pid_t pid,
int sig)
2897 info.si_pid = task_tgid_vnr(
current);
2900 return do_send_specific(tgid, pid, sig, &info);
2916 if (pid <= 0 || tgid <= 0)
2919 return do_tkill(tgid, pid, sig);
2935 return do_tkill(0, pid, sig);
2969 if (pid <= 0 || tgid <= 0)
2982 return do_send_specific(tgid, pid, sig, info);
3005 k = &t->
sighand->action[sig-1];
3007 spin_lock_irq(&
current->sighand->siglock);
3012 sigdelsetmask(&act->
sa.sa_mask,
3026 if (sig_handler_ignored(
sig_handler(t, sig), sig)) {
3028 sigaddset(&mask, sig);
3029 rm_from_queue_full(&mask, &t->
signal->shared_pending);
3031 rm_from_queue_full(&mask, &t->
pending);
3037 spin_unlock_irq(&
current->sighand->siglock);
3066 if (on_sig_stack(sp))
3090 current->sas_ss_size = ss_size;
3107 #ifdef __ARCH_WANT_SYS_SIGPENDING
3120 #ifdef __ARCH_WANT_SYS_SIGPROCMASK
3137 old_set =
current->blocked.sig[0];
3144 new_blocked =
current->blocked;
3148 sigaddsetmask(&new_blocked, new_set);
3151 sigdelsetmask(&new_blocked, new_set);
3154 new_blocked.
sig[0] = new_set;
3172 #ifdef __ARCH_WANT_SYS_RT_SIGACTION
3189 if (sigsetsize !=
sizeof(
sigset_t))
3208 #ifdef __ARCH_WANT_SYS_SGETMASK
3216 return current->blocked.sig[0];
3221 int old =
current->blocked.sig[0];
3230 #ifdef __ARCH_WANT_SYS_SIGNAL
3239 new_sa.sa.sa_handler = handler;
3241 sigemptyset(&new_sa.sa.sa_mask);
3245 return ret ? ret : (
unsigned long)old_sa.sa.sa_handler;
3249 #ifdef __ARCH_WANT_SYS_PAUSE
3253 while (!signal_pending(
current)) {
3269 set_restore_sigmask();
3273 #ifdef __ARCH_WANT_SYS_RT_SIGSUSPEND
3285 if (sigsetsize !=
sizeof(
sigset_t))
3304 #ifdef CONFIG_KGDB_KDB
3317 if (!spin_trylock(&t->
sighand->siglock)) {
3319 "The sigmask lock is held somewhere else in "
3320 "kernel, try again later\n");
3323 spin_unlock(&t->
sighand->siglock);
3324 new_t = kdb_prev_t !=
t;
3327 kdb_printf(
"Process is not RUNNING, sending a signal from "
3328 "kdb risks deadlock\n"
3329 "on the run queue locks. "
3330 "The signal has _not_ been sent.\n"
3331 "Reissue the kill command if you want to risk "
3337 kdb_printf(
"Fail to deliver Signal %d to process %d.\n",
3340 kdb_printf(
"Signal %d is sent to process %d.\n", sig, t->
pid);