1
2
3
4
5
6
7
8
9
10
11
12
13#include <linux/slab.h>
14#include <linux/module.h>
15#include <linux/init.h>
16#include <linux/sched.h>
17#include <linux/fs.h>
18#include <linux/tty.h>
19#include <linux/binfmts.h>
20#include <linux/security.h>
21#include <linux/syscalls.h>
22#include <linux/ptrace.h>
23#include <linux/signal.h>
24#include <linux/signalfd.h>
25#include <linux/tracehook.h>
26#include <linux/capability.h>
27#include <linux/freezer.h>
28#include <linux/pid_namespace.h>
29#include <linux/nsproxy.h>
30#include <trace/events/sched.h>
31
32#include <asm/param.h>
33#include <asm/uaccess.h>
34#include <asm/unistd.h>
35#include <asm/siginfo.h>
36#include "audit.h"
37
38
39
40
41
42static struct kmem_cache *sigqueue_cachep;
43
44static void __user *sig_handler(struct task_struct *t, int sig)
45{
46 return t->sighand->action[sig - 1].sa.sa_handler;
47}
48
49static int sig_handler_ignored(void __user *handler, int sig)
50{
51
52 return handler == SIG_IGN ||
53 (handler == SIG_DFL && sig_kernel_ignore(sig));
54}
55
56static int sig_task_ignored(struct task_struct *t, int sig,
57 int from_ancestor_ns)
58{
59 void __user *handler;
60
61 handler = sig_handler(t, sig);
62
63 if (unlikely(t->signal->flags & SIGNAL_UNKILLABLE) &&
64 handler == SIG_DFL && !from_ancestor_ns)
65 return 1;
66
67 return sig_handler_ignored(handler, sig);
68}
69
70static int sig_ignored(struct task_struct *t, int sig, int from_ancestor_ns)
71{
72
73
74
75
76
77 if (sigismember(&t->blocked, sig) || sigismember(&t->real_blocked, sig))
78 return 0;
79
80 if (!sig_task_ignored(t, sig, from_ancestor_ns))
81 return 0;
82
83
84
85
86 return !tracehook_consider_ignored_signal(t, sig);
87}
88
89
90
91
92
93static inline int has_pending_signals(sigset_t *signal, sigset_t *blocked)
94{
95 unsigned long ready;
96 long i;
97
98 switch (_NSIG_WORDS) {
99 default:
100 for (i = _NSIG_WORDS, ready = 0; --i >= 0 ;)
101 ready |= signal->sig[i] &~ blocked->sig[i];
102 break;
103
104 case 4: ready = signal->sig[3] &~ blocked->sig[3];
105 ready |= signal->sig[2] &~ blocked->sig[2];
106 ready |= signal->sig[1] &~ blocked->sig[1];
107 ready |= signal->sig[0] &~ blocked->sig[0];
108 break;
109
110 case 2: ready = signal->sig[1] &~ blocked->sig[1];
111 ready |= signal->sig[0] &~ blocked->sig[0];
112 break;
113
114 case 1: ready = signal->sig[0] &~ blocked->sig[0];
115 }
116 return ready != 0;
117}
118
119#define PENDING(p,b) has_pending_signals(&(p)->signal, (b))
120
121static int recalc_sigpending_tsk(struct task_struct *t)
122{
123 if (t->signal->group_stop_count > 0 ||
124 PENDING(&t->pending, &t->blocked) ||
125 PENDING(&t->signal->shared_pending, &t->blocked)) {
126 set_tsk_thread_flag(t, TIF_SIGPENDING);
127 return 1;
128 }
129
130
131
132
133
134 return 0;
135}
136
137
138
139
140
141void recalc_sigpending_and_wake(struct task_struct *t)
142{
143 if (recalc_sigpending_tsk(t))
144 signal_wake_up(t, 0);
145}
146
147void recalc_sigpending(void)
148{
149 if (unlikely(tracehook_force_sigpending()))
150 set_thread_flag(TIF_SIGPENDING);
151 else if (!recalc_sigpending_tsk(current) && !freezing(current))
152 clear_thread_flag(TIF_SIGPENDING);
153
154}
155
156
157
158int next_signal(struct sigpending *pending, sigset_t *mask)
159{
160 unsigned long i, *s, *m, x;
161 int sig = 0;
162
163 s = pending->signal.sig;
164 m = mask->sig;
165 switch (_NSIG_WORDS) {
166 default:
167 for (i = 0; i < _NSIG_WORDS; ++i, ++s, ++m)
168 if ((x = *s &~ *m) != 0) {
169 sig = ffz(~x) + i*_NSIG_BPW + 1;
170 break;
171 }
172 break;
173
174 case 2: if ((x = s[0] &~ m[0]) != 0)
175 sig = 1;
176 else if ((x = s[1] &~ m[1]) != 0)
177 sig = _NSIG_BPW + 1;
178 else
179 break;
180 sig += ffz(~x);
181 break;
182
183 case 1: if ((x = *s &~ *m) != 0)
184 sig = ffz(~x) + 1;
185 break;
186 }
187
188 return sig;
189}
190
191
192
193
194
195
196static struct sigqueue *__sigqueue_alloc(struct task_struct *t, gfp_t flags,
197 int override_rlimit)
198{
199 struct sigqueue *q = NULL;
200 struct user_struct *user;
201
202
203
204
205
206
207
208 user = get_uid(__task_cred(t)->user);
209 atomic_inc(&user->sigpending);
210 if (override_rlimit ||
211 atomic_read(&user->sigpending) <=
212 t->signal->rlim[RLIMIT_SIGPENDING].rlim_cur)
213 q = kmem_cache_alloc(sigqueue_cachep, flags);
214 if (unlikely(q == NULL)) {
215 atomic_dec(&user->sigpending);
216 free_uid(user);
217 } else {
218 INIT_LIST_HEAD(&q->list);
219 q->flags = 0;
220 q->user = user;
221 }
222
223 return q;
224}
225
226static void __sigqueue_free(struct sigqueue *q)
227{
228 if (q->flags & SIGQUEUE_PREALLOC)
229 return;
230 atomic_dec(&q->user->sigpending);
231 free_uid(q->user);
232 kmem_cache_free(sigqueue_cachep, q);
233}
234
235void flush_sigqueue(struct sigpending *queue)
236{
237 struct sigqueue *q;
238
239 sigemptyset(&queue->signal);
240 while (!list_empty(&queue->list)) {
241 q = list_entry(queue->list.next, struct sigqueue , list);
242 list_del_init(&q->list);
243 __sigqueue_free(q);
244 }
245}
246
247
248
249
250void __flush_signals(struct task_struct *t)
251{
252 clear_tsk_thread_flag(t, TIF_SIGPENDING);
253 flush_sigqueue(&t->pending);
254 flush_sigqueue(&t->signal->shared_pending);
255}
256
257void flush_signals(struct task_struct *t)
258{
259 unsigned long flags;
260
261 spin_lock_irqsave(&t->sighand->siglock, flags);
262 __flush_signals(t);
263 spin_unlock_irqrestore(&t->sighand->siglock, flags);
264}
265
266static void __flush_itimer_signals(struct sigpending *pending)
267{
268 sigset_t signal, retain;
269 struct sigqueue *q, *n;
270
271 signal = pending->signal;
272 sigemptyset(&retain);
273
274 list_for_each_entry_safe(q, n, &pending->list, list) {
275 int sig = q->info.si_signo;
276
277 if (likely(q->info.si_code != SI_TIMER)) {
278 sigaddset(&retain, sig);
279 } else {
280 sigdelset(&signal, sig);
281 list_del_init(&q->list);
282 __sigqueue_free(q);
283 }
284 }
285
286 sigorsets(&pending->signal, &signal, &retain);
287}
288
289void flush_itimer_signals(void)
290{
291 struct task_struct *tsk = current;
292 unsigned long flags;
293
294 spin_lock_irqsave(&tsk->sighand->siglock, flags);
295 __flush_itimer_signals(&tsk->pending);
296 __flush_itimer_signals(&tsk->signal->shared_pending);
297 spin_unlock_irqrestore(&tsk->sighand->siglock, flags);
298}
299
300void ignore_signals(struct task_struct *t)
301{
302 int i;
303
304 for (i = 0; i < _NSIG; ++i)
305 t->sighand->action[i].sa.sa_handler = SIG_IGN;
306
307 flush_signals(t);
308}
309
310
311
312
313
314void
315flush_signal_handlers(struct task_struct *t, int force_default)
316{
317 int i;
318 struct k_sigaction *ka = &t->sighand->action[0];
319 for (i = _NSIG ; i != 0 ; i--) {
320 if (force_default || ka->sa.sa_handler != SIG_IGN)
321 ka->sa.sa_handler = SIG_DFL;
322 ka->sa.sa_flags = 0;
323 sigemptyset(&ka->sa.sa_mask);
324 ka++;
325 }
326}
327
328int unhandled_signal(struct task_struct *tsk, int sig)
329{
330 void __user *handler = tsk->sighand->action[sig-1].sa.sa_handler;
331 if (is_global_init(tsk))
332 return 1;
333 if (handler != SIG_IGN && handler != SIG_DFL)
334 return 0;
335 return !tracehook_consider_fatal_signal(tsk, sig);
336}
337
338
339
340
341
342
343
344
345
346
347void
348block_all_signals(int (*notifier)(void *priv), void *priv, sigset_t *mask)
349{
350 unsigned long flags;
351
352 spin_lock_irqsave(¤t->sighand->siglock, flags);
353 current->notifier_mask = mask;
354 current->notifier_data = priv;
355 current->notifier = notifier;
356 spin_unlock_irqrestore(¤t->sighand->siglock, flags);
357}
358
359
360
361void
362unblock_all_signals(void)
363{
364 unsigned long flags;
365
366 spin_lock_irqsave(¤t->sighand->siglock, flags);
367 current->notifier = NULL;
368 current->notifier_data = NULL;
369 recalc_sigpending();
370 spin_unlock_irqrestore(¤t->sighand->siglock, flags);
371}
372
373static void collect_signal(int sig, struct sigpending *list, siginfo_t *info)
374{
375 struct sigqueue *q, *first = NULL;
376
377
378
379
380
381 list_for_each_entry(q, &list->list, list) {
382 if (q->info.si_signo == sig) {
383 if (first)
384 goto still_pending;
385 first = q;
386 }
387 }
388
389 sigdelset(&list->signal, sig);
390
391 if (first) {
392still_pending:
393 list_del_init(&first->list);
394 copy_siginfo(info, &first->info);
395 __sigqueue_free(first);
396 } else {
397
398
399
400
401 info->si_signo = sig;
402 info->si_errno = 0;
403 info->si_code = 0;
404 info->si_pid = 0;
405 info->si_uid = 0;
406 }
407}
408
409static int __dequeue_signal(struct sigpending *pending, sigset_t *mask,
410 siginfo_t *info)
411{
412 int sig = next_signal(pending, mask);
413
414 if (sig) {
415 if (current->notifier) {
416 if (sigismember(current->notifier_mask, sig)) {
417 if (!(current->notifier)(current->notifier_data)) {
418 clear_thread_flag(TIF_SIGPENDING);
419 return 0;
420 }
421 }
422 }
423
424 collect_signal(sig, pending, info);
425 }
426
427 return sig;
428}
429
430
431
432
433
434
435
436int dequeue_signal(struct task_struct *tsk, sigset_t *mask, siginfo_t *info)
437{
438 int signr;
439
440
441
442
443 signr = __dequeue_signal(&tsk->pending, mask, info);
444 if (!signr) {
445 signr = __dequeue_signal(&tsk->signal->shared_pending,
446 mask, info);
447
448
449
450
451
452
453
454
455
456
457
458
459
460 if (unlikely(signr == SIGALRM)) {
461 struct hrtimer *tmr = &tsk->signal->real_timer;
462
463 if (!hrtimer_is_queued(tmr) &&
464 tsk->signal->it_real_incr.tv64 != 0) {
465 hrtimer_forward(tmr, tmr->base->get_time(),
466 tsk->signal->it_real_incr);
467 hrtimer_restart(tmr);
468 }
469 }
470 }
471
472 recalc_sigpending();
473 if (!signr)
474 return 0;
475
476 if (unlikely(sig_kernel_stop(signr))) {
477
478
479
480
481
482
483
484
485
486
487
488
489 tsk->signal->flags |= SIGNAL_STOP_DEQUEUED;
490 }
491 if ((info->si_code & __SI_MASK) == __SI_TIMER && info->si_sys_private) {
492
493
494
495
496
497
498 spin_unlock(&tsk->sighand->siglock);
499 do_schedule_next_timer(info);
500 spin_lock(&tsk->sighand->siglock);
501 }
502 return signr;
503}
504
505
506
507
508
509
510
511
512
513
514
515
516void signal_wake_up(struct task_struct *t, int resume)
517{
518 unsigned int mask;
519
520 set_tsk_thread_flag(t, TIF_SIGPENDING);
521
522
523
524
525
526
527
528
529 mask = TASK_INTERRUPTIBLE;
530 if (resume)
531 mask |= TASK_WAKEKILL;
532 if (!wake_up_state(t, mask))
533 kick_process(t);
534}
535
536
537
538
539
540
541
542
543
544
545static int rm_from_queue_full(sigset_t *mask, struct sigpending *s)
546{
547 struct sigqueue *q, *n;
548 sigset_t m;
549
550 sigandsets(&m, mask, &s->signal);
551 if (sigisemptyset(&m))
552 return 0;
553
554 signandsets(&s->signal, &s->signal, mask);
555 list_for_each_entry_safe(q, n, &s->list, list) {
556 if (sigismember(mask, q->info.si_signo)) {
557 list_del_init(&q->list);
558 __sigqueue_free(q);
559 }
560 }
561 return 1;
562}
563
564
565
566
567
568
569static int rm_from_queue(unsigned long mask, struct sigpending *s)
570{
571 struct sigqueue *q, *n;
572
573 if (!sigtestsetmask(&s->signal, mask))
574 return 0;
575
576 sigdelsetmask(&s->signal, mask);
577 list_for_each_entry_safe(q, n, &s->list, list) {
578 if (q->info.si_signo < SIGRTMIN &&
579 (mask & sigmask(q->info.si_signo))) {
580 list_del_init(&q->list);
581 __sigqueue_free(q);
582 }
583 }
584 return 1;
585}
586
587
588
589
590
591static int check_kill_permission(int sig, struct siginfo *info,
592 struct task_struct *t)
593{
594 const struct cred *cred = current_cred(), *tcred;
595 struct pid *sid;
596 int error;
597
598 if (!valid_signal(sig))
599 return -EINVAL;
600
601 if (info != SEND_SIG_NOINFO && (is_si_special(info) || SI_FROMKERNEL(info)))
602 return 0;
603
604 error = audit_signal_info(sig, t);
605 if (error)
606 return error;
607
608 tcred = __task_cred(t);
609 if ((cred->euid ^ tcred->suid) &&
610 (cred->euid ^ tcred->uid) &&
611 (cred->uid ^ tcred->suid) &&
612 (cred->uid ^ tcred->uid) &&
613 !capable(CAP_KILL)) {
614 switch (sig) {
615 case SIGCONT:
616 sid = task_session(t);
617
618
619
620
621 if (!sid || sid == task_session(current))
622 break;
623 default:
624 return -EPERM;
625 }
626 }
627
628 return security_task_kill(t, info, sig, 0);
629}
630
631
632
633
634
635
636
637
638
639
640
641static int prepare_signal(int sig, struct task_struct *p, int from_ancestor_ns)
642{
643 struct signal_struct *signal = p->signal;
644 struct task_struct *t;
645
646 if (unlikely(signal->flags & SIGNAL_GROUP_EXIT)) {
647
648
649
650 } else if (sig_kernel_stop(sig)) {
651
652
653
654 rm_from_queue(sigmask(SIGCONT), &signal->shared_pending);
655 t = p;
656 do {
657 rm_from_queue(sigmask(SIGCONT), &t->pending);
658 } while_each_thread(p, t);
659 } else if (sig == SIGCONT) {
660 unsigned int why;
661
662
663
664
665 rm_from_queue(SIG_KERNEL_STOP_MASK, &signal->shared_pending);
666 t = p;
667 do {
668 unsigned int state;
669 rm_from_queue(SIG_KERNEL_STOP_MASK, &t->pending);
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684 state = __TASK_STOPPED;
685 if (sig_user_defined(t, SIGCONT) && !sigismember(&t->blocked, SIGCONT)) {
686 set_tsk_thread_flag(t, TIF_SIGPENDING);
687 state |= TASK_INTERRUPTIBLE;
688 }
689 wake_up_state(t, state);
690 } while_each_thread(p, t);
691
692
693
694
695
696
697
698
699
700 why = 0;
701 if (signal->flags & SIGNAL_STOP_STOPPED)
702 why |= SIGNAL_CLD_CONTINUED;
703 else if (signal->group_stop_count)
704 why |= SIGNAL_CLD_STOPPED;
705
706 if (why) {
707
708
709
710
711
712 signal->flags = why | SIGNAL_STOP_CONTINUED;
713 signal->group_stop_count = 0;
714 signal->group_exit_code = 0;
715 } else {
716
717
718
719
720
721 signal->flags &= ~SIGNAL_STOP_DEQUEUED;
722 }
723 }
724
725 return !sig_ignored(p, sig, from_ancestor_ns);
726}
727
728
729
730
731
732
733
734
735
736static inline int wants_signal(int sig, struct task_struct *p)
737{
738 if (sigismember(&p->blocked, sig))
739 return 0;
740 if (p->flags & PF_EXITING)
741 return 0;
742 if (sig == SIGKILL)
743 return 1;
744 if (task_is_stopped_or_traced(p))
745 return 0;
746 return task_curr(p) || !signal_pending(p);
747}
748
749static void complete_signal(int sig, struct task_struct *p, int group)
750{
751 struct signal_struct *signal = p->signal;
752 struct task_struct *t;
753
754
755
756
757
758
759
760 if (wants_signal(sig, p))
761 t = p;
762 else if (!group || thread_group_empty(p))
763
764
765
766
767 return;
768 else {
769
770
771
772 t = signal->curr_target;
773 while (!wants_signal(sig, t)) {
774 t = next_thread(t);
775 if (t == signal->curr_target)
776
777
778
779
780
781 return;
782 }
783 signal->curr_target = t;
784 }
785
786
787
788
789
790 if (sig_fatal(p, sig) &&
791 !(signal->flags & (SIGNAL_UNKILLABLE | SIGNAL_GROUP_EXIT)) &&
792 !sigismember(&t->real_blocked, sig) &&
793 (sig == SIGKILL ||
794 !tracehook_consider_fatal_signal(t, sig))) {
795
796
797
798 if (!sig_kernel_coredump(sig)) {
799
800
801
802
803
804
805 signal->flags = SIGNAL_GROUP_EXIT;
806 signal->group_exit_code = sig;
807 signal->group_stop_count = 0;
808 t = p;
809 do {
810 sigaddset(&t->pending.signal, SIGKILL);
811 signal_wake_up(t, 1);
812 } while_each_thread(p, t);
813 return;
814 }
815 }
816
817
818
819
820
821 signal_wake_up(t, sig == SIGKILL);
822 return;
823}
824
825static inline int legacy_queue(struct sigpending *signals, int sig)
826{
827 return (sig < SIGRTMIN) && sigismember(&signals->signal, sig);
828}
829
830static int __send_signal(int sig, struct siginfo *info, struct task_struct *t,
831 int group, int from_ancestor_ns)
832{
833 struct sigpending *pending;
834 struct sigqueue *q;
835 int override_rlimit;
836
837 trace_sched_signal_send(sig, t);
838
839 assert_spin_locked(&t->sighand->siglock);
840
841 if (!prepare_signal(sig, t, from_ancestor_ns))
842 return 0;
843
844 pending = group ? &t->signal->shared_pending : &t->pending;
845
846
847
848
849
850 if (legacy_queue(pending, sig))
851 return 0;
852
853
854
855
856 if (info == SEND_SIG_FORCED)
857 goto out_set;
858
859
860
861
862
863
864
865
866
867 if (sig < SIGRTMIN)
868 override_rlimit = (is_si_special(info) || info->si_code >= 0);
869 else
870 override_rlimit = 0;
871
872 q = __sigqueue_alloc(t, GFP_ATOMIC | __GFP_NOTRACK_FALSE_POSITIVE,
873 override_rlimit);
874 if (q) {
875 list_add_tail(&q->list, &pending->list);
876 switch ((unsigned long) info) {
877 case (unsigned long) SEND_SIG_NOINFO:
878 q->info.si_signo = sig;
879 q->info.si_errno = 0;
880 q->info.si_code = SI_USER;
881 q->info.si_pid = task_tgid_nr_ns(current,
882 task_active_pid_ns(t));
883 q->info.si_uid = current_uid();
884 break;
885 case (unsigned long) SEND_SIG_PRIV:
886 q->info.si_signo = sig;
887 q->info.si_errno = 0;
888 q->info.si_code = SI_KERNEL;
889 q->info.si_pid = 0;
890 q->info.si_uid = 0;
891 break;
892 default:
893 copy_siginfo(&q->info, info);
894 if (from_ancestor_ns)
895 q->info.si_pid = 0;
896 break;
897 }
898 } else if (!is_si_special(info)) {
899 if (sig >= SIGRTMIN && info->si_code != SI_USER)
900
901
902
903
904 return -EAGAIN;
905 }
906
907out_set:
908 signalfd_notify(t, sig);
909 sigaddset(&pending->signal, sig);
910 complete_signal(sig, t, group);
911 return 0;
912}
913
914static int send_signal(int sig, struct siginfo *info, struct task_struct *t,
915 int group)
916{
917 int from_ancestor_ns = 0;
918
919#ifdef CONFIG_PID_NS
920 if (!is_si_special(info) && SI_FROMUSER(info) &&
921 task_pid_nr_ns(current, task_active_pid_ns(t)) <= 0)
922 from_ancestor_ns = 1;
923#endif
924
925 return __send_signal(sig, info, t, group, from_ancestor_ns);
926}
927
928int print_fatal_signals;
929
930static void print_fatal_signal(struct pt_regs *regs, int signr)
931{
932 printk("%s/%d: potentially unexpected fatal signal %d.\n",
933 current->comm, task_pid_nr(current), signr);
934
935#if defined(__i386__) && !defined(__arch_um__)
936 printk("code at %08lx: ", regs->ip);
937 {
938 int i;
939 for (i = 0; i < 16; i++) {
940 unsigned char insn;
941
942 __get_user(insn, (unsigned char *)(regs->ip + i));
943 printk("%02x ", insn);
944 }
945 }
946#endif
947 printk("\n");
948 preempt_disable();
949 show_regs(regs);
950 preempt_enable();
951}
952
953static int __init setup_print_fatal_signals(char *str)
954{
955 get_option (&str, &print_fatal_signals);
956
957 return 1;
958}
959
960__setup("print-fatal-signals=", setup_print_fatal_signals);
961
962int
963__group_send_sig_info(int sig, struct siginfo *info, struct task_struct *p)
964{
965 return send_signal(sig, info, p, 1);
966}
967
968static int
969specific_send_sig_info(int sig, struct siginfo *info, struct task_struct *t)
970{
971 return send_signal(sig, info, t, 0);
972}
973
974
975
976
977
978
979
980
981
982
983
984
985int
986force_sig_info(int sig, struct siginfo *info, struct task_struct *t)
987{
988 unsigned long int flags;
989 int ret, blocked, ignored;
990 struct k_sigaction *action;
991
992 spin_lock_irqsave(&t->sighand->siglock, flags);
993 action = &t->sighand->action[sig-1];
994 ignored = action->sa.sa_handler == SIG_IGN;
995 blocked = sigismember(&t->blocked, sig);
996 if (blocked || ignored) {
997 action->sa.sa_handler = SIG_DFL;
998 if (blocked) {
999 sigdelset(&t->blocked, sig);
1000 recalc_sigpending_and_wake(t);
1001 }
1002 }
1003 if (action->sa.sa_handler == SIG_DFL)
1004 t->signal->flags &= ~SIGNAL_UNKILLABLE;
1005 ret = specific_send_sig_info(sig, info, t);
1006 spin_unlock_irqrestore(&t->sighand->siglock, flags);
1007
1008 return ret;
1009}
1010
1011void
1012force_sig_specific(int sig, struct task_struct *t)
1013{
1014 force_sig_info(sig, SEND_SIG_FORCED, t);
1015}
1016
1017
1018
1019
1020void zap_other_threads(struct task_struct *p)
1021{
1022 struct task_struct *t;
1023
1024 p->signal->group_stop_count = 0;
1025
1026 for (t = next_thread(p); t != p; t = next_thread(t)) {
1027
1028
1029
1030 if (t->exit_state)
1031 continue;
1032
1033
1034 sigaddset(&t->pending.signal, SIGKILL);
1035 signal_wake_up(t, 1);
1036 }
1037}
1038
1039int __fatal_signal_pending(struct task_struct *tsk)
1040{
1041 return sigismember(&tsk->pending.signal, SIGKILL);
1042}
1043EXPORT_SYMBOL(__fatal_signal_pending);
1044
1045struct sighand_struct *lock_task_sighand(struct task_struct *tsk, unsigned long *flags)
1046{
1047 struct sighand_struct *sighand;
1048
1049 rcu_read_lock();
1050 for (;;) {
1051 sighand = rcu_dereference(tsk->sighand);
1052 if (unlikely(sighand == NULL))
1053 break;
1054
1055 spin_lock_irqsave(&sighand->siglock, *flags);
1056 if (likely(sighand == tsk->sighand))
1057 break;
1058 spin_unlock_irqrestore(&sighand->siglock, *flags);
1059 }
1060 rcu_read_unlock();
1061
1062 return sighand;
1063}
1064
1065
1066
1067
1068
1069int group_send_sig_info(int sig, struct siginfo *info, struct task_struct *p)
1070{
1071 unsigned long flags;
1072 int ret;
1073
1074 ret = check_kill_permission(sig, info, p);
1075
1076 if (!ret && sig) {
1077 ret = -ESRCH;
1078 if (lock_task_sighand(p, &flags)) {
1079 ret = __group_send_sig_info(sig, info, p);
1080 unlock_task_sighand(p, &flags);
1081 }
1082 }
1083
1084 return ret;
1085}
1086
1087
1088
1089
1090
1091
1092int __kill_pgrp_info(int sig, struct siginfo *info, struct pid *pgrp)
1093{
1094 struct task_struct *p = NULL;
1095 int retval, success;
1096
1097 success = 0;
1098 retval = -ESRCH;
1099 do_each_pid_task(pgrp, PIDTYPE_PGID, p) {
1100 int err = group_send_sig_info(sig, info, p);
1101 success |= !err;
1102 retval = err;
1103 } while_each_pid_task(pgrp, PIDTYPE_PGID, p);
1104 return success ? 0 : retval;
1105}
1106
1107int kill_pid_info(int sig, struct siginfo *info, struct pid *pid)
1108{
1109 int error = -ESRCH;
1110 struct task_struct *p;
1111
1112 rcu_read_lock();
1113retry:
1114 p = pid_task(pid, PIDTYPE_PID);
1115 if (p) {
1116 error = group_send_sig_info(sig, info, p);
1117 if (unlikely(error == -ESRCH))
1118
1119
1120
1121
1122
1123
1124 goto retry;
1125 }
1126 rcu_read_unlock();
1127
1128 return error;
1129}
1130
1131int
1132kill_proc_info(int sig, struct siginfo *info, pid_t pid)
1133{
1134 int error;
1135 rcu_read_lock();
1136 error = kill_pid_info(sig, info, find_vpid(pid));
1137 rcu_read_unlock();
1138 return error;
1139}
1140
1141
1142int kill_pid_info_as_uid(int sig, struct siginfo *info, struct pid *pid,
1143 uid_t uid, uid_t euid, u32 secid)
1144{
1145 int ret = -EINVAL;
1146 struct task_struct *p;
1147 const struct cred *pcred;
1148
1149 if (!valid_signal(sig))
1150 return ret;
1151
1152 read_lock(&tasklist_lock);
1153 p = pid_task(pid, PIDTYPE_PID);
1154 if (!p) {
1155 ret = -ESRCH;
1156 goto out_unlock;
1157 }
1158 pcred = __task_cred(p);
1159 if ((info == SEND_SIG_NOINFO ||
1160 (!is_si_special(info) && SI_FROMUSER(info))) &&
1161 euid != pcred->suid && euid != pcred->uid &&
1162 uid != pcred->suid && uid != pcred->uid) {
1163 ret = -EPERM;
1164 goto out_unlock;
1165 }
1166 ret = security_task_kill(p, info, sig, secid);
1167 if (ret)
1168 goto out_unlock;
1169 if (sig && p->sighand) {
1170 unsigned long flags;
1171 spin_lock_irqsave(&p->sighand->siglock, flags);
1172 ret = __send_signal(sig, info, p, 1, 0);
1173 spin_unlock_irqrestore(&p->sighand->siglock, flags);
1174 }
1175out_unlock:
1176 read_unlock(&tasklist_lock);
1177 return ret;
1178}
1179EXPORT_SYMBOL_GPL(kill_pid_info_as_uid);
1180
1181
1182
1183
1184
1185
1186
1187
1188static int kill_something_info(int sig, struct siginfo *info, pid_t pid)
1189{
1190 int ret;
1191
1192 if (pid > 0) {
1193 rcu_read_lock();
1194 ret = kill_pid_info(sig, info, find_vpid(pid));
1195 rcu_read_unlock();
1196 return ret;
1197 }
1198
1199 read_lock(&tasklist_lock);
1200 if (pid != -1) {
1201 ret = __kill_pgrp_info(sig, info,
1202 pid ? find_vpid(-pid) : task_pgrp(current));
1203 } else {
1204 int retval = 0, count = 0;
1205 struct task_struct * p;
1206
1207 for_each_process(p) {
1208 if (task_pid_vnr(p) > 1 &&
1209 !same_thread_group(p, current)) {
1210 int err = group_send_sig_info(sig, info, p);
1211 ++count;
1212 if (err != -EPERM)
1213 retval = err;
1214 }
1215 }
1216 ret = count ? retval : -ESRCH;
1217 }
1218 read_unlock(&tasklist_lock);
1219
1220 return ret;
1221}
1222
1223
1224
1225
1226
1227
1228
1229
1230int
1231send_sig_info(int sig, struct siginfo *info, struct task_struct *p)
1232{
1233 int ret;
1234 unsigned long flags;
1235
1236
1237
1238
1239
1240 if (!valid_signal(sig))
1241 return -EINVAL;
1242
1243 spin_lock_irqsave(&p->sighand->siglock, flags);
1244 ret = specific_send_sig_info(sig, info, p);
1245 spin_unlock_irqrestore(&p->sighand->siglock, flags);
1246 return ret;
1247}
1248
1249#define __si_special(priv) \
1250 ((priv) ? SEND_SIG_PRIV : SEND_SIG_NOINFO)
1251
1252int
1253send_sig(int sig, struct task_struct *p, int priv)
1254{
1255 return send_sig_info(sig, __si_special(priv), p);
1256}
1257
1258void
1259force_sig(int sig, struct task_struct *p)
1260{
1261 force_sig_info(sig, SEND_SIG_PRIV, p);
1262}
1263
1264
1265
1266
1267
1268
1269
1270int
1271force_sigsegv(int sig, struct task_struct *p)
1272{
1273 if (sig == SIGSEGV) {
1274 unsigned long flags;
1275 spin_lock_irqsave(&p->sighand->siglock, flags);
1276 p->sighand->action[sig - 1].sa.sa_handler = SIG_DFL;
1277 spin_unlock_irqrestore(&p->sighand->siglock, flags);
1278 }
1279 force_sig(SIGSEGV, p);
1280 return 0;
1281}
1282
1283int kill_pgrp(struct pid *pid, int sig, int priv)
1284{
1285 int ret;
1286
1287 read_lock(&tasklist_lock);
1288 ret = __kill_pgrp_info(sig, __si_special(priv), pid);
1289 read_unlock(&tasklist_lock);
1290
1291 return ret;
1292}
1293EXPORT_SYMBOL(kill_pgrp);
1294
1295int kill_pid(struct pid *pid, int sig, int priv)
1296{
1297 return kill_pid_info(sig, __si_special(priv), pid);
1298}
1299EXPORT_SYMBOL(kill_pid);
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311struct sigqueue *sigqueue_alloc(void)
1312{
1313 struct sigqueue *q;
1314
1315 if ((q = __sigqueue_alloc(current, GFP_KERNEL, 0)))
1316 q->flags |= SIGQUEUE_PREALLOC;
1317 return(q);
1318}
1319
1320void sigqueue_free(struct sigqueue *q)
1321{
1322 unsigned long flags;
1323 spinlock_t *lock = ¤t->sighand->siglock;
1324
1325 BUG_ON(!(q->flags & SIGQUEUE_PREALLOC));
1326
1327
1328
1329
1330
1331 spin_lock_irqsave(lock, flags);
1332 q->flags &= ~SIGQUEUE_PREALLOC;
1333
1334
1335
1336
1337 if (!list_empty(&q->list))
1338 q = NULL;
1339 spin_unlock_irqrestore(lock, flags);
1340
1341 if (q)
1342 __sigqueue_free(q);
1343}
1344
1345int send_sigqueue(struct sigqueue *q, struct task_struct *t, int group)
1346{
1347 int sig = q->info.si_signo;
1348 struct sigpending *pending;
1349 unsigned long flags;
1350 int ret;
1351
1352 BUG_ON(!(q->flags & SIGQUEUE_PREALLOC));
1353
1354 ret = -1;
1355 if (!likely(lock_task_sighand(t, &flags)))
1356 goto ret;
1357
1358 ret = 1;
1359 if (!prepare_signal(sig, t, 0))
1360 goto out;
1361
1362 ret = 0;
1363 if (unlikely(!list_empty(&q->list))) {
1364
1365
1366
1367
1368 BUG_ON(q->info.si_code != SI_TIMER);
1369 q->info.si_overrun++;
1370 goto out;
1371 }
1372 q->info.si_overrun = 0;
1373
1374 signalfd_notify(t, sig);
1375 pending = group ? &t->signal->shared_pending : &t->pending;
1376 list_add_tail(&q->list, &pending->list);
1377 sigaddset(&pending->signal, sig);
1378 complete_signal(sig, t, group);
1379out:
1380 unlock_task_sighand(t, &flags);
1381ret:
1382 return ret;
1383}
1384
1385
1386
1387
1388static inline void __wake_up_parent(struct task_struct *p,
1389 struct task_struct *parent)
1390{
1391 wake_up_interruptible_sync(&parent->signal->wait_chldexit);
1392}
1393
1394
1395
1396
1397
1398
1399
1400
1401int do_notify_parent(struct task_struct *tsk, int sig)
1402{
1403 struct siginfo info;
1404 unsigned long flags;
1405 struct sighand_struct *psig;
1406 int ret = sig;
1407
1408 BUG_ON(sig == -1);
1409
1410
1411 BUG_ON(task_is_stopped_or_traced(tsk));
1412
1413 BUG_ON(!task_ptrace(tsk) &&
1414 (tsk->group_leader != tsk || !thread_group_empty(tsk)));
1415
1416 info.si_signo = sig;
1417 info.si_errno = 0;
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430 rcu_read_lock();
1431 info.si_pid = task_pid_nr_ns(tsk, tsk->parent->nsproxy->pid_ns);
1432 info.si_uid = __task_cred(tsk)->uid;
1433 rcu_read_unlock();
1434
1435 info.si_utime = cputime_to_clock_t(cputime_add(tsk->utime,
1436 tsk->signal->utime));
1437 info.si_stime = cputime_to_clock_t(cputime_add(tsk->stime,
1438 tsk->signal->stime));
1439
1440 info.si_status = tsk->exit_code & 0x7f;
1441 if (tsk->exit_code & 0x80)
1442 info.si_code = CLD_DUMPED;
1443 else if (tsk->exit_code & 0x7f)
1444 info.si_code = CLD_KILLED;
1445 else {
1446 info.si_code = CLD_EXITED;
1447 info.si_status = tsk->exit_code >> 8;
1448 }
1449
1450 psig = tsk->parent->sighand;
1451 spin_lock_irqsave(&psig->siglock, flags);
1452 if (!task_ptrace(tsk) && sig == SIGCHLD &&
1453 (psig->action[SIGCHLD-1].sa.sa_handler == SIG_IGN ||
1454 (psig->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDWAIT))) {
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470 ret = tsk->exit_signal = -1;
1471 if (psig->action[SIGCHLD-1].sa.sa_handler == SIG_IGN)
1472 sig = -1;
1473 }
1474 if (valid_signal(sig) && sig > 0)
1475 __group_send_sig_info(sig, &info, tsk->parent);
1476 __wake_up_parent(tsk, tsk->parent);
1477 spin_unlock_irqrestore(&psig->siglock, flags);
1478
1479 return ret;
1480}
1481
1482static void do_notify_parent_cldstop(struct task_struct *tsk, int why)
1483{
1484 struct siginfo info;
1485 unsigned long flags;
1486 struct task_struct *parent;
1487 struct sighand_struct *sighand;
1488
1489 if (task_ptrace(tsk))
1490 parent = tsk->parent;
1491 else {
1492 tsk = tsk->group_leader;
1493 parent = tsk->real_parent;
1494 }
1495
1496 info.si_signo = SIGCHLD;
1497 info.si_errno = 0;
1498
1499
1500
1501 rcu_read_lock();
1502 info.si_pid = task_pid_nr_ns(tsk, parent->nsproxy->pid_ns);
1503 info.si_uid = __task_cred(tsk)->uid;
1504 rcu_read_unlock();
1505
1506 info.si_utime = cputime_to_clock_t(tsk->utime);
1507 info.si_stime = cputime_to_clock_t(tsk->stime);
1508
1509 info.si_code = why;
1510 switch (why) {
1511 case CLD_CONTINUED:
1512 info.si_status = SIGCONT;
1513 break;
1514 case CLD_STOPPED:
1515 info.si_status = tsk->signal->group_exit_code & 0x7f;
1516 break;
1517 case CLD_TRAPPED:
1518 info.si_status = tsk->exit_code & 0x7f;
1519 break;
1520 default:
1521 BUG();
1522 }
1523
1524 sighand = parent->sighand;
1525 spin_lock_irqsave(&sighand->siglock, flags);
1526 if (sighand->action[SIGCHLD-1].sa.sa_handler != SIG_IGN &&
1527 !(sighand->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDSTOP))
1528 __group_send_sig_info(SIGCHLD, &info, parent);
1529
1530
1531
1532 __wake_up_parent(tsk, parent);
1533 spin_unlock_irqrestore(&sighand->siglock, flags);
1534}
1535
1536static inline int may_ptrace_stop(void)
1537{
1538 if (!likely(task_ptrace(current)))
1539 return 0;
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549 if (unlikely(current->mm->core_state) &&
1550 unlikely(current->mm == current->parent->mm))
1551 return 0;
1552
1553 return 1;
1554}
1555
1556
1557
1558
1559
1560static int sigkill_pending(struct task_struct *tsk)
1561{
1562 return sigismember(&tsk->pending.signal, SIGKILL) ||
1563 sigismember(&tsk->signal->shared_pending.signal, SIGKILL);
1564}
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577static void ptrace_stop(int exit_code, int clear_code, siginfo_t *info)
1578{
1579 if (arch_ptrace_stop_needed(exit_code, info)) {
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591 spin_unlock_irq(¤t->sighand->siglock);
1592 arch_ptrace_stop(exit_code, info);
1593 spin_lock_irq(¤t->sighand->siglock);
1594 if (sigkill_pending(current))
1595 return;
1596 }
1597
1598
1599
1600
1601
1602 if (current->signal->group_stop_count > 0)
1603 --current->signal->group_stop_count;
1604
1605 current->last_siginfo = info;
1606 current->exit_code = exit_code;
1607
1608
1609 __set_current_state(TASK_TRACED);
1610 spin_unlock_irq(¤t->sighand->siglock);
1611 read_lock(&tasklist_lock);
1612 if (may_ptrace_stop()) {
1613 do_notify_parent_cldstop(current, CLD_TRAPPED);
1614
1615
1616
1617
1618
1619
1620 preempt_disable();
1621 read_unlock(&tasklist_lock);
1622 preempt_enable_no_resched();
1623 schedule();
1624 } else {
1625
1626
1627
1628
1629 __set_current_state(TASK_RUNNING);
1630 if (clear_code)
1631 current->exit_code = 0;
1632 read_unlock(&tasklist_lock);
1633 }
1634
1635
1636
1637
1638
1639
1640 try_to_freeze();
1641
1642
1643
1644
1645
1646
1647 spin_lock_irq(¤t->sighand->siglock);
1648 current->last_siginfo = NULL;
1649
1650
1651
1652
1653
1654
1655 recalc_sigpending_tsk(current);
1656}
1657
1658void ptrace_notify(int exit_code)
1659{
1660 siginfo_t info;
1661
1662 BUG_ON((exit_code & (0x7f | ~0xffff)) != SIGTRAP);
1663
1664 memset(&info, 0, sizeof info);
1665 info.si_signo = SIGTRAP;
1666 info.si_code = exit_code;
1667 info.si_pid = task_pid_vnr(current);
1668 info.si_uid = current_uid();
1669
1670
1671 spin_lock_irq(¤t->sighand->siglock);
1672 ptrace_stop(exit_code, 1, &info);
1673 spin_unlock_irq(¤t->sighand->siglock);
1674}
1675
1676static void
1677finish_stop(int stop_count)
1678{
1679
1680
1681
1682
1683
1684 if (tracehook_notify_jctl(stop_count == 0, CLD_STOPPED)) {
1685 read_lock(&tasklist_lock);
1686 do_notify_parent_cldstop(current, CLD_STOPPED);
1687 read_unlock(&tasklist_lock);
1688 }
1689
1690 do {
1691 schedule();
1692 } while (try_to_freeze());
1693
1694
1695
1696 current->exit_code = 0;
1697}
1698
1699
1700
1701
1702
1703
1704
1705static int do_signal_stop(int signr)
1706{
1707 struct signal_struct *sig = current->signal;
1708 int stop_count;
1709
1710 if (sig->group_stop_count > 0) {
1711
1712
1713
1714
1715 stop_count = --sig->group_stop_count;
1716 } else {
1717 struct task_struct *t;
1718
1719 if (!likely(sig->flags & SIGNAL_STOP_DEQUEUED) ||
1720 unlikely(signal_group_exit(sig)))
1721 return 0;
1722
1723
1724
1725
1726 sig->group_exit_code = signr;
1727
1728 stop_count = 0;
1729 for (t = next_thread(current); t != current; t = next_thread(t))
1730
1731
1732
1733
1734
1735 if (!(t->flags & PF_EXITING) &&
1736 !task_is_stopped_or_traced(t)) {
1737 stop_count++;
1738 signal_wake_up(t, 0);
1739 }
1740 sig->group_stop_count = stop_count;
1741 }
1742
1743 if (stop_count == 0)
1744 sig->flags = SIGNAL_STOP_STOPPED;
1745 current->exit_code = sig->group_exit_code;
1746 __set_current_state(TASK_STOPPED);
1747
1748 spin_unlock_irq(¤t->sighand->siglock);
1749 finish_stop(stop_count);
1750 return 1;
1751}
1752
1753static int ptrace_signal(int signr, siginfo_t *info,
1754 struct pt_regs *regs, void *cookie)
1755{
1756 if (!task_ptrace(current))
1757 return signr;
1758
1759 ptrace_signal_deliver(regs, cookie);
1760
1761
1762 ptrace_stop(signr, 0, info);
1763
1764
1765 signr = current->exit_code;
1766 if (signr == 0)
1767 return signr;
1768
1769 current->exit_code = 0;
1770
1771
1772
1773
1774
1775 if (signr != info->si_signo) {
1776 info->si_signo = signr;
1777 info->si_errno = 0;
1778 info->si_code = SI_USER;
1779 info->si_pid = task_pid_vnr(current->parent);
1780 info->si_uid = task_uid(current->parent);
1781 }
1782
1783
1784 if (sigismember(¤t->blocked, signr)) {
1785 specific_send_sig_info(signr, info, current);
1786 signr = 0;
1787 }
1788
1789 return signr;
1790}
1791
1792int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka,
1793 struct pt_regs *regs, void *cookie)
1794{
1795 struct sighand_struct *sighand = current->sighand;
1796 struct signal_struct *signal = current->signal;
1797 int signr;
1798
1799relock:
1800
1801
1802
1803
1804
1805
1806 try_to_freeze();
1807
1808 spin_lock_irq(&sighand->siglock);
1809
1810
1811
1812
1813
1814 if (unlikely(signal->flags & SIGNAL_CLD_MASK)) {
1815 int why = (signal->flags & SIGNAL_STOP_CONTINUED)
1816 ? CLD_CONTINUED : CLD_STOPPED;
1817 signal->flags &= ~SIGNAL_CLD_MASK;
1818 spin_unlock_irq(&sighand->siglock);
1819
1820 if (unlikely(!tracehook_notify_jctl(1, why)))
1821 goto relock;
1822
1823 read_lock(&tasklist_lock);
1824 do_notify_parent_cldstop(current->group_leader, why);
1825 read_unlock(&tasklist_lock);
1826 goto relock;
1827 }
1828
1829 for (;;) {
1830 struct k_sigaction *ka;
1831
1832 if (unlikely(signal->group_stop_count > 0) &&
1833 do_signal_stop(0))
1834 goto relock;
1835
1836
1837
1838
1839
1840
1841 signr = tracehook_get_signal(current, regs, info, return_ka);
1842 if (unlikely(signr < 0))
1843 goto relock;
1844 if (unlikely(signr != 0))
1845 ka = return_ka;
1846 else {
1847 signr = dequeue_signal(current, ¤t->blocked,
1848 info);
1849
1850 if (!signr)
1851 break;
1852
1853 if (signr != SIGKILL) {
1854 signr = ptrace_signal(signr, info,
1855 regs, cookie);
1856 if (!signr)
1857 continue;
1858 }
1859
1860 ka = &sighand->action[signr-1];
1861 }
1862
1863 if (ka->sa.sa_handler == SIG_IGN)
1864 continue;
1865 if (ka->sa.sa_handler != SIG_DFL) {
1866
1867 *return_ka = *ka;
1868
1869 if (ka->sa.sa_flags & SA_ONESHOT)
1870 ka->sa.sa_handler = SIG_DFL;
1871
1872 break;
1873 }
1874
1875
1876
1877
1878 if (sig_kernel_ignore(signr))
1879 continue;
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891 if (unlikely(signal->flags & SIGNAL_UNKILLABLE) &&
1892 !sig_kernel_only(signr))
1893 continue;
1894
1895 if (sig_kernel_stop(signr)) {
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906 if (signr != SIGSTOP) {
1907 spin_unlock_irq(&sighand->siglock);
1908
1909
1910
1911 if (is_current_pgrp_orphaned())
1912 goto relock;
1913
1914 spin_lock_irq(&sighand->siglock);
1915 }
1916
1917 if (likely(do_signal_stop(info->si_signo))) {
1918
1919 goto relock;
1920 }
1921
1922
1923
1924
1925
1926 continue;
1927 }
1928
1929 spin_unlock_irq(&sighand->siglock);
1930
1931
1932
1933
1934 current->flags |= PF_SIGNALED;
1935
1936 if (sig_kernel_coredump(signr)) {
1937 if (print_fatal_signals)
1938 print_fatal_signal(regs, info->si_signo);
1939
1940
1941
1942
1943
1944
1945
1946
1947 do_coredump(info->si_signo, info->si_signo, regs);
1948 }
1949
1950
1951
1952
1953 do_group_exit(info->si_signo);
1954
1955 }
1956 spin_unlock_irq(&sighand->siglock);
1957 return signr;
1958}
1959
1960void exit_signals(struct task_struct *tsk)
1961{
1962 int group_stop = 0;
1963 struct task_struct *t;
1964
1965 if (thread_group_empty(tsk) || signal_group_exit(tsk->signal)) {
1966 tsk->flags |= PF_EXITING;
1967 return;
1968 }
1969
1970 spin_lock_irq(&tsk->sighand->siglock);
1971
1972
1973
1974
1975 tsk->flags |= PF_EXITING;
1976 if (!signal_pending(tsk))
1977 goto out;
1978
1979
1980
1981
1982
1983 for (t = tsk; (t = next_thread(t)) != tsk; )
1984 if (!signal_pending(t) && !(t->flags & PF_EXITING))
1985 recalc_sigpending_and_wake(t);
1986
1987 if (unlikely(tsk->signal->group_stop_count) &&
1988 !--tsk->signal->group_stop_count) {
1989 tsk->signal->flags = SIGNAL_STOP_STOPPED;
1990 group_stop = 1;
1991 }
1992out:
1993 spin_unlock_irq(&tsk->sighand->siglock);
1994
1995 if (unlikely(group_stop) && tracehook_notify_jctl(1, CLD_STOPPED)) {
1996 read_lock(&tasklist_lock);
1997 do_notify_parent_cldstop(tsk, CLD_STOPPED);
1998 read_unlock(&tasklist_lock);
1999 }
2000}
2001
2002EXPORT_SYMBOL(recalc_sigpending);
2003EXPORT_SYMBOL_GPL(dequeue_signal);
2004EXPORT_SYMBOL(flush_signals);
2005EXPORT_SYMBOL(force_sig);
2006EXPORT_SYMBOL(send_sig);
2007EXPORT_SYMBOL(send_sig_info);
2008EXPORT_SYMBOL(sigprocmask);
2009EXPORT_SYMBOL(block_all_signals);
2010EXPORT_SYMBOL(unblock_all_signals);
2011
2012
2013
2014
2015
2016
2017SYSCALL_DEFINE0(restart_syscall)
2018{
2019 struct restart_block *restart = ¤t_thread_info()->restart_block;
2020 return restart->fn(restart);
2021}
2022
2023long do_no_restart_syscall(struct restart_block *param)
2024{
2025 return -EINTR;
2026}
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042int sigprocmask(int how, sigset_t *set, sigset_t *oldset)
2043{
2044 int error;
2045
2046 spin_lock_irq(¤t->sighand->siglock);
2047 if (oldset)
2048 *oldset = current->blocked;
2049
2050 error = 0;
2051 switch (how) {
2052 case SIG_BLOCK:
2053 sigorsets(¤t->blocked, ¤t->blocked, set);
2054 break;
2055 case SIG_UNBLOCK:
2056 signandsets(¤t->blocked, ¤t->blocked, set);
2057 break;
2058 case SIG_SETMASK:
2059 current->blocked = *set;
2060 break;
2061 default:
2062 error = -EINVAL;
2063 }
2064 recalc_sigpending();
2065 spin_unlock_irq(¤t->sighand->siglock);
2066
2067 return error;
2068}
2069
2070SYSCALL_DEFINE4(rt_sigprocmask, int, how, sigset_t __user *, set,
2071 sigset_t __user *, oset, size_t, sigsetsize)
2072{
2073 int error = -EINVAL;
2074 sigset_t old_set, new_set;
2075
2076
2077 if (sigsetsize != sizeof(sigset_t))
2078 goto out;
2079
2080 if (set) {
2081 error = -EFAULT;
2082 if (copy_from_user(&new_set, set, sizeof(*set)))
2083 goto out;
2084 sigdelsetmask(&new_set, sigmask(SIGKILL)|sigmask(SIGSTOP));
2085
2086 error = sigprocmask(how, &new_set, &old_set);
2087 if (error)
2088 goto out;
2089 if (oset)
2090 goto set_old;
2091 } else if (oset) {
2092 spin_lock_irq(¤t->sighand->siglock);
2093 old_set = current->blocked;
2094 spin_unlock_irq(¤t->sighand->siglock);
2095
2096 set_old:
2097 error = -EFAULT;
2098 if (copy_to_user(oset, &old_set, sizeof(*oset)))
2099 goto out;
2100 }
2101 error = 0;
2102out:
2103 return error;
2104}
2105
2106long do_sigpending(void __user *set, unsigned long sigsetsize)
2107{
2108 long error = -EINVAL;
2109 sigset_t pending;
2110
2111 if (sigsetsize > sizeof(sigset_t))
2112 goto out;
2113
2114 spin_lock_irq(¤t->sighand->siglock);
2115 sigorsets(&pending, ¤t->pending.signal,
2116 ¤t->signal->shared_pending.signal);
2117 spin_unlock_irq(¤t->sighand->siglock);
2118
2119
2120 sigandsets(&pending, ¤t->blocked, &pending);
2121
2122 error = -EFAULT;
2123 if (!copy_to_user(set, &pending, sigsetsize))
2124 error = 0;
2125
2126out:
2127 return error;
2128}
2129
2130SYSCALL_DEFINE2(rt_sigpending, sigset_t __user *, set, size_t, sigsetsize)
2131{
2132 return do_sigpending(set, sigsetsize);
2133}
2134
2135#ifndef HAVE_ARCH_COPY_SIGINFO_TO_USER
2136
2137int copy_siginfo_to_user(siginfo_t __user *to, siginfo_t *from)
2138{
2139 int err;
2140
2141 if (!access_ok (VERIFY_WRITE, to, sizeof(siginfo_t)))
2142 return -EFAULT;
2143 if (from->si_code < 0)
2144 return __copy_to_user(to, from, sizeof(siginfo_t))
2145 ? -EFAULT : 0;
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155 err = __put_user(from->si_signo, &to->si_signo);
2156 err |= __put_user(from->si_errno, &to->si_errno);
2157 err |= __put_user((short)from->si_code, &to->si_code);
2158 switch (from->si_code & __SI_MASK) {
2159 case __SI_KILL:
2160 err |= __put_user(from->si_pid, &to->si_pid);
2161 err |= __put_user(from->si_uid, &to->si_uid);
2162 break;
2163 case __SI_TIMER:
2164 err |= __put_user(from->si_tid, &to->si_tid);
2165 err |= __put_user(from->si_overrun, &to->si_overrun);
2166 err |= __put_user(from->si_ptr, &to->si_ptr);
2167 break;
2168 case __SI_POLL:
2169 err |= __put_user(from->si_band, &to->si_band);
2170 err |= __put_user(from->si_fd, &to->si_fd);
2171 break;
2172 case __SI_FAULT:
2173 err |= __put_user(from->si_addr, &to->si_addr);
2174#ifdef __ARCH_SI_TRAPNO
2175 err |= __put_user(from->si_trapno, &to->si_trapno);
2176#endif
2177 break;
2178 case __SI_CHLD:
2179 err |= __put_user(from->si_pid, &to->si_pid);
2180 err |= __put_user(from->si_uid, &to->si_uid);
2181 err |= __put_user(from->si_status, &to->si_status);
2182 err |= __put_user(from->si_utime, &to->si_utime);
2183 err |= __put_user(from->si_stime, &to->si_stime);
2184 break;
2185 case __SI_RT:
2186 case __SI_MESGQ:
2187 err |= __put_user(from->si_pid, &to->si_pid);
2188 err |= __put_user(from->si_uid, &to->si_uid);
2189 err |= __put_user(from->si_ptr, &to->si_ptr);
2190 break;
2191 default:
2192 err |= __put_user(from->si_pid, &to->si_pid);
2193 err |= __put_user(from->si_uid, &to->si_uid);
2194 break;
2195 }
2196 return err;
2197}
2198
2199#endif
2200
2201SYSCALL_DEFINE4(rt_sigtimedwait, const sigset_t __user *, uthese,
2202 siginfo_t __user *, uinfo, const struct timespec __user *, uts,
2203 size_t, sigsetsize)
2204{
2205 int ret, sig;
2206 sigset_t these;
2207 struct timespec ts;
2208 siginfo_t info;
2209 long timeout = 0;
2210
2211
2212 if (sigsetsize != sizeof(sigset_t))
2213 return -EINVAL;
2214
2215 if (copy_from_user(&these, uthese, sizeof(these)))
2216 return -EFAULT;
2217
2218
2219
2220
2221
2222 sigdelsetmask(&these, sigmask(SIGKILL)|sigmask(SIGSTOP));
2223 signotset(&these);
2224
2225 if (uts) {
2226 if (copy_from_user(&ts, uts, sizeof(ts)))
2227 return -EFAULT;
2228 if (ts.tv_nsec >= 1000000000L || ts.tv_nsec < 0
2229 || ts.tv_sec < 0)
2230 return -EINVAL;
2231 }
2232
2233 spin_lock_irq(¤t->sighand->siglock);
2234 sig = dequeue_signal(current, &these, &info);
2235 if (!sig) {
2236 timeout = MAX_SCHEDULE_TIMEOUT;
2237 if (uts)
2238 timeout = (timespec_to_jiffies(&ts)
2239 + (ts.tv_sec || ts.tv_nsec));
2240
2241 if (timeout) {
2242
2243
2244
2245 current->real_blocked = current->blocked;
2246 sigandsets(¤t->blocked, ¤t->blocked, &these);
2247 recalc_sigpending();
2248 spin_unlock_irq(¤t->sighand->siglock);
2249
2250 timeout = schedule_timeout_interruptible(timeout);
2251
2252 spin_lock_irq(¤t->sighand->siglock);
2253 sig = dequeue_signal(current, &these, &info);
2254 current->blocked = current->real_blocked;
2255 siginitset(¤t->real_blocked, 0);
2256 recalc_sigpending();
2257 }
2258 }
2259 spin_unlock_irq(¤t->sighand->siglock);
2260
2261 if (sig) {
2262 ret = sig;
2263 if (uinfo) {
2264 if (copy_siginfo_to_user(uinfo, &info))
2265 ret = -EFAULT;
2266 }
2267 } else {
2268 ret = -EAGAIN;
2269 if (timeout)
2270 ret = -EINTR;
2271 }
2272
2273 return ret;
2274}
2275
2276SYSCALL_DEFINE2(kill, pid_t, pid, int, sig)
2277{
2278 struct siginfo info;
2279
2280 info.si_signo = sig;
2281 info.si_errno = 0;
2282 info.si_code = SI_USER;
2283 info.si_pid = task_tgid_vnr(current);
2284 info.si_uid = current_uid();
2285
2286 return kill_something_info(sig, &info, pid);
2287}
2288
2289static int
2290do_send_specific(pid_t tgid, pid_t pid, int sig, struct siginfo *info)
2291{
2292 struct task_struct *p;
2293 unsigned long flags;
2294 int error = -ESRCH;
2295
2296 rcu_read_lock();
2297 p = find_task_by_vpid(pid);
2298 if (p && (tgid <= 0 || task_tgid_vnr(p) == tgid)) {
2299 error = check_kill_permission(sig, info, p);
2300
2301
2302
2303
2304
2305
2306
2307
2308 if (!error && sig && lock_task_sighand(p, &flags)) {
2309 error = specific_send_sig_info(sig, info, p);
2310 unlock_task_sighand(p, &flags);
2311 }
2312 }
2313 rcu_read_unlock();
2314
2315 return error;
2316}
2317
2318static int do_tkill(pid_t tgid, pid_t pid, int sig)
2319{
2320 struct siginfo info;
2321
2322 info.si_signo = sig;
2323 info.si_errno = 0;
2324 info.si_code = SI_TKILL;
2325 info.si_pid = task_tgid_vnr(current);
2326 info.si_uid = current_uid();
2327
2328 return do_send_specific(tgid, pid, sig, &info);
2329}
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341SYSCALL_DEFINE3(tgkill, pid_t, tgid, pid_t, pid, int, sig)
2342{
2343
2344 if (pid <= 0 || tgid <= 0)
2345 return -EINVAL;
2346
2347 return do_tkill(tgid, pid, sig);
2348}
2349
2350
2351
2352
2353SYSCALL_DEFINE2(tkill, pid_t, pid, int, sig)
2354{
2355
2356 if (pid <= 0)
2357 return -EINVAL;
2358
2359 return do_tkill(0, pid, sig);
2360}
2361
2362SYSCALL_DEFINE3(rt_sigqueueinfo, pid_t, pid, int, sig,
2363 siginfo_t __user *, uinfo)
2364{
2365 siginfo_t info;
2366
2367 if (copy_from_user(&info, uinfo, sizeof(siginfo_t)))
2368 return -EFAULT;
2369
2370
2371
2372 if (info.si_code >= 0)
2373 return -EPERM;
2374 info.si_signo = sig;
2375
2376
2377 return kill_proc_info(sig, &info, pid);
2378}
2379
2380long do_rt_tgsigqueueinfo(pid_t tgid, pid_t pid, int sig, siginfo_t *info)
2381{
2382
2383 if (pid <= 0 || tgid <= 0)
2384 return -EINVAL;
2385
2386
2387
2388 if (info->si_code >= 0)
2389 return -EPERM;
2390 info->si_signo = sig;
2391
2392 return do_send_specific(tgid, pid, sig, info);
2393}
2394
2395SYSCALL_DEFINE4(rt_tgsigqueueinfo, pid_t, tgid, pid_t, pid, int, sig,
2396 siginfo_t __user *, uinfo)
2397{
2398 siginfo_t info;
2399
2400 if (copy_from_user(&info, uinfo, sizeof(siginfo_t)))
2401 return -EFAULT;
2402
2403 return do_rt_tgsigqueueinfo(tgid, pid, sig, &info);
2404}
2405
2406int do_sigaction(int sig, struct k_sigaction *act, struct k_sigaction *oact)
2407{
2408 struct task_struct *t = current;
2409 struct k_sigaction *k;
2410 sigset_t mask;
2411
2412 if (!valid_signal(sig) || sig < 1 || (act && sig_kernel_only(sig)))
2413 return -EINVAL;
2414
2415 k = &t->sighand->action[sig-1];
2416
2417 spin_lock_irq(¤t->sighand->siglock);
2418 if (oact)
2419 *oact = *k;
2420
2421 if (act) {
2422 sigdelsetmask(&act->sa.sa_mask,
2423 sigmask(SIGKILL) | sigmask(SIGSTOP));
2424 *k = *act;
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436 if (sig_handler_ignored(sig_handler(t, sig), sig)) {
2437 sigemptyset(&mask);
2438 sigaddset(&mask, sig);
2439 rm_from_queue_full(&mask, &t->signal->shared_pending);
2440 do {
2441 rm_from_queue_full(&mask, &t->pending);
2442 t = next_thread(t);
2443 } while (t != current);
2444 }
2445 }
2446
2447 spin_unlock_irq(¤t->sighand->siglock);
2448 return 0;
2449}
2450
2451int
2452do_sigaltstack (const stack_t __user *uss, stack_t __user *uoss, unsigned long sp)
2453{
2454 stack_t oss;
2455 int error;
2456
2457 oss.ss_sp = (void __user *) current->sas_ss_sp;
2458 oss.ss_size = current->sas_ss_size;
2459 oss.ss_flags = sas_ss_flags(sp);
2460
2461 if (uss) {
2462 void __user *ss_sp;
2463 size_t ss_size;
2464 int ss_flags;
2465
2466 error = -EFAULT;
2467 if (!access_ok(VERIFY_READ, uss, sizeof(*uss)))
2468 goto out;
2469 error = __get_user(ss_sp, &uss->ss_sp) |
2470 __get_user(ss_flags, &uss->ss_flags) |
2471 __get_user(ss_size, &uss->ss_size);
2472 if (error)
2473 goto out;
2474
2475 error = -EPERM;
2476 if (on_sig_stack(sp))
2477 goto out;
2478
2479 error = -EINVAL;
2480
2481
2482
2483
2484
2485
2486
2487
2488 if (ss_flags != SS_DISABLE && ss_flags != SS_ONSTACK && ss_flags != 0)
2489 goto out;
2490
2491 if (ss_flags == SS_DISABLE) {
2492 ss_size = 0;
2493 ss_sp = NULL;
2494 } else {
2495 error = -ENOMEM;
2496 if (ss_size < MINSIGSTKSZ)
2497 goto out;
2498 }
2499
2500 current->sas_ss_sp = (unsigned long) ss_sp;
2501 current->sas_ss_size = ss_size;
2502 }
2503
2504 error = 0;
2505 if (uoss) {
2506 error = -EFAULT;
2507 if (!access_ok(VERIFY_WRITE, uoss, sizeof(*uoss)))
2508 goto out;
2509 error = __put_user(oss.ss_sp, &uoss->ss_sp) |
2510 __put_user(oss.ss_size, &uoss->ss_size) |
2511 __put_user(oss.ss_flags, &uoss->ss_flags);
2512 }
2513
2514out:
2515 return error;
2516}
2517
2518#ifdef __ARCH_WANT_SYS_SIGPENDING
2519
2520SYSCALL_DEFINE1(sigpending, old_sigset_t __user *, set)
2521{
2522 return do_sigpending(set, sizeof(*set));
2523}
2524
2525#endif
2526
2527#ifdef __ARCH_WANT_SYS_SIGPROCMASK
2528
2529
2530
2531SYSCALL_DEFINE3(sigprocmask, int, how, old_sigset_t __user *, set,
2532 old_sigset_t __user *, oset)
2533{
2534 int error;
2535 old_sigset_t old_set, new_set;
2536
2537 if (set) {
2538 error = -EFAULT;
2539 if (copy_from_user(&new_set, set, sizeof(*set)))
2540 goto out;
2541 new_set &= ~(sigmask(SIGKILL) | sigmask(SIGSTOP));
2542
2543 spin_lock_irq(¤t->sighand->siglock);
2544 old_set = current->blocked.sig[0];
2545
2546 error = 0;
2547 switch (how) {
2548 default:
2549 error = -EINVAL;
2550 break;
2551 case SIG_BLOCK:
2552 sigaddsetmask(¤t->blocked, new_set);
2553 break;
2554 case SIG_UNBLOCK:
2555 sigdelsetmask(¤t->blocked, new_set);
2556 break;
2557 case SIG_SETMASK:
2558 current->blocked.sig[0] = new_set;
2559 break;
2560 }
2561
2562 recalc_sigpending();
2563 spin_unlock_irq(¤t->sighand->siglock);
2564 if (error)
2565 goto out;
2566 if (oset)
2567 goto set_old;
2568 } else if (oset) {
2569 old_set = current->blocked.sig[0];
2570 set_old:
2571 error = -EFAULT;
2572 if (copy_to_user(oset, &old_set, sizeof(*oset)))
2573 goto out;
2574 }
2575 error = 0;
2576out:
2577 return error;
2578}
2579#endif
2580
2581#ifdef __ARCH_WANT_SYS_RT_SIGACTION
2582SYSCALL_DEFINE4(rt_sigaction, int, sig,
2583 const struct sigaction __user *, act,
2584 struct sigaction __user *, oact,
2585 size_t, sigsetsize)
2586{
2587 struct k_sigaction new_sa, old_sa;
2588 int ret = -EINVAL;
2589
2590
2591 if (sigsetsize != sizeof(sigset_t))
2592 goto out;
2593
2594 if (act) {
2595 if (copy_from_user(&new_sa.sa, act, sizeof(new_sa.sa)))
2596 return -EFAULT;
2597 }
2598
2599 ret = do_sigaction(sig, act ? &new_sa : NULL, oact ? &old_sa : NULL);
2600
2601 if (!ret && oact) {
2602 if (copy_to_user(oact, &old_sa.sa, sizeof(old_sa.sa)))
2603 return -EFAULT;
2604 }
2605out:
2606 return ret;
2607}
2608#endif
2609
2610#ifdef __ARCH_WANT_SYS_SGETMASK
2611
2612
2613
2614
2615SYSCALL_DEFINE0(sgetmask)
2616{
2617
2618 return current->blocked.sig[0];
2619}
2620
2621SYSCALL_DEFINE1(ssetmask, int, newmask)
2622{
2623 int old;
2624
2625 spin_lock_irq(¤t->sighand->siglock);
2626 old = current->blocked.sig[0];
2627
2628 siginitset(¤t->blocked, newmask & ~(sigmask(SIGKILL)|
2629 sigmask(SIGSTOP)));
2630 recalc_sigpending();
2631 spin_unlock_irq(¤t->sighand->siglock);
2632
2633 return old;
2634}
2635#endif
2636
2637#ifdef __ARCH_WANT_SYS_SIGNAL
2638
2639
2640
2641SYSCALL_DEFINE2(signal, int, sig, __sighandler_t, handler)
2642{
2643 struct k_sigaction new_sa, old_sa;
2644 int ret;
2645
2646 new_sa.sa.sa_handler = handler;
2647 new_sa.sa.sa_flags = SA_ONESHOT | SA_NOMASK;
2648 sigemptyset(&new_sa.sa.sa_mask);
2649
2650 ret = do_sigaction(sig, &new_sa, &old_sa);
2651
2652 return ret ? ret : (unsigned long)old_sa.sa.sa_handler;
2653}
2654#endif
2655
2656#ifdef __ARCH_WANT_SYS_PAUSE
2657
2658SYSCALL_DEFINE0(pause)
2659{
2660 current->state = TASK_INTERRUPTIBLE;
2661 schedule();
2662 return -ERESTARTNOHAND;
2663}
2664
2665#endif
2666
2667#ifdef __ARCH_WANT_SYS_RT_SIGSUSPEND
2668SYSCALL_DEFINE2(rt_sigsuspend, sigset_t __user *, unewset, size_t, sigsetsize)
2669{
2670 sigset_t newset;
2671
2672
2673 if (sigsetsize != sizeof(sigset_t))
2674 return -EINVAL;
2675
2676 if (copy_from_user(&newset, unewset, sizeof(newset)))
2677 return -EFAULT;
2678 sigdelsetmask(&newset, sigmask(SIGKILL)|sigmask(SIGSTOP));
2679
2680 spin_lock_irq(¤t->sighand->siglock);
2681 current->saved_sigmask = current->blocked;
2682 current->blocked = newset;
2683 recalc_sigpending();
2684 spin_unlock_irq(¤t->sighand->siglock);
2685
2686 current->state = TASK_INTERRUPTIBLE;
2687 schedule();
2688 set_restore_sigmask();
2689 return -ERESTARTNOHAND;
2690}
2691#endif
2692
2693__attribute__((weak)) const char *arch_vma_name(struct vm_area_struct *vma)
2694{
2695 return NULL;
2696}
2697
2698void __init signals_init(void)
2699{
2700 sigqueue_cachep = KMEM_CACHE(sigqueue, SLAB_PANIC);
2701}
2702