1
2
3
4
5
6
7
8
9
10
11
12
13#include <linux/slab.h>
14#include <linux/export.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/coredump.h>
21#include <linux/security.h>
22#include <linux/syscalls.h>
23#include <linux/ptrace.h>
24#include <linux/signal.h>
25#include <linux/signalfd.h>
26#include <linux/ratelimit.h>
27#include <linux/tracehook.h>
28#include <linux/capability.h>
29#include <linux/freezer.h>
30#include <linux/pid_namespace.h>
31#include <linux/nsproxy.h>
32#include <linux/user_namespace.h>
33#include <linux/uprobes.h>
34#include <linux/compat.h>
35#define CREATE_TRACE_POINTS
36#include <trace/events/signal.h>
37
38#include <asm/param.h>
39#include <asm/uaccess.h>
40#include <asm/unistd.h>
41#include <asm/siginfo.h>
42#include <asm/cacheflush.h>
43#include "audit.h"
44
45
46
47
48
49static struct kmem_cache *sigqueue_cachep;
50
51int print_fatal_signals __read_mostly;
52
53static void __user *sig_handler(struct task_struct *t, int sig)
54{
55 return t->sighand->action[sig - 1].sa.sa_handler;
56}
57
58static int sig_handler_ignored(void __user *handler, int sig)
59{
60
61 return handler == SIG_IGN ||
62 (handler == SIG_DFL && sig_kernel_ignore(sig));
63}
64
65static int sig_task_ignored(struct task_struct *t, int sig, bool force)
66{
67 void __user *handler;
68
69 handler = sig_handler(t, sig);
70
71 if (unlikely(t->signal->flags & SIGNAL_UNKILLABLE) &&
72 handler == SIG_DFL && !force)
73 return 1;
74
75 return sig_handler_ignored(handler, sig);
76}
77
78static int sig_ignored(struct task_struct *t, int sig, bool force)
79{
80
81
82
83
84
85 if (sigismember(&t->blocked, sig) || sigismember(&t->real_blocked, sig))
86 return 0;
87
88 if (!sig_task_ignored(t, sig, force))
89 return 0;
90
91
92
93
94 return !t->ptrace;
95}
96
97
98
99
100
101static inline int has_pending_signals(sigset_t *signal, sigset_t *blocked)
102{
103 unsigned long ready;
104 long i;
105
106 switch (_NSIG_WORDS) {
107 default:
108 for (i = _NSIG_WORDS, ready = 0; --i >= 0 ;)
109 ready |= signal->sig[i] &~ blocked->sig[i];
110 break;
111
112 case 4: ready = signal->sig[3] &~ blocked->sig[3];
113 ready |= signal->sig[2] &~ blocked->sig[2];
114 ready |= signal->sig[1] &~ blocked->sig[1];
115 ready |= signal->sig[0] &~ blocked->sig[0];
116 break;
117
118 case 2: ready = signal->sig[1] &~ blocked->sig[1];
119 ready |= signal->sig[0] &~ blocked->sig[0];
120 break;
121
122 case 1: ready = signal->sig[0] &~ blocked->sig[0];
123 }
124 return ready != 0;
125}
126
127#define PENDING(p,b) has_pending_signals(&(p)->signal, (b))
128
129static int recalc_sigpending_tsk(struct task_struct *t)
130{
131 if ((t->jobctl & JOBCTL_PENDING_MASK) ||
132 PENDING(&t->pending, &t->blocked) ||
133 PENDING(&t->signal->shared_pending, &t->blocked)) {
134 set_tsk_thread_flag(t, TIF_SIGPENDING);
135 return 1;
136 }
137
138
139
140
141
142 return 0;
143}
144
145
146
147
148
149void recalc_sigpending_and_wake(struct task_struct *t)
150{
151 if (recalc_sigpending_tsk(t))
152 signal_wake_up(t, 0);
153}
154
155void recalc_sigpending(void)
156{
157 if (!recalc_sigpending_tsk(current) && !freezing(current))
158 clear_thread_flag(TIF_SIGPENDING);
159
160}
161
162
163
164#define SYNCHRONOUS_MASK \
165 (sigmask(SIGSEGV) | sigmask(SIGBUS) | sigmask(SIGILL) | \
166 sigmask(SIGTRAP) | sigmask(SIGFPE) | sigmask(SIGSYS))
167
168int next_signal(struct sigpending *pending, sigset_t *mask)
169{
170 unsigned long i, *s, *m, x;
171 int sig = 0;
172
173 s = pending->signal.sig;
174 m = mask->sig;
175
176
177
178
179
180 x = *s &~ *m;
181 if (x) {
182 if (x & SYNCHRONOUS_MASK)
183 x &= SYNCHRONOUS_MASK;
184 sig = ffz(~x) + 1;
185 return sig;
186 }
187
188 switch (_NSIG_WORDS) {
189 default:
190 for (i = 1; i < _NSIG_WORDS; ++i) {
191 x = *++s &~ *++m;
192 if (!x)
193 continue;
194 sig = ffz(~x) + i*_NSIG_BPW + 1;
195 break;
196 }
197 break;
198
199 case 2:
200 x = s[1] &~ m[1];
201 if (!x)
202 break;
203 sig = ffz(~x) + _NSIG_BPW + 1;
204 break;
205
206 case 1:
207
208 break;
209 }
210
211 return sig;
212}
213
214static inline void print_dropped_signal(int sig)
215{
216 static DEFINE_RATELIMIT_STATE(ratelimit_state, 5 * HZ, 10);
217
218 if (!print_fatal_signals)
219 return;
220
221 if (!__ratelimit(&ratelimit_state))
222 return;
223
224 printk(KERN_INFO "%s/%d: reached RLIMIT_SIGPENDING, dropped signal %d\n",
225 current->comm, current->pid, sig);
226}
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245bool task_set_jobctl_pending(struct task_struct *task, unsigned int mask)
246{
247 BUG_ON(mask & ~(JOBCTL_PENDING_MASK | JOBCTL_STOP_CONSUME |
248 JOBCTL_STOP_SIGMASK | JOBCTL_TRAPPING));
249 BUG_ON((mask & JOBCTL_TRAPPING) && !(mask & JOBCTL_PENDING_MASK));
250
251 if (unlikely(fatal_signal_pending(task) || (task->flags & PF_EXITING)))
252 return false;
253
254 if (mask & JOBCTL_STOP_SIGMASK)
255 task->jobctl &= ~JOBCTL_STOP_SIGMASK;
256
257 task->jobctl |= mask;
258 return true;
259}
260
261
262
263
264
265
266
267
268
269
270
271
272
273void task_clear_jobctl_trapping(struct task_struct *task)
274{
275 if (unlikely(task->jobctl & JOBCTL_TRAPPING)) {
276 task->jobctl &= ~JOBCTL_TRAPPING;
277 wake_up_bit(&task->jobctl, JOBCTL_TRAPPING_BIT);
278 }
279}
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296void task_clear_jobctl_pending(struct task_struct *task, unsigned int mask)
297{
298 BUG_ON(mask & ~JOBCTL_PENDING_MASK);
299
300 if (mask & JOBCTL_STOP_PENDING)
301 mask |= JOBCTL_STOP_CONSUME | JOBCTL_STOP_DEQUEUED;
302
303 task->jobctl &= ~mask;
304
305 if (!(task->jobctl & JOBCTL_PENDING_MASK))
306 task_clear_jobctl_trapping(task);
307}
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325static bool task_participate_group_stop(struct task_struct *task)
326{
327 struct signal_struct *sig = task->signal;
328 bool consume = task->jobctl & JOBCTL_STOP_CONSUME;
329
330 WARN_ON_ONCE(!(task->jobctl & JOBCTL_STOP_PENDING));
331
332 task_clear_jobctl_pending(task, JOBCTL_STOP_PENDING);
333
334 if (!consume)
335 return false;
336
337 if (!WARN_ON_ONCE(sig->group_stop_count == 0))
338 sig->group_stop_count--;
339
340
341
342
343
344 if (!sig->group_stop_count && !(sig->flags & SIGNAL_STOP_STOPPED)) {
345 sig->flags = SIGNAL_STOP_STOPPED;
346 return true;
347 }
348 return false;
349}
350
351
352
353
354
355
356static struct sigqueue *
357__sigqueue_alloc(int sig, struct task_struct *t, gfp_t flags, int override_rlimit)
358{
359 struct sigqueue *q = NULL;
360 struct user_struct *user;
361
362
363
364
365
366 rcu_read_lock();
367 user = get_uid(__task_cred(t)->user);
368 atomic_inc(&user->sigpending);
369 rcu_read_unlock();
370
371 if (override_rlimit ||
372 atomic_read(&user->sigpending) <=
373 task_rlimit(t, RLIMIT_SIGPENDING)) {
374 q = kmem_cache_alloc(sigqueue_cachep, flags);
375 } else {
376 print_dropped_signal(sig);
377 }
378
379 if (unlikely(q == NULL)) {
380 atomic_dec(&user->sigpending);
381 free_uid(user);
382 } else {
383 INIT_LIST_HEAD(&q->list);
384 q->flags = 0;
385 q->user = user;
386 }
387
388 return q;
389}
390
391static void __sigqueue_free(struct sigqueue *q)
392{
393 if (q->flags & SIGQUEUE_PREALLOC)
394 return;
395 atomic_dec(&q->user->sigpending);
396 free_uid(q->user);
397 kmem_cache_free(sigqueue_cachep, q);
398}
399
400void flush_sigqueue(struct sigpending *queue)
401{
402 struct sigqueue *q;
403
404 sigemptyset(&queue->signal);
405 while (!list_empty(&queue->list)) {
406 q = list_entry(queue->list.next, struct sigqueue , list);
407 list_del_init(&q->list);
408 __sigqueue_free(q);
409 }
410}
411
412
413
414
415void __flush_signals(struct task_struct *t)
416{
417 clear_tsk_thread_flag(t, TIF_SIGPENDING);
418 flush_sigqueue(&t->pending);
419 flush_sigqueue(&t->signal->shared_pending);
420}
421
422void flush_signals(struct task_struct *t)
423{
424 unsigned long flags;
425
426 spin_lock_irqsave(&t->sighand->siglock, flags);
427 __flush_signals(t);
428 spin_unlock_irqrestore(&t->sighand->siglock, flags);
429}
430
431static void __flush_itimer_signals(struct sigpending *pending)
432{
433 sigset_t signal, retain;
434 struct sigqueue *q, *n;
435
436 signal = pending->signal;
437 sigemptyset(&retain);
438
439 list_for_each_entry_safe(q, n, &pending->list, list) {
440 int sig = q->info.si_signo;
441
442 if (likely(q->info.si_code != SI_TIMER)) {
443 sigaddset(&retain, sig);
444 } else {
445 sigdelset(&signal, sig);
446 list_del_init(&q->list);
447 __sigqueue_free(q);
448 }
449 }
450
451 sigorsets(&pending->signal, &signal, &retain);
452}
453
454void flush_itimer_signals(void)
455{
456 struct task_struct *tsk = current;
457 unsigned long flags;
458
459 spin_lock_irqsave(&tsk->sighand->siglock, flags);
460 __flush_itimer_signals(&tsk->pending);
461 __flush_itimer_signals(&tsk->signal->shared_pending);
462 spin_unlock_irqrestore(&tsk->sighand->siglock, flags);
463}
464
465void ignore_signals(struct task_struct *t)
466{
467 int i;
468
469 for (i = 0; i < _NSIG; ++i)
470 t->sighand->action[i].sa.sa_handler = SIG_IGN;
471
472 flush_signals(t);
473}
474
475
476
477
478
479void
480flush_signal_handlers(struct task_struct *t, int force_default)
481{
482 int i;
483 struct k_sigaction *ka = &t->sighand->action[0];
484 for (i = _NSIG ; i != 0 ; i--) {
485 if (force_default || ka->sa.sa_handler != SIG_IGN)
486 ka->sa.sa_handler = SIG_DFL;
487 ka->sa.sa_flags = 0;
488 sigemptyset(&ka->sa.sa_mask);
489 ka++;
490 }
491}
492
493int unhandled_signal(struct task_struct *tsk, int sig)
494{
495 void __user *handler = tsk->sighand->action[sig-1].sa.sa_handler;
496 if (is_global_init(tsk))
497 return 1;
498 if (handler != SIG_IGN && handler != SIG_DFL)
499 return 0;
500
501 return !tsk->ptrace;
502}
503
504
505
506
507
508
509
510
511
512
513void
514block_all_signals(int (*notifier)(void *priv), void *priv, sigset_t *mask)
515{
516 unsigned long flags;
517
518 spin_lock_irqsave(¤t->sighand->siglock, flags);
519 current->notifier_mask = mask;
520 current->notifier_data = priv;
521 current->notifier = notifier;
522 spin_unlock_irqrestore(¤t->sighand->siglock, flags);
523}
524
525
526
527void
528unblock_all_signals(void)
529{
530 unsigned long flags;
531
532 spin_lock_irqsave(¤t->sighand->siglock, flags);
533 current->notifier = NULL;
534 current->notifier_data = NULL;
535 recalc_sigpending();
536 spin_unlock_irqrestore(¤t->sighand->siglock, flags);
537}
538
539static void collect_signal(int sig, struct sigpending *list, siginfo_t *info)
540{
541 struct sigqueue *q, *first = NULL;
542
543
544
545
546
547 list_for_each_entry(q, &list->list, list) {
548 if (q->info.si_signo == sig) {
549 if (first)
550 goto still_pending;
551 first = q;
552 }
553 }
554
555 sigdelset(&list->signal, sig);
556
557 if (first) {
558still_pending:
559 list_del_init(&first->list);
560 copy_siginfo(info, &first->info);
561 __sigqueue_free(first);
562 } else {
563
564
565
566
567
568 info->si_signo = sig;
569 info->si_errno = 0;
570 info->si_code = SI_USER;
571 info->si_pid = 0;
572 info->si_uid = 0;
573 }
574}
575
576static int __dequeue_signal(struct sigpending *pending, sigset_t *mask,
577 siginfo_t *info)
578{
579 int sig = next_signal(pending, mask);
580
581 if (sig) {
582 if (current->notifier) {
583 if (sigismember(current->notifier_mask, sig)) {
584 if (!(current->notifier)(current->notifier_data)) {
585 clear_thread_flag(TIF_SIGPENDING);
586 return 0;
587 }
588 }
589 }
590
591 collect_signal(sig, pending, info);
592 }
593
594 return sig;
595}
596
597
598
599
600
601
602
603int dequeue_signal(struct task_struct *tsk, sigset_t *mask, siginfo_t *info)
604{
605 int signr;
606
607
608
609
610 signr = __dequeue_signal(&tsk->pending, mask, info);
611 if (!signr) {
612 signr = __dequeue_signal(&tsk->signal->shared_pending,
613 mask, info);
614
615
616
617
618
619
620
621
622
623
624
625
626
627 if (unlikely(signr == SIGALRM)) {
628 struct hrtimer *tmr = &tsk->signal->real_timer;
629
630 if (!hrtimer_is_queued(tmr) &&
631 tsk->signal->it_real_incr.tv64 != 0) {
632 hrtimer_forward(tmr, tmr->base->get_time(),
633 tsk->signal->it_real_incr);
634 hrtimer_restart(tmr);
635 }
636 }
637 }
638
639 recalc_sigpending();
640 if (!signr)
641 return 0;
642
643 if (unlikely(sig_kernel_stop(signr))) {
644
645
646
647
648
649
650
651
652
653
654
655
656 current->jobctl |= JOBCTL_STOP_DEQUEUED;
657 }
658 if ((info->si_code & __SI_MASK) == __SI_TIMER && info->si_sys_private) {
659
660
661
662
663
664
665 spin_unlock(&tsk->sighand->siglock);
666 do_schedule_next_timer(info);
667 spin_lock(&tsk->sighand->siglock);
668 }
669 return signr;
670}
671
672
673
674
675
676
677
678
679
680
681
682
683void signal_wake_up_state(struct task_struct *t, unsigned int state)
684{
685 set_tsk_thread_flag(t, TIF_SIGPENDING);
686
687
688
689
690
691
692
693 if (!wake_up_state(t, state | TASK_INTERRUPTIBLE))
694 kick_process(t);
695}
696
697
698
699
700
701
702
703
704
705
706static int rm_from_queue_full(sigset_t *mask, struct sigpending *s)
707{
708 struct sigqueue *q, *n;
709 sigset_t m;
710
711 sigandsets(&m, mask, &s->signal);
712 if (sigisemptyset(&m))
713 return 0;
714
715 sigandnsets(&s->signal, &s->signal, mask);
716 list_for_each_entry_safe(q, n, &s->list, list) {
717 if (sigismember(mask, q->info.si_signo)) {
718 list_del_init(&q->list);
719 __sigqueue_free(q);
720 }
721 }
722 return 1;
723}
724
725
726
727
728
729
730static int rm_from_queue(unsigned long mask, struct sigpending *s)
731{
732 struct sigqueue *q, *n;
733
734 if (!sigtestsetmask(&s->signal, mask))
735 return 0;
736
737 sigdelsetmask(&s->signal, mask);
738 list_for_each_entry_safe(q, n, &s->list, list) {
739 if (q->info.si_signo < SIGRTMIN &&
740 (mask & sigmask(q->info.si_signo))) {
741 list_del_init(&q->list);
742 __sigqueue_free(q);
743 }
744 }
745 return 1;
746}
747
748static inline int is_si_special(const struct siginfo *info)
749{
750 return info <= SEND_SIG_FORCED;
751}
752
753static inline bool si_fromuser(const struct siginfo *info)
754{
755 return info == SEND_SIG_NOINFO ||
756 (!is_si_special(info) && SI_FROMUSER(info));
757}
758
759
760
761
762static int kill_ok_by_cred(struct task_struct *t)
763{
764 const struct cred *cred = current_cred();
765 const struct cred *tcred = __task_cred(t);
766
767 if (uid_eq(cred->euid, tcred->suid) ||
768 uid_eq(cred->euid, tcred->uid) ||
769 uid_eq(cred->uid, tcred->suid) ||
770 uid_eq(cred->uid, tcred->uid))
771 return 1;
772
773 if (ns_capable(tcred->user_ns, CAP_KILL))
774 return 1;
775
776 return 0;
777}
778
779
780
781
782
783static int check_kill_permission(int sig, struct siginfo *info,
784 struct task_struct *t)
785{
786 struct pid *sid;
787 int error;
788
789 if (!valid_signal(sig))
790 return -EINVAL;
791
792 if (!si_fromuser(info))
793 return 0;
794
795 error = audit_signal_info(sig, t);
796 if (error)
797 return error;
798
799 if (!same_thread_group(current, t) &&
800 !kill_ok_by_cred(t)) {
801 switch (sig) {
802 case SIGCONT:
803 sid = task_session(t);
804
805
806
807
808 if (!sid || sid == task_session(current))
809 break;
810 default:
811 return -EPERM;
812 }
813 }
814
815 return security_task_kill(t, info, sig, 0);
816}
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835static void ptrace_trap_notify(struct task_struct *t)
836{
837 WARN_ON_ONCE(!(t->ptrace & PT_SEIZED));
838 assert_spin_locked(&t->sighand->siglock);
839
840 task_set_jobctl_pending(t, JOBCTL_TRAP_NOTIFY);
841 ptrace_signal_wake_up(t, t->jobctl & JOBCTL_LISTENING);
842}
843
844
845
846
847
848
849
850
851
852
853
854static int prepare_signal(int sig, struct task_struct *p, bool force)
855{
856 struct signal_struct *signal = p->signal;
857 struct task_struct *t;
858
859 if (unlikely(signal->flags & SIGNAL_GROUP_EXIT)) {
860
861
862
863 } else if (sig_kernel_stop(sig)) {
864
865
866
867 rm_from_queue(sigmask(SIGCONT), &signal->shared_pending);
868 t = p;
869 do {
870 rm_from_queue(sigmask(SIGCONT), &t->pending);
871 } while_each_thread(p, t);
872 } else if (sig == SIGCONT) {
873 unsigned int why;
874
875
876
877 rm_from_queue(SIG_KERNEL_STOP_MASK, &signal->shared_pending);
878 t = p;
879 do {
880 task_clear_jobctl_pending(t, JOBCTL_STOP_PENDING);
881 rm_from_queue(SIG_KERNEL_STOP_MASK, &t->pending);
882 if (likely(!(t->ptrace & PT_SEIZED)))
883 wake_up_state(t, __TASK_STOPPED);
884 else
885 ptrace_trap_notify(t);
886 } while_each_thread(p, t);
887
888
889
890
891
892
893
894
895
896 why = 0;
897 if (signal->flags & SIGNAL_STOP_STOPPED)
898 why |= SIGNAL_CLD_CONTINUED;
899 else if (signal->group_stop_count)
900 why |= SIGNAL_CLD_STOPPED;
901
902 if (why) {
903
904
905
906
907
908 signal->flags = why | SIGNAL_STOP_CONTINUED;
909 signal->group_stop_count = 0;
910 signal->group_exit_code = 0;
911 }
912 }
913
914 return !sig_ignored(p, sig, force);
915}
916
917
918
919
920
921
922
923
924
925static inline int wants_signal(int sig, struct task_struct *p)
926{
927 if (sigismember(&p->blocked, sig))
928 return 0;
929 if (p->flags & PF_EXITING)
930 return 0;
931 if (sig == SIGKILL)
932 return 1;
933 if (task_is_stopped_or_traced(p))
934 return 0;
935 return task_curr(p) || !signal_pending(p);
936}
937
938static void complete_signal(int sig, struct task_struct *p, int group)
939{
940 struct signal_struct *signal = p->signal;
941 struct task_struct *t;
942
943
944
945
946
947
948
949 if (wants_signal(sig, p))
950 t = p;
951 else if (!group || thread_group_empty(p))
952
953
954
955
956 return;
957 else {
958
959
960
961 t = signal->curr_target;
962 while (!wants_signal(sig, t)) {
963 t = next_thread(t);
964 if (t == signal->curr_target)
965
966
967
968
969
970 return;
971 }
972 signal->curr_target = t;
973 }
974
975
976
977
978
979 if (sig_fatal(p, sig) &&
980 !(signal->flags & (SIGNAL_UNKILLABLE | SIGNAL_GROUP_EXIT)) &&
981 !sigismember(&t->real_blocked, sig) &&
982 (sig == SIGKILL || !t->ptrace)) {
983
984
985
986 if (!sig_kernel_coredump(sig)) {
987
988
989
990
991
992
993 signal->flags = SIGNAL_GROUP_EXIT;
994 signal->group_exit_code = sig;
995 signal->group_stop_count = 0;
996 t = p;
997 do {
998 task_clear_jobctl_pending(t, JOBCTL_PENDING_MASK);
999 sigaddset(&t->pending.signal, SIGKILL);
1000 signal_wake_up(t, 1);
1001 } while_each_thread(p, t);
1002 return;
1003 }
1004 }
1005
1006
1007
1008
1009
1010 signal_wake_up(t, sig == SIGKILL);
1011 return;
1012}
1013
1014static inline int legacy_queue(struct sigpending *signals, int sig)
1015{
1016 return (sig < SIGRTMIN) && sigismember(&signals->signal, sig);
1017}
1018
1019#ifdef CONFIG_USER_NS
1020static inline void userns_fixup_signal_uid(struct siginfo *info, struct task_struct *t)
1021{
1022 if (current_user_ns() == task_cred_xxx(t, user_ns))
1023 return;
1024
1025 if (SI_FROMKERNEL(info))
1026 return;
1027
1028 rcu_read_lock();
1029 info->si_uid = from_kuid_munged(task_cred_xxx(t, user_ns),
1030 make_kuid(current_user_ns(), info->si_uid));
1031 rcu_read_unlock();
1032}
1033#else
1034static inline void userns_fixup_signal_uid(struct siginfo *info, struct task_struct *t)
1035{
1036 return;
1037}
1038#endif
1039
1040static int __send_signal(int sig, struct siginfo *info, struct task_struct *t,
1041 int group, int from_ancestor_ns)
1042{
1043 struct sigpending *pending;
1044 struct sigqueue *q;
1045 int override_rlimit;
1046 int ret = 0, result;
1047
1048 assert_spin_locked(&t->sighand->siglock);
1049
1050 result = TRACE_SIGNAL_IGNORED;
1051 if (!prepare_signal(sig, t,
1052 from_ancestor_ns || (info == SEND_SIG_FORCED)))
1053 goto ret;
1054
1055 pending = group ? &t->signal->shared_pending : &t->pending;
1056
1057
1058
1059
1060
1061 result = TRACE_SIGNAL_ALREADY_PENDING;
1062 if (legacy_queue(pending, sig))
1063 goto ret;
1064
1065 result = TRACE_SIGNAL_DELIVERED;
1066
1067
1068
1069
1070 if (info == SEND_SIG_FORCED)
1071 goto out_set;
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082 if (sig < SIGRTMIN)
1083 override_rlimit = (is_si_special(info) || info->si_code >= 0);
1084 else
1085 override_rlimit = 0;
1086
1087 q = __sigqueue_alloc(sig, t, GFP_ATOMIC | __GFP_NOTRACK_FALSE_POSITIVE,
1088 override_rlimit);
1089 if (q) {
1090 list_add_tail(&q->list, &pending->list);
1091 switch ((unsigned long) info) {
1092 case (unsigned long) SEND_SIG_NOINFO:
1093 q->info.si_signo = sig;
1094 q->info.si_errno = 0;
1095 q->info.si_code = SI_USER;
1096 q->info.si_pid = task_tgid_nr_ns(current,
1097 task_active_pid_ns(t));
1098 q->info.si_uid = from_kuid_munged(current_user_ns(), current_uid());
1099 break;
1100 case (unsigned long) SEND_SIG_PRIV:
1101 q->info.si_signo = sig;
1102 q->info.si_errno = 0;
1103 q->info.si_code = SI_KERNEL;
1104 q->info.si_pid = 0;
1105 q->info.si_uid = 0;
1106 break;
1107 default:
1108 copy_siginfo(&q->info, info);
1109 if (from_ancestor_ns)
1110 q->info.si_pid = 0;
1111 break;
1112 }
1113
1114 userns_fixup_signal_uid(&q->info, t);
1115
1116 } else if (!is_si_special(info)) {
1117 if (sig >= SIGRTMIN && info->si_code != SI_USER) {
1118
1119
1120
1121
1122
1123 result = TRACE_SIGNAL_OVERFLOW_FAIL;
1124 ret = -EAGAIN;
1125 goto ret;
1126 } else {
1127
1128
1129
1130
1131 result = TRACE_SIGNAL_LOSE_INFO;
1132 }
1133 }
1134
1135out_set:
1136 signalfd_notify(t, sig);
1137 sigaddset(&pending->signal, sig);
1138 complete_signal(sig, t, group);
1139ret:
1140 trace_signal_generate(sig, info, t, group, result);
1141 return ret;
1142}
1143
1144static int send_signal(int sig, struct siginfo *info, struct task_struct *t,
1145 int group)
1146{
1147 int from_ancestor_ns = 0;
1148
1149#ifdef CONFIG_PID_NS
1150 from_ancestor_ns = si_fromuser(info) &&
1151 !task_pid_nr_ns(current, task_active_pid_ns(t));
1152#endif
1153
1154 return __send_signal(sig, info, t, group, from_ancestor_ns);
1155}
1156
1157static void print_fatal_signal(int signr)
1158{
1159 struct pt_regs *regs = signal_pt_regs();
1160 printk("%s/%d: potentially unexpected fatal signal %d.\n",
1161 current->comm, task_pid_nr(current), signr);
1162
1163#if defined(__i386__) && !defined(__arch_um__)
1164 printk("code at %08lx: ", regs->ip);
1165 {
1166 int i;
1167 for (i = 0; i < 16; i++) {
1168 unsigned char insn;
1169
1170 if (get_user(insn, (unsigned char *)(regs->ip + i)))
1171 break;
1172 printk("%02x ", insn);
1173 }
1174 }
1175#endif
1176 printk("\n");
1177 preempt_disable();
1178 show_regs(regs);
1179 preempt_enable();
1180}
1181
1182static int __init setup_print_fatal_signals(char *str)
1183{
1184 get_option (&str, &print_fatal_signals);
1185
1186 return 1;
1187}
1188
1189__setup("print-fatal-signals=", setup_print_fatal_signals);
1190
1191int
1192__group_send_sig_info(int sig, struct siginfo *info, struct task_struct *p)
1193{
1194 return send_signal(sig, info, p, 1);
1195}
1196
1197static int
1198specific_send_sig_info(int sig, struct siginfo *info, struct task_struct *t)
1199{
1200 return send_signal(sig, info, t, 0);
1201}
1202
1203int do_send_sig_info(int sig, struct siginfo *info, struct task_struct *p,
1204 bool group)
1205{
1206 unsigned long flags;
1207 int ret = -ESRCH;
1208
1209 if (lock_task_sighand(p, &flags)) {
1210 ret = send_signal(sig, info, p, group);
1211 unlock_task_sighand(p, &flags);
1212 }
1213
1214 return ret;
1215}
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228int
1229force_sig_info(int sig, struct siginfo *info, struct task_struct *t)
1230{
1231 unsigned long int flags;
1232 int ret, blocked, ignored;
1233 struct k_sigaction *action;
1234
1235 spin_lock_irqsave(&t->sighand->siglock, flags);
1236 action = &t->sighand->action[sig-1];
1237 ignored = action->sa.sa_handler == SIG_IGN;
1238 blocked = sigismember(&t->blocked, sig);
1239 if (blocked || ignored) {
1240 action->sa.sa_handler = SIG_DFL;
1241 if (blocked) {
1242 sigdelset(&t->blocked, sig);
1243 recalc_sigpending_and_wake(t);
1244 }
1245 }
1246 if (action->sa.sa_handler == SIG_DFL)
1247 t->signal->flags &= ~SIGNAL_UNKILLABLE;
1248 ret = specific_send_sig_info(sig, info, t);
1249 spin_unlock_irqrestore(&t->sighand->siglock, flags);
1250
1251 return ret;
1252}
1253
1254
1255
1256
1257int zap_other_threads(struct task_struct *p)
1258{
1259 struct task_struct *t = p;
1260 int count = 0;
1261
1262 p->signal->group_stop_count = 0;
1263
1264 while_each_thread(p, t) {
1265 task_clear_jobctl_pending(t, JOBCTL_PENDING_MASK);
1266 count++;
1267
1268
1269 if (t->exit_state)
1270 continue;
1271 sigaddset(&t->pending.signal, SIGKILL);
1272 signal_wake_up(t, 1);
1273 }
1274
1275 return count;
1276}
1277
1278struct sighand_struct *__lock_task_sighand(struct task_struct *tsk,
1279 unsigned long *flags)
1280{
1281 struct sighand_struct *sighand;
1282
1283 for (;;) {
1284 local_irq_save(*flags);
1285 rcu_read_lock();
1286 sighand = rcu_dereference(tsk->sighand);
1287 if (unlikely(sighand == NULL)) {
1288 rcu_read_unlock();
1289 local_irq_restore(*flags);
1290 break;
1291 }
1292
1293 spin_lock(&sighand->siglock);
1294 if (likely(sighand == tsk->sighand)) {
1295 rcu_read_unlock();
1296 break;
1297 }
1298 spin_unlock(&sighand->siglock);
1299 rcu_read_unlock();
1300 local_irq_restore(*flags);
1301 }
1302
1303 return sighand;
1304}
1305
1306
1307
1308
1309int group_send_sig_info(int sig, struct siginfo *info, struct task_struct *p)
1310{
1311 int ret;
1312
1313 rcu_read_lock();
1314 ret = check_kill_permission(sig, info, p);
1315 rcu_read_unlock();
1316
1317 if (!ret && sig)
1318 ret = do_send_sig_info(sig, info, p, true);
1319
1320 return ret;
1321}
1322
1323
1324
1325
1326
1327
1328int __kill_pgrp_info(int sig, struct siginfo *info, struct pid *pgrp)
1329{
1330 struct task_struct *p = NULL;
1331 int retval, success;
1332
1333 success = 0;
1334 retval = -ESRCH;
1335 do_each_pid_task(pgrp, PIDTYPE_PGID, p) {
1336 int err = group_send_sig_info(sig, info, p);
1337 success |= !err;
1338 retval = err;
1339 } while_each_pid_task(pgrp, PIDTYPE_PGID, p);
1340 return success ? 0 : retval;
1341}
1342
1343int kill_pid_info(int sig, struct siginfo *info, struct pid *pid)
1344{
1345 int error = -ESRCH;
1346 struct task_struct *p;
1347
1348 rcu_read_lock();
1349retry:
1350 p = pid_task(pid, PIDTYPE_PID);
1351 if (p) {
1352 error = group_send_sig_info(sig, info, p);
1353 if (unlikely(error == -ESRCH))
1354
1355
1356
1357
1358
1359
1360 goto retry;
1361 }
1362 rcu_read_unlock();
1363
1364 return error;
1365}
1366
1367int kill_proc_info(int sig, struct siginfo *info, pid_t pid)
1368{
1369 int error;
1370 rcu_read_lock();
1371 error = kill_pid_info(sig, info, find_vpid(pid));
1372 rcu_read_unlock();
1373 return error;
1374}
1375
1376static int kill_as_cred_perm(const struct cred *cred,
1377 struct task_struct *target)
1378{
1379 const struct cred *pcred = __task_cred(target);
1380 if (!uid_eq(cred->euid, pcred->suid) && !uid_eq(cred->euid, pcred->uid) &&
1381 !uid_eq(cred->uid, pcred->suid) && !uid_eq(cred->uid, pcred->uid))
1382 return 0;
1383 return 1;
1384}
1385
1386
1387int kill_pid_info_as_cred(int sig, struct siginfo *info, struct pid *pid,
1388 const struct cred *cred, u32 secid)
1389{
1390 int ret = -EINVAL;
1391 struct task_struct *p;
1392 unsigned long flags;
1393
1394 if (!valid_signal(sig))
1395 return ret;
1396
1397 rcu_read_lock();
1398 p = pid_task(pid, PIDTYPE_PID);
1399 if (!p) {
1400 ret = -ESRCH;
1401 goto out_unlock;
1402 }
1403 if (si_fromuser(info) && !kill_as_cred_perm(cred, p)) {
1404 ret = -EPERM;
1405 goto out_unlock;
1406 }
1407 ret = security_task_kill(p, info, sig, secid);
1408 if (ret)
1409 goto out_unlock;
1410
1411 if (sig) {
1412 if (lock_task_sighand(p, &flags)) {
1413 ret = __send_signal(sig, info, p, 1, 0);
1414 unlock_task_sighand(p, &flags);
1415 } else
1416 ret = -ESRCH;
1417 }
1418out_unlock:
1419 rcu_read_unlock();
1420 return ret;
1421}
1422EXPORT_SYMBOL_GPL(kill_pid_info_as_cred);
1423
1424
1425
1426
1427
1428
1429
1430
1431static int kill_something_info(int sig, struct siginfo *info, pid_t pid)
1432{
1433 int ret;
1434
1435 if (pid > 0) {
1436 rcu_read_lock();
1437 ret = kill_pid_info(sig, info, find_vpid(pid));
1438 rcu_read_unlock();
1439 return ret;
1440 }
1441
1442 read_lock(&tasklist_lock);
1443 if (pid != -1) {
1444 ret = __kill_pgrp_info(sig, info,
1445 pid ? find_vpid(-pid) : task_pgrp(current));
1446 } else {
1447 int retval = 0, count = 0;
1448 struct task_struct * p;
1449
1450 for_each_process(p) {
1451 if (task_pid_vnr(p) > 1 &&
1452 !same_thread_group(p, current)) {
1453 int err = group_send_sig_info(sig, info, p);
1454 ++count;
1455 if (err != -EPERM)
1456 retval = err;
1457 }
1458 }
1459 ret = count ? retval : -ESRCH;
1460 }
1461 read_unlock(&tasklist_lock);
1462
1463 return ret;
1464}
1465
1466
1467
1468
1469
1470int send_sig_info(int sig, struct siginfo *info, struct task_struct *p)
1471{
1472
1473
1474
1475
1476 if (!valid_signal(sig))
1477 return -EINVAL;
1478
1479 return do_send_sig_info(sig, info, p, false);
1480}
1481
1482#define __si_special(priv) \
1483 ((priv) ? SEND_SIG_PRIV : SEND_SIG_NOINFO)
1484
1485int
1486send_sig(int sig, struct task_struct *p, int priv)
1487{
1488 return send_sig_info(sig, __si_special(priv), p);
1489}
1490
1491void
1492force_sig(int sig, struct task_struct *p)
1493{
1494 force_sig_info(sig, SEND_SIG_PRIV, p);
1495}
1496
1497
1498
1499
1500
1501
1502
1503int
1504force_sigsegv(int sig, struct task_struct *p)
1505{
1506 if (sig == SIGSEGV) {
1507 unsigned long flags;
1508 spin_lock_irqsave(&p->sighand->siglock, flags);
1509 p->sighand->action[sig - 1].sa.sa_handler = SIG_DFL;
1510 spin_unlock_irqrestore(&p->sighand->siglock, flags);
1511 }
1512 force_sig(SIGSEGV, p);
1513 return 0;
1514}
1515
1516int kill_pgrp(struct pid *pid, int sig, int priv)
1517{
1518 int ret;
1519
1520 read_lock(&tasklist_lock);
1521 ret = __kill_pgrp_info(sig, __si_special(priv), pid);
1522 read_unlock(&tasklist_lock);
1523
1524 return ret;
1525}
1526EXPORT_SYMBOL(kill_pgrp);
1527
1528int kill_pid(struct pid *pid, int sig, int priv)
1529{
1530 return kill_pid_info(sig, __si_special(priv), pid);
1531}
1532EXPORT_SYMBOL(kill_pid);
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543struct sigqueue *sigqueue_alloc(void)
1544{
1545 struct sigqueue *q = __sigqueue_alloc(-1, current, GFP_KERNEL, 0);
1546
1547 if (q)
1548 q->flags |= SIGQUEUE_PREALLOC;
1549
1550 return q;
1551}
1552
1553void sigqueue_free(struct sigqueue *q)
1554{
1555 unsigned long flags;
1556 spinlock_t *lock = ¤t->sighand->siglock;
1557
1558 BUG_ON(!(q->flags & SIGQUEUE_PREALLOC));
1559
1560
1561
1562
1563
1564 spin_lock_irqsave(lock, flags);
1565 q->flags &= ~SIGQUEUE_PREALLOC;
1566
1567
1568
1569
1570 if (!list_empty(&q->list))
1571 q = NULL;
1572 spin_unlock_irqrestore(lock, flags);
1573
1574 if (q)
1575 __sigqueue_free(q);
1576}
1577
1578int send_sigqueue(struct sigqueue *q, struct task_struct *t, int group)
1579{
1580 int sig = q->info.si_signo;
1581 struct sigpending *pending;
1582 unsigned long flags;
1583 int ret, result;
1584
1585 BUG_ON(!(q->flags & SIGQUEUE_PREALLOC));
1586
1587 ret = -1;
1588 if (!likely(lock_task_sighand(t, &flags)))
1589 goto ret;
1590
1591 ret = 1;
1592 result = TRACE_SIGNAL_IGNORED;
1593 if (!prepare_signal(sig, t, false))
1594 goto out;
1595
1596 ret = 0;
1597 if (unlikely(!list_empty(&q->list))) {
1598
1599
1600
1601
1602 BUG_ON(q->info.si_code != SI_TIMER);
1603 q->info.si_overrun++;
1604 result = TRACE_SIGNAL_ALREADY_PENDING;
1605 goto out;
1606 }
1607 q->info.si_overrun = 0;
1608
1609 signalfd_notify(t, sig);
1610 pending = group ? &t->signal->shared_pending : &t->pending;
1611 list_add_tail(&q->list, &pending->list);
1612 sigaddset(&pending->signal, sig);
1613 complete_signal(sig, t, group);
1614 result = TRACE_SIGNAL_DELIVERED;
1615out:
1616 trace_signal_generate(sig, &q->info, t, group, result);
1617 unlock_task_sighand(t, &flags);
1618ret:
1619 return ret;
1620}
1621
1622
1623
1624
1625
1626
1627
1628
1629bool do_notify_parent(struct task_struct *tsk, int sig)
1630{
1631 struct siginfo info;
1632 unsigned long flags;
1633 struct sighand_struct *psig;
1634 bool autoreap = false;
1635
1636 BUG_ON(sig == -1);
1637
1638
1639 BUG_ON(task_is_stopped_or_traced(tsk));
1640
1641 BUG_ON(!tsk->ptrace &&
1642 (tsk->group_leader != tsk || !thread_group_empty(tsk)));
1643
1644 if (sig != SIGCHLD) {
1645
1646
1647
1648
1649 if (tsk->parent_exec_id != tsk->parent->self_exec_id)
1650 sig = SIGCHLD;
1651 }
1652
1653 info.si_signo = sig;
1654 info.si_errno = 0;
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666 rcu_read_lock();
1667 info.si_pid = task_pid_nr_ns(tsk, task_active_pid_ns(tsk->parent));
1668 info.si_uid = from_kuid_munged(task_cred_xxx(tsk->parent, user_ns),
1669 task_uid(tsk));
1670 rcu_read_unlock();
1671
1672 info.si_utime = cputime_to_clock_t(tsk->utime + tsk->signal->utime);
1673 info.si_stime = cputime_to_clock_t(tsk->stime + tsk->signal->stime);
1674
1675 info.si_status = tsk->exit_code & 0x7f;
1676 if (tsk->exit_code & 0x80)
1677 info.si_code = CLD_DUMPED;
1678 else if (tsk->exit_code & 0x7f)
1679 info.si_code = CLD_KILLED;
1680 else {
1681 info.si_code = CLD_EXITED;
1682 info.si_status = tsk->exit_code >> 8;
1683 }
1684
1685 psig = tsk->parent->sighand;
1686 spin_lock_irqsave(&psig->siglock, flags);
1687 if (!tsk->ptrace && sig == SIGCHLD &&
1688 (psig->action[SIGCHLD-1].sa.sa_handler == SIG_IGN ||
1689 (psig->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDWAIT))) {
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705 autoreap = true;
1706 if (psig->action[SIGCHLD-1].sa.sa_handler == SIG_IGN)
1707 sig = 0;
1708 }
1709 if (valid_signal(sig) && sig)
1710 __group_send_sig_info(sig, &info, tsk->parent);
1711 __wake_up_parent(tsk, tsk->parent);
1712 spin_unlock_irqrestore(&psig->siglock, flags);
1713
1714 return autoreap;
1715}
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730static void do_notify_parent_cldstop(struct task_struct *tsk,
1731 bool for_ptracer, int why)
1732{
1733 struct siginfo info;
1734 unsigned long flags;
1735 struct task_struct *parent;
1736 struct sighand_struct *sighand;
1737
1738 if (for_ptracer) {
1739 parent = tsk->parent;
1740 } else {
1741 tsk = tsk->group_leader;
1742 parent = tsk->real_parent;
1743 }
1744
1745 info.si_signo = SIGCHLD;
1746 info.si_errno = 0;
1747
1748
1749
1750 rcu_read_lock();
1751 info.si_pid = task_pid_nr_ns(tsk, task_active_pid_ns(parent));
1752 info.si_uid = from_kuid_munged(task_cred_xxx(parent, user_ns), task_uid(tsk));
1753 rcu_read_unlock();
1754
1755 info.si_utime = cputime_to_clock_t(tsk->utime);
1756 info.si_stime = cputime_to_clock_t(tsk->stime);
1757
1758 info.si_code = why;
1759 switch (why) {
1760 case CLD_CONTINUED:
1761 info.si_status = SIGCONT;
1762 break;
1763 case CLD_STOPPED:
1764 info.si_status = tsk->signal->group_exit_code & 0x7f;
1765 break;
1766 case CLD_TRAPPED:
1767 info.si_status = tsk->exit_code & 0x7f;
1768 break;
1769 default:
1770 BUG();
1771 }
1772
1773 sighand = parent->sighand;
1774 spin_lock_irqsave(&sighand->siglock, flags);
1775 if (sighand->action[SIGCHLD-1].sa.sa_handler != SIG_IGN &&
1776 !(sighand->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDSTOP))
1777 __group_send_sig_info(SIGCHLD, &info, parent);
1778
1779
1780
1781 __wake_up_parent(tsk, parent);
1782 spin_unlock_irqrestore(&sighand->siglock, flags);
1783}
1784
1785static inline int may_ptrace_stop(void)
1786{
1787 if (!likely(current->ptrace))
1788 return 0;
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802 if (unlikely(current->mm->core_state) &&
1803 unlikely(current->mm == current->parent->mm))
1804 return 0;
1805
1806 return 1;
1807}
1808
1809
1810
1811
1812
1813static int sigkill_pending(struct task_struct *tsk)
1814{
1815 return sigismember(&tsk->pending.signal, SIGKILL) ||
1816 sigismember(&tsk->signal->shared_pending.signal, SIGKILL);
1817}
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830static void ptrace_stop(int exit_code, int why, int clear_code, siginfo_t *info)
1831 __releases(¤t->sighand->siglock)
1832 __acquires(¤t->sighand->siglock)
1833{
1834 bool gstop_done = false;
1835
1836 if (arch_ptrace_stop_needed(exit_code, info)) {
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848 spin_unlock_irq(¤t->sighand->siglock);
1849 arch_ptrace_stop(exit_code, info);
1850 spin_lock_irq(¤t->sighand->siglock);
1851 if (sigkill_pending(current))
1852 return;
1853 }
1854
1855
1856
1857
1858
1859
1860
1861
1862 set_current_state(TASK_TRACED);
1863
1864 current->last_siginfo = info;
1865 current->exit_code = exit_code;
1866
1867
1868
1869
1870
1871
1872
1873
1874 if (why == CLD_STOPPED && (current->jobctl & JOBCTL_STOP_PENDING))
1875 gstop_done = task_participate_group_stop(current);
1876
1877
1878 task_clear_jobctl_pending(current, JOBCTL_TRAP_STOP);
1879 if (info && info->si_code >> 8 == PTRACE_EVENT_STOP)
1880 task_clear_jobctl_pending(current, JOBCTL_TRAP_NOTIFY);
1881
1882
1883 task_clear_jobctl_trapping(current);
1884
1885 spin_unlock_irq(¤t->sighand->siglock);
1886 read_lock(&tasklist_lock);
1887 if (may_ptrace_stop()) {
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898 do_notify_parent_cldstop(current, true, why);
1899 if (gstop_done && ptrace_reparented(current))
1900 do_notify_parent_cldstop(current, false, why);
1901
1902
1903
1904
1905
1906
1907
1908 preempt_disable();
1909 read_unlock(&tasklist_lock);
1910 preempt_enable_no_resched();
1911 freezable_schedule();
1912 } else {
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923 if (gstop_done)
1924 do_notify_parent_cldstop(current, false, why);
1925
1926
1927 __set_current_state(TASK_RUNNING);
1928 if (clear_code)
1929 current->exit_code = 0;
1930 read_unlock(&tasklist_lock);
1931 }
1932
1933
1934
1935
1936
1937
1938 spin_lock_irq(¤t->sighand->siglock);
1939 current->last_siginfo = NULL;
1940
1941
1942 current->jobctl &= ~JOBCTL_LISTENING;
1943
1944
1945
1946
1947
1948
1949 recalc_sigpending_tsk(current);
1950}
1951
1952static void ptrace_do_notify(int signr, int exit_code, int why)
1953{
1954 siginfo_t info;
1955
1956 memset(&info, 0, sizeof info);
1957 info.si_signo = signr;
1958 info.si_code = exit_code;
1959 info.si_pid = task_pid_vnr(current);
1960 info.si_uid = from_kuid_munged(current_user_ns(), current_uid());
1961
1962
1963 ptrace_stop(exit_code, why, 1, &info);
1964}
1965
1966void ptrace_notify(int exit_code)
1967{
1968 BUG_ON((exit_code & (0x7f | ~0xffff)) != SIGTRAP);
1969 if (unlikely(current->task_works))
1970 task_work_run();
1971
1972 spin_lock_irq(¤t->sighand->siglock);
1973 ptrace_do_notify(SIGTRAP, exit_code, CLD_TRAPPED);
1974 spin_unlock_irq(¤t->sighand->siglock);
1975}
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999static bool do_signal_stop(int signr)
2000 __releases(¤t->sighand->siglock)
2001{
2002 struct signal_struct *sig = current->signal;
2003
2004 if (!(current->jobctl & JOBCTL_STOP_PENDING)) {
2005 unsigned int gstop = JOBCTL_STOP_PENDING | JOBCTL_STOP_CONSUME;
2006 struct task_struct *t;
2007
2008
2009 WARN_ON_ONCE(signr & ~JOBCTL_STOP_SIGMASK);
2010
2011 if (!likely(current->jobctl & JOBCTL_STOP_DEQUEUED) ||
2012 unlikely(signal_group_exit(sig)))
2013 return false;
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033 if (!(sig->flags & SIGNAL_STOP_STOPPED))
2034 sig->group_exit_code = signr;
2035
2036 sig->group_stop_count = 0;
2037
2038 if (task_set_jobctl_pending(current, signr | gstop))
2039 sig->group_stop_count++;
2040
2041 for (t = next_thread(current); t != current;
2042 t = next_thread(t)) {
2043
2044
2045
2046
2047
2048 if (!task_is_stopped(t) &&
2049 task_set_jobctl_pending(t, signr | gstop)) {
2050 sig->group_stop_count++;
2051 if (likely(!(t->ptrace & PT_SEIZED)))
2052 signal_wake_up(t, 0);
2053 else
2054 ptrace_trap_notify(t);
2055 }
2056 }
2057 }
2058
2059 if (likely(!current->ptrace)) {
2060 int notify = 0;
2061
2062
2063
2064
2065
2066
2067 if (task_participate_group_stop(current))
2068 notify = CLD_STOPPED;
2069
2070 __set_current_state(TASK_STOPPED);
2071 spin_unlock_irq(¤t->sighand->siglock);
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082 if (notify) {
2083 read_lock(&tasklist_lock);
2084 do_notify_parent_cldstop(current, false, notify);
2085 read_unlock(&tasklist_lock);
2086 }
2087
2088
2089 freezable_schedule();
2090 return true;
2091 } else {
2092
2093
2094
2095
2096 task_set_jobctl_pending(current, JOBCTL_TRAP_STOP);
2097 return false;
2098 }
2099}
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116static void do_jobctl_trap(void)
2117{
2118 struct signal_struct *signal = current->signal;
2119 int signr = current->jobctl & JOBCTL_STOP_SIGMASK;
2120
2121 if (current->ptrace & PT_SEIZED) {
2122 if (!signal->group_stop_count &&
2123 !(signal->flags & SIGNAL_STOP_STOPPED))
2124 signr = SIGTRAP;
2125 WARN_ON_ONCE(!signr);
2126 ptrace_do_notify(signr, signr | (PTRACE_EVENT_STOP << 8),
2127 CLD_STOPPED);
2128 } else {
2129 WARN_ON_ONCE(!signr);
2130 ptrace_stop(signr, CLD_STOPPED, 0, NULL);
2131 current->exit_code = 0;
2132 }
2133}
2134
2135static int ptrace_signal(int signr, siginfo_t *info)
2136{
2137 ptrace_signal_deliver();
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147 current->jobctl |= JOBCTL_STOP_DEQUEUED;
2148 ptrace_stop(signr, CLD_TRAPPED, 0, info);
2149
2150
2151 signr = current->exit_code;
2152 if (signr == 0)
2153 return signr;
2154
2155 current->exit_code = 0;
2156
2157
2158
2159
2160
2161
2162
2163 if (signr != info->si_signo) {
2164 info->si_signo = signr;
2165 info->si_errno = 0;
2166 info->si_code = SI_USER;
2167 rcu_read_lock();
2168 info->si_pid = task_pid_vnr(current->parent);
2169 info->si_uid = from_kuid_munged(current_user_ns(),
2170 task_uid(current->parent));
2171 rcu_read_unlock();
2172 }
2173
2174
2175 if (sigismember(¤t->blocked, signr)) {
2176 specific_send_sig_info(signr, info, current);
2177 signr = 0;
2178 }
2179
2180 return signr;
2181}
2182
2183int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka,
2184 struct pt_regs *regs, void *cookie)
2185{
2186 struct sighand_struct *sighand = current->sighand;
2187 struct signal_struct *signal = current->signal;
2188 int signr;
2189
2190 if (unlikely(current->task_works))
2191 task_work_run();
2192
2193 if (unlikely(uprobe_deny_signal()))
2194 return 0;
2195
2196
2197
2198
2199
2200
2201 try_to_freeze();
2202
2203relock:
2204 spin_lock_irq(&sighand->siglock);
2205
2206
2207
2208
2209
2210 if (unlikely(signal->flags & SIGNAL_CLD_MASK)) {
2211 int why;
2212
2213 if (signal->flags & SIGNAL_CLD_CONTINUED)
2214 why = CLD_CONTINUED;
2215 else
2216 why = CLD_STOPPED;
2217
2218 signal->flags &= ~SIGNAL_CLD_MASK;
2219
2220 spin_unlock_irq(&sighand->siglock);
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230 read_lock(&tasklist_lock);
2231 do_notify_parent_cldstop(current, false, why);
2232
2233 if (ptrace_reparented(current->group_leader))
2234 do_notify_parent_cldstop(current->group_leader,
2235 true, why);
2236 read_unlock(&tasklist_lock);
2237
2238 goto relock;
2239 }
2240
2241 for (;;) {
2242 struct k_sigaction *ka;
2243
2244 if (unlikely(current->jobctl & JOBCTL_STOP_PENDING) &&
2245 do_signal_stop(0))
2246 goto relock;
2247
2248 if (unlikely(current->jobctl & JOBCTL_TRAP_MASK)) {
2249 do_jobctl_trap();
2250 spin_unlock_irq(&sighand->siglock);
2251 goto relock;
2252 }
2253
2254 signr = dequeue_signal(current, ¤t->blocked, info);
2255
2256 if (!signr)
2257 break;
2258
2259 if (unlikely(current->ptrace) && signr != SIGKILL) {
2260 signr = ptrace_signal(signr, info);
2261 if (!signr)
2262 continue;
2263 }
2264
2265 ka = &sighand->action[signr-1];
2266
2267
2268 trace_signal_deliver(signr, info, ka);
2269
2270 if (ka->sa.sa_handler == SIG_IGN)
2271 continue;
2272 if (ka->sa.sa_handler != SIG_DFL) {
2273
2274 *return_ka = *ka;
2275
2276 if (ka->sa.sa_flags & SA_ONESHOT)
2277 ka->sa.sa_handler = SIG_DFL;
2278
2279 break;
2280 }
2281
2282
2283
2284
2285 if (sig_kernel_ignore(signr))
2286 continue;
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298 if (unlikely(signal->flags & SIGNAL_UNKILLABLE) &&
2299 !sig_kernel_only(signr))
2300 continue;
2301
2302 if (sig_kernel_stop(signr)) {
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313 if (signr != SIGSTOP) {
2314 spin_unlock_irq(&sighand->siglock);
2315
2316
2317
2318 if (is_current_pgrp_orphaned())
2319 goto relock;
2320
2321 spin_lock_irq(&sighand->siglock);
2322 }
2323
2324 if (likely(do_signal_stop(info->si_signo))) {
2325
2326 goto relock;
2327 }
2328
2329
2330
2331
2332
2333 continue;
2334 }
2335
2336 spin_unlock_irq(&sighand->siglock);
2337
2338
2339
2340
2341 current->flags |= PF_SIGNALED;
2342
2343 if (sig_kernel_coredump(signr)) {
2344 if (print_fatal_signals)
2345 print_fatal_signal(info->si_signo);
2346
2347
2348
2349
2350
2351
2352
2353
2354 do_coredump(info);
2355 }
2356
2357
2358
2359
2360 do_group_exit(info->si_signo);
2361
2362 }
2363 spin_unlock_irq(&sighand->siglock);
2364 return signr;
2365}
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380void signal_delivered(int sig, siginfo_t *info, struct k_sigaction *ka,
2381 struct pt_regs *regs, int stepping)
2382{
2383 sigset_t blocked;
2384
2385
2386
2387
2388
2389 clear_restore_sigmask();
2390
2391 sigorsets(&blocked, ¤t->blocked, &ka->sa.sa_mask);
2392 if (!(ka->sa.sa_flags & SA_NODEFER))
2393 sigaddset(&blocked, sig);
2394 set_current_blocked(&blocked);
2395 tracehook_signal_handler(sig, info, ka, regs, stepping);
2396}
2397
2398
2399
2400
2401
2402
2403static void retarget_shared_pending(struct task_struct *tsk, sigset_t *which)
2404{
2405 sigset_t retarget;
2406 struct task_struct *t;
2407
2408 sigandsets(&retarget, &tsk->signal->shared_pending.signal, which);
2409 if (sigisemptyset(&retarget))
2410 return;
2411
2412 t = tsk;
2413 while_each_thread(tsk, t) {
2414 if (t->flags & PF_EXITING)
2415 continue;
2416
2417 if (!has_pending_signals(&retarget, &t->blocked))
2418 continue;
2419
2420 sigandsets(&retarget, &retarget, &t->blocked);
2421
2422 if (!signal_pending(t))
2423 signal_wake_up(t, 0);
2424
2425 if (sigisemptyset(&retarget))
2426 break;
2427 }
2428}
2429
2430void exit_signals(struct task_struct *tsk)
2431{
2432 int group_stop = 0;
2433 sigset_t unblocked;
2434
2435
2436
2437
2438
2439 threadgroup_change_begin(tsk);
2440
2441 if (thread_group_empty(tsk) || signal_group_exit(tsk->signal)) {
2442 tsk->flags |= PF_EXITING;
2443 threadgroup_change_end(tsk);
2444 return;
2445 }
2446
2447 spin_lock_irq(&tsk->sighand->siglock);
2448
2449
2450
2451
2452 tsk->flags |= PF_EXITING;
2453
2454 threadgroup_change_end(tsk);
2455
2456 if (!signal_pending(tsk))
2457 goto out;
2458
2459 unblocked = tsk->blocked;
2460 signotset(&unblocked);
2461 retarget_shared_pending(tsk, &unblocked);
2462
2463 if (unlikely(tsk->jobctl & JOBCTL_STOP_PENDING) &&
2464 task_participate_group_stop(tsk))
2465 group_stop = CLD_STOPPED;
2466out:
2467 spin_unlock_irq(&tsk->sighand->siglock);
2468
2469
2470
2471
2472
2473 if (unlikely(group_stop)) {
2474 read_lock(&tasklist_lock);
2475 do_notify_parent_cldstop(tsk, false, group_stop);
2476 read_unlock(&tasklist_lock);
2477 }
2478}
2479
2480EXPORT_SYMBOL(recalc_sigpending);
2481EXPORT_SYMBOL_GPL(dequeue_signal);
2482EXPORT_SYMBOL(flush_signals);
2483EXPORT_SYMBOL(force_sig);
2484EXPORT_SYMBOL(send_sig);
2485EXPORT_SYMBOL(send_sig_info);
2486EXPORT_SYMBOL(sigprocmask);
2487EXPORT_SYMBOL(block_all_signals);
2488EXPORT_SYMBOL(unblock_all_signals);
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498SYSCALL_DEFINE0(restart_syscall)
2499{
2500 struct restart_block *restart = ¤t_thread_info()->restart_block;
2501 return restart->fn(restart);
2502}
2503
2504long do_no_restart_syscall(struct restart_block *param)
2505{
2506 return -EINTR;
2507}
2508
2509static void __set_task_blocked(struct task_struct *tsk, const sigset_t *newset)
2510{
2511 if (signal_pending(tsk) && !thread_group_empty(tsk)) {
2512 sigset_t newblocked;
2513
2514 sigandnsets(&newblocked, newset, ¤t->blocked);
2515 retarget_shared_pending(tsk, &newblocked);
2516 }
2517 tsk->blocked = *newset;
2518 recalc_sigpending();
2519}
2520
2521
2522
2523
2524
2525
2526
2527
2528void set_current_blocked(sigset_t *newset)
2529{
2530 sigdelsetmask(newset, sigmask(SIGKILL) | sigmask(SIGSTOP));
2531 __set_current_blocked(newset);
2532}
2533
2534void __set_current_blocked(const sigset_t *newset)
2535{
2536 struct task_struct *tsk = current;
2537
2538 spin_lock_irq(&tsk->sighand->siglock);
2539 __set_task_blocked(tsk, newset);
2540 spin_unlock_irq(&tsk->sighand->siglock);
2541}
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551int sigprocmask(int how, sigset_t *set, sigset_t *oldset)
2552{
2553 struct task_struct *tsk = current;
2554 sigset_t newset;
2555
2556
2557 if (oldset)
2558 *oldset = tsk->blocked;
2559
2560 switch (how) {
2561 case SIG_BLOCK:
2562 sigorsets(&newset, &tsk->blocked, set);
2563 break;
2564 case SIG_UNBLOCK:
2565 sigandnsets(&newset, &tsk->blocked, set);
2566 break;
2567 case SIG_SETMASK:
2568 newset = *set;
2569 break;
2570 default:
2571 return -EINVAL;
2572 }
2573
2574 __set_current_blocked(&newset);
2575 return 0;
2576}
2577
2578
2579
2580
2581
2582
2583
2584
2585SYSCALL_DEFINE4(rt_sigprocmask, int, how, sigset_t __user *, nset,
2586 sigset_t __user *, oset, size_t, sigsetsize)
2587{
2588 sigset_t old_set, new_set;
2589 int error;
2590
2591
2592 if (sigsetsize != sizeof(sigset_t))
2593 return -EINVAL;
2594
2595 old_set = current->blocked;
2596
2597 if (nset) {
2598 if (copy_from_user(&new_set, nset, sizeof(sigset_t)))
2599 return -EFAULT;
2600 sigdelsetmask(&new_set, sigmask(SIGKILL)|sigmask(SIGSTOP));
2601
2602 error = sigprocmask(how, &new_set, NULL);
2603 if (error)
2604 return error;
2605 }
2606
2607 if (oset) {
2608 if (copy_to_user(oset, &old_set, sizeof(sigset_t)))
2609 return -EFAULT;
2610 }
2611
2612 return 0;
2613}
2614
2615long do_sigpending(void __user *set, unsigned long sigsetsize)
2616{
2617 long error = -EINVAL;
2618 sigset_t pending;
2619
2620 if (sigsetsize > sizeof(sigset_t))
2621 goto out;
2622
2623 spin_lock_irq(¤t->sighand->siglock);
2624 sigorsets(&pending, ¤t->pending.signal,
2625 ¤t->signal->shared_pending.signal);
2626 spin_unlock_irq(¤t->sighand->siglock);
2627
2628
2629 sigandsets(&pending, ¤t->blocked, &pending);
2630
2631 error = -EFAULT;
2632 if (!copy_to_user(set, &pending, sigsetsize))
2633 error = 0;
2634
2635out:
2636 return error;
2637}
2638
2639
2640
2641
2642
2643
2644
2645SYSCALL_DEFINE2(rt_sigpending, sigset_t __user *, set, size_t, sigsetsize)
2646{
2647 return do_sigpending(set, sigsetsize);
2648}
2649
2650#ifndef HAVE_ARCH_COPY_SIGINFO_TO_USER
2651
2652int copy_siginfo_to_user(siginfo_t __user *to, siginfo_t *from)
2653{
2654 int err;
2655
2656 if (!access_ok (VERIFY_WRITE, to, sizeof(siginfo_t)))
2657 return -EFAULT;
2658 if (from->si_code < 0)
2659 return __copy_to_user(to, from, sizeof(siginfo_t))
2660 ? -EFAULT : 0;
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670 err = __put_user(from->si_signo, &to->si_signo);
2671 err |= __put_user(from->si_errno, &to->si_errno);
2672 err |= __put_user((short)from->si_code, &to->si_code);
2673 switch (from->si_code & __SI_MASK) {
2674 case __SI_KILL:
2675 err |= __put_user(from->si_pid, &to->si_pid);
2676 err |= __put_user(from->si_uid, &to->si_uid);
2677 break;
2678 case __SI_TIMER:
2679 err |= __put_user(from->si_tid, &to->si_tid);
2680 err |= __put_user(from->si_overrun, &to->si_overrun);
2681 err |= __put_user(from->si_ptr, &to->si_ptr);
2682 break;
2683 case __SI_POLL:
2684 err |= __put_user(from->si_band, &to->si_band);
2685 err |= __put_user(from->si_fd, &to->si_fd);
2686 break;
2687 case __SI_FAULT:
2688 err |= __put_user(from->si_addr, &to->si_addr);
2689#ifdef __ARCH_SI_TRAPNO
2690 err |= __put_user(from->si_trapno, &to->si_trapno);
2691#endif
2692#ifdef BUS_MCEERR_AO
2693
2694
2695
2696
2697 if (from->si_code == BUS_MCEERR_AR || from->si_code == BUS_MCEERR_AO)
2698 err |= __put_user(from->si_addr_lsb, &to->si_addr_lsb);
2699#endif
2700 break;
2701 case __SI_CHLD:
2702 err |= __put_user(from->si_pid, &to->si_pid);
2703 err |= __put_user(from->si_uid, &to->si_uid);
2704 err |= __put_user(from->si_status, &to->si_status);
2705 err |= __put_user(from->si_utime, &to->si_utime);
2706 err |= __put_user(from->si_stime, &to->si_stime);
2707 break;
2708 case __SI_RT:
2709 case __SI_MESGQ:
2710 err |= __put_user(from->si_pid, &to->si_pid);
2711 err |= __put_user(from->si_uid, &to->si_uid);
2712 err |= __put_user(from->si_ptr, &to->si_ptr);
2713 break;
2714#ifdef __ARCH_SIGSYS
2715 case __SI_SYS:
2716 err |= __put_user(from->si_call_addr, &to->si_call_addr);
2717 err |= __put_user(from->si_syscall, &to->si_syscall);
2718 err |= __put_user(from->si_arch, &to->si_arch);
2719 break;
2720#endif
2721 default:
2722 err |= __put_user(from->si_pid, &to->si_pid);
2723 err |= __put_user(from->si_uid, &to->si_uid);
2724 break;
2725 }
2726 return err;
2727}
2728
2729#endif
2730
2731
2732
2733
2734
2735
2736
2737int do_sigtimedwait(const sigset_t *which, siginfo_t *info,
2738 const struct timespec *ts)
2739{
2740 struct task_struct *tsk = current;
2741 long timeout = MAX_SCHEDULE_TIMEOUT;
2742 sigset_t mask = *which;
2743 int sig;
2744
2745 if (ts) {
2746 if (!timespec_valid(ts))
2747 return -EINVAL;
2748 timeout = timespec_to_jiffies(ts);
2749
2750
2751
2752
2753 if (ts->tv_sec || ts->tv_nsec)
2754 timeout++;
2755 }
2756
2757
2758
2759
2760 sigdelsetmask(&mask, sigmask(SIGKILL) | sigmask(SIGSTOP));
2761 signotset(&mask);
2762
2763 spin_lock_irq(&tsk->sighand->siglock);
2764 sig = dequeue_signal(tsk, &mask, info);
2765 if (!sig && timeout) {
2766
2767
2768
2769
2770
2771
2772 tsk->real_blocked = tsk->blocked;
2773 sigandsets(&tsk->blocked, &tsk->blocked, &mask);
2774 recalc_sigpending();
2775 spin_unlock_irq(&tsk->sighand->siglock);
2776
2777 timeout = schedule_timeout_interruptible(timeout);
2778
2779 spin_lock_irq(&tsk->sighand->siglock);
2780 __set_task_blocked(tsk, &tsk->real_blocked);
2781 siginitset(&tsk->real_blocked, 0);
2782 sig = dequeue_signal(tsk, &mask, info);
2783 }
2784 spin_unlock_irq(&tsk->sighand->siglock);
2785
2786 if (sig)
2787 return sig;
2788 return timeout ? -EINTR : -EAGAIN;
2789}
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799SYSCALL_DEFINE4(rt_sigtimedwait, const sigset_t __user *, uthese,
2800 siginfo_t __user *, uinfo, const struct timespec __user *, uts,
2801 size_t, sigsetsize)
2802{
2803 sigset_t these;
2804 struct timespec ts;
2805 siginfo_t info;
2806 int ret;
2807
2808
2809 if (sigsetsize != sizeof(sigset_t))
2810 return -EINVAL;
2811
2812 if (copy_from_user(&these, uthese, sizeof(these)))
2813 return -EFAULT;
2814
2815 if (uts) {
2816 if (copy_from_user(&ts, uts, sizeof(ts)))
2817 return -EFAULT;
2818 }
2819
2820 ret = do_sigtimedwait(&these, &info, uts ? &ts : NULL);
2821
2822 if (ret > 0 && uinfo) {
2823 if (copy_siginfo_to_user(uinfo, &info))
2824 ret = -EFAULT;
2825 }
2826
2827 return ret;
2828}
2829
2830
2831
2832
2833
2834
2835SYSCALL_DEFINE2(kill, pid_t, pid, int, sig)
2836{
2837 struct siginfo info;
2838
2839 info.si_signo = sig;
2840 info.si_errno = 0;
2841 info.si_code = SI_USER;
2842 info.si_pid = task_tgid_vnr(current);
2843 info.si_uid = from_kuid_munged(current_user_ns(), current_uid());
2844
2845 return kill_something_info(sig, &info, pid);
2846}
2847
2848static int
2849do_send_specific(pid_t tgid, pid_t pid, int sig, struct siginfo *info)
2850{
2851 struct task_struct *p;
2852 int error = -ESRCH;
2853
2854 rcu_read_lock();
2855 p = find_task_by_vpid(pid);
2856 if (p && (tgid <= 0 || task_tgid_vnr(p) == tgid)) {
2857 error = check_kill_permission(sig, info, p);
2858
2859
2860
2861
2862 if (!error && sig) {
2863 error = do_send_sig_info(sig, info, p, false);
2864
2865
2866
2867
2868
2869 if (unlikely(error == -ESRCH))
2870 error = 0;
2871 }
2872 }
2873 rcu_read_unlock();
2874
2875 return error;
2876}
2877
2878static int do_tkill(pid_t tgid, pid_t pid, int sig)
2879{
2880 struct siginfo info;
2881
2882 info.si_signo = sig;
2883 info.si_errno = 0;
2884 info.si_code = SI_TKILL;
2885 info.si_pid = task_tgid_vnr(current);
2886 info.si_uid = from_kuid_munged(current_user_ns(), current_uid());
2887
2888 return do_send_specific(tgid, pid, sig, &info);
2889}
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901SYSCALL_DEFINE3(tgkill, pid_t, tgid, pid_t, pid, int, sig)
2902{
2903
2904 if (pid <= 0 || tgid <= 0)
2905 return -EINVAL;
2906
2907 return do_tkill(tgid, pid, sig);
2908}
2909
2910
2911
2912
2913
2914
2915
2916
2917SYSCALL_DEFINE2(tkill, pid_t, pid, int, sig)
2918{
2919
2920 if (pid <= 0)
2921 return -EINVAL;
2922
2923 return do_tkill(0, pid, sig);
2924}
2925
2926
2927
2928
2929
2930
2931
2932SYSCALL_DEFINE3(rt_sigqueueinfo, pid_t, pid, int, sig,
2933 siginfo_t __user *, uinfo)
2934{
2935 siginfo_t info;
2936
2937 if (copy_from_user(&info, uinfo, sizeof(siginfo_t)))
2938 return -EFAULT;
2939
2940
2941
2942
2943 if (info.si_code >= 0 || info.si_code == SI_TKILL) {
2944
2945 WARN_ON_ONCE(info.si_code < 0);
2946 return -EPERM;
2947 }
2948 info.si_signo = sig;
2949
2950
2951 return kill_proc_info(sig, &info, pid);
2952}
2953
2954long do_rt_tgsigqueueinfo(pid_t tgid, pid_t pid, int sig, siginfo_t *info)
2955{
2956
2957 if (pid <= 0 || tgid <= 0)
2958 return -EINVAL;
2959
2960
2961
2962
2963 if (info->si_code >= 0 || info->si_code == SI_TKILL) {
2964
2965 WARN_ON_ONCE(info->si_code < 0);
2966 return -EPERM;
2967 }
2968 info->si_signo = sig;
2969
2970 return do_send_specific(tgid, pid, sig, info);
2971}
2972
2973SYSCALL_DEFINE4(rt_tgsigqueueinfo, pid_t, tgid, pid_t, pid, int, sig,
2974 siginfo_t __user *, uinfo)
2975{
2976 siginfo_t info;
2977
2978 if (copy_from_user(&info, uinfo, sizeof(siginfo_t)))
2979 return -EFAULT;
2980
2981 return do_rt_tgsigqueueinfo(tgid, pid, sig, &info);
2982}
2983
2984int do_sigaction(int sig, struct k_sigaction *act, struct k_sigaction *oact)
2985{
2986 struct task_struct *t = current;
2987 struct k_sigaction *k;
2988 sigset_t mask;
2989
2990 if (!valid_signal(sig) || sig < 1 || (act && sig_kernel_only(sig)))
2991 return -EINVAL;
2992
2993 k = &t->sighand->action[sig-1];
2994
2995 spin_lock_irq(¤t->sighand->siglock);
2996 if (oact)
2997 *oact = *k;
2998
2999 if (act) {
3000 sigdelsetmask(&act->sa.sa_mask,
3001 sigmask(SIGKILL) | sigmask(SIGSTOP));
3002 *k = *act;
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014 if (sig_handler_ignored(sig_handler(t, sig), sig)) {
3015 sigemptyset(&mask);
3016 sigaddset(&mask, sig);
3017 rm_from_queue_full(&mask, &t->signal->shared_pending);
3018 do {
3019 rm_from_queue_full(&mask, &t->pending);
3020 t = next_thread(t);
3021 } while (t != current);
3022 }
3023 }
3024
3025 spin_unlock_irq(¤t->sighand->siglock);
3026 return 0;
3027}
3028
3029int
3030do_sigaltstack (const stack_t __user *uss, stack_t __user *uoss, unsigned long sp)
3031{
3032 stack_t oss;
3033 int error;
3034
3035 oss.ss_sp = (void __user *) current->sas_ss_sp;
3036 oss.ss_size = current->sas_ss_size;
3037 oss.ss_flags = sas_ss_flags(sp);
3038
3039 if (uss) {
3040 void __user *ss_sp;
3041 size_t ss_size;
3042 int ss_flags;
3043
3044 error = -EFAULT;
3045 if (!access_ok(VERIFY_READ, uss, sizeof(*uss)))
3046 goto out;
3047 error = __get_user(ss_sp, &uss->ss_sp) |
3048 __get_user(ss_flags, &uss->ss_flags) |
3049 __get_user(ss_size, &uss->ss_size);
3050 if (error)
3051 goto out;
3052
3053 error = -EPERM;
3054 if (on_sig_stack(sp))
3055 goto out;
3056
3057 error = -EINVAL;
3058
3059
3060
3061
3062
3063
3064
3065 if (ss_flags != SS_DISABLE && ss_flags != SS_ONSTACK && ss_flags != 0)
3066 goto out;
3067
3068 if (ss_flags == SS_DISABLE) {
3069 ss_size = 0;
3070 ss_sp = NULL;
3071 } else {
3072 error = -ENOMEM;
3073 if (ss_size < MINSIGSTKSZ)
3074 goto out;
3075 }
3076
3077 current->sas_ss_sp = (unsigned long) ss_sp;
3078 current->sas_ss_size = ss_size;
3079 }
3080
3081 error = 0;
3082 if (uoss) {
3083 error = -EFAULT;
3084 if (!access_ok(VERIFY_WRITE, uoss, sizeof(*uoss)))
3085 goto out;
3086 error = __put_user(oss.ss_sp, &uoss->ss_sp) |
3087 __put_user(oss.ss_size, &uoss->ss_size) |
3088 __put_user(oss.ss_flags, &uoss->ss_flags);
3089 }
3090
3091out:
3092 return error;
3093}
3094#ifdef CONFIG_GENERIC_SIGALTSTACK
3095SYSCALL_DEFINE2(sigaltstack,const stack_t __user *,uss, stack_t __user *,uoss)
3096{
3097 return do_sigaltstack(uss, uoss, current_user_stack_pointer());
3098}
3099#endif
3100
3101int restore_altstack(const stack_t __user *uss)
3102{
3103 int err = do_sigaltstack(uss, NULL, current_user_stack_pointer());
3104
3105 return err == -EFAULT ? err : 0;
3106}
3107
3108int __save_altstack(stack_t __user *uss, unsigned long sp)
3109{
3110 struct task_struct *t = current;
3111 return __put_user((void __user *)t->sas_ss_sp, &uss->ss_sp) |
3112 __put_user(sas_ss_flags(sp), &uss->ss_flags) |
3113 __put_user(t->sas_ss_size, &uss->ss_size);
3114}
3115
3116#ifdef CONFIG_COMPAT
3117#ifdef CONFIG_GENERIC_SIGALTSTACK
3118COMPAT_SYSCALL_DEFINE2(sigaltstack,
3119 const compat_stack_t __user *, uss_ptr,
3120 compat_stack_t __user *, uoss_ptr)
3121{
3122 stack_t uss, uoss;
3123 int ret;
3124 mm_segment_t seg;
3125
3126 if (uss_ptr) {
3127 compat_stack_t uss32;
3128
3129 memset(&uss, 0, sizeof(stack_t));
3130 if (copy_from_user(&uss32, uss_ptr, sizeof(compat_stack_t)))
3131 return -EFAULT;
3132 uss.ss_sp = compat_ptr(uss32.ss_sp);
3133 uss.ss_flags = uss32.ss_flags;
3134 uss.ss_size = uss32.ss_size;
3135 }
3136 seg = get_fs();
3137 set_fs(KERNEL_DS);
3138 ret = do_sigaltstack((stack_t __force __user *) (uss_ptr ? &uss : NULL),
3139 (stack_t __force __user *) &uoss,
3140 compat_user_stack_pointer());
3141 set_fs(seg);
3142 if (ret >= 0 && uoss_ptr) {
3143 if (!access_ok(VERIFY_WRITE, uoss_ptr, sizeof(compat_stack_t)) ||
3144 __put_user(ptr_to_compat(uoss.ss_sp), &uoss_ptr->ss_sp) ||
3145 __put_user(uoss.ss_flags, &uoss_ptr->ss_flags) ||
3146 __put_user(uoss.ss_size, &uoss_ptr->ss_size))
3147 ret = -EFAULT;
3148 }
3149 return ret;
3150}
3151
3152int compat_restore_altstack(const compat_stack_t __user *uss)
3153{
3154 int err = compat_sys_sigaltstack(uss, NULL);
3155
3156 return err == -EFAULT ? err : 0;
3157}
3158
3159int __compat_save_altstack(compat_stack_t __user *uss, unsigned long sp)
3160{
3161 struct task_struct *t = current;
3162 return __put_user(ptr_to_compat((void __user *)t->sas_ss_sp), &uss->ss_sp) |
3163 __put_user(sas_ss_flags(sp), &uss->ss_flags) |
3164 __put_user(t->sas_ss_size, &uss->ss_size);
3165}
3166#endif
3167#endif
3168
3169#ifdef __ARCH_WANT_SYS_SIGPENDING
3170
3171
3172
3173
3174
3175SYSCALL_DEFINE1(sigpending, old_sigset_t __user *, set)
3176{
3177 return do_sigpending(set, sizeof(*set));
3178}
3179
3180#endif
3181
3182#ifdef __ARCH_WANT_SYS_SIGPROCMASK
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193SYSCALL_DEFINE3(sigprocmask, int, how, old_sigset_t __user *, nset,
3194 old_sigset_t __user *, oset)
3195{
3196 old_sigset_t old_set, new_set;
3197 sigset_t new_blocked;
3198
3199 old_set = current->blocked.sig[0];
3200
3201 if (nset) {
3202 if (copy_from_user(&new_set, nset, sizeof(*nset)))
3203 return -EFAULT;
3204
3205 new_blocked = current->blocked;
3206
3207 switch (how) {
3208 case SIG_BLOCK:
3209 sigaddsetmask(&new_blocked, new_set);
3210 break;
3211 case SIG_UNBLOCK:
3212 sigdelsetmask(&new_blocked, new_set);
3213 break;
3214 case SIG_SETMASK:
3215 new_blocked.sig[0] = new_set;
3216 break;
3217 default:
3218 return -EINVAL;
3219 }
3220
3221 set_current_blocked(&new_blocked);
3222 }
3223
3224 if (oset) {
3225 if (copy_to_user(oset, &old_set, sizeof(*oset)))
3226 return -EFAULT;
3227 }
3228
3229 return 0;
3230}
3231#endif
3232
3233#ifdef __ARCH_WANT_SYS_RT_SIGACTION
3234
3235
3236
3237
3238
3239
3240
3241SYSCALL_DEFINE4(rt_sigaction, int, sig,
3242 const struct sigaction __user *, act,
3243 struct sigaction __user *, oact,
3244 size_t, sigsetsize)
3245{
3246 struct k_sigaction new_sa, old_sa;
3247 int ret = -EINVAL;
3248
3249
3250 if (sigsetsize != sizeof(sigset_t))
3251 goto out;
3252
3253 if (act) {
3254 if (copy_from_user(&new_sa.sa, act, sizeof(new_sa.sa)))
3255 return -EFAULT;
3256 }
3257
3258 ret = do_sigaction(sig, act ? &new_sa : NULL, oact ? &old_sa : NULL);
3259
3260 if (!ret && oact) {
3261 if (copy_to_user(oact, &old_sa.sa, sizeof(old_sa.sa)))
3262 return -EFAULT;
3263 }
3264out:
3265 return ret;
3266}
3267#endif
3268
3269#ifdef __ARCH_WANT_SYS_SGETMASK
3270
3271
3272
3273
3274SYSCALL_DEFINE0(sgetmask)
3275{
3276
3277 return current->blocked.sig[0];
3278}
3279
3280SYSCALL_DEFINE1(ssetmask, int, newmask)
3281{
3282 int old = current->blocked.sig[0];
3283 sigset_t newset;
3284
3285 siginitset(&newset, newmask);
3286 set_current_blocked(&newset);
3287
3288 return old;
3289}
3290#endif
3291
3292#ifdef __ARCH_WANT_SYS_SIGNAL
3293
3294
3295
3296SYSCALL_DEFINE2(signal, int, sig, __sighandler_t, handler)
3297{
3298 struct k_sigaction new_sa, old_sa;
3299 int ret;
3300
3301 new_sa.sa.sa_handler = handler;
3302 new_sa.sa.sa_flags = SA_ONESHOT | SA_NOMASK;
3303 sigemptyset(&new_sa.sa.sa_mask);
3304
3305 ret = do_sigaction(sig, &new_sa, &old_sa);
3306
3307 return ret ? ret : (unsigned long)old_sa.sa.sa_handler;
3308}
3309#endif
3310
3311#ifdef __ARCH_WANT_SYS_PAUSE
3312
3313SYSCALL_DEFINE0(pause)
3314{
3315 while (!signal_pending(current)) {
3316 current->state = TASK_INTERRUPTIBLE;
3317 schedule();
3318 }
3319 return -ERESTARTNOHAND;
3320}
3321
3322#endif
3323
3324int sigsuspend(sigset_t *set)
3325{
3326 current->saved_sigmask = current->blocked;
3327 set_current_blocked(set);
3328
3329 current->state = TASK_INTERRUPTIBLE;
3330 schedule();
3331 set_restore_sigmask();
3332 return -ERESTARTNOHAND;
3333}
3334
3335#ifdef __ARCH_WANT_SYS_RT_SIGSUSPEND
3336
3337
3338
3339
3340
3341
3342SYSCALL_DEFINE2(rt_sigsuspend, sigset_t __user *, unewset, size_t, sigsetsize)
3343{
3344 sigset_t newset;
3345
3346
3347 if (sigsetsize != sizeof(sigset_t))
3348 return -EINVAL;
3349
3350 if (copy_from_user(&newset, unewset, sizeof(newset)))
3351 return -EFAULT;
3352 return sigsuspend(&newset);
3353}
3354#endif
3355
3356__attribute__((weak)) const char *arch_vma_name(struct vm_area_struct *vma)
3357{
3358 return NULL;
3359}
3360
3361void __init signals_init(void)
3362{
3363 sigqueue_cachep = KMEM_CACHE(sigqueue, SLAB_PANIC);
3364}
3365
3366#ifdef CONFIG_KGDB_KDB
3367#include <linux/kdb.h>
3368
3369
3370
3371
3372
3373
3374void
3375kdb_send_sig_info(struct task_struct *t, struct siginfo *info)
3376{
3377 static struct task_struct *kdb_prev_t;
3378 int sig, new_t;
3379 if (!spin_trylock(&t->sighand->siglock)) {
3380 kdb_printf("Can't do kill command now.\n"
3381 "The sigmask lock is held somewhere else in "
3382 "kernel, try again later\n");
3383 return;
3384 }
3385 spin_unlock(&t->sighand->siglock);
3386 new_t = kdb_prev_t != t;
3387 kdb_prev_t = t;
3388 if (t->state != TASK_RUNNING && new_t) {
3389 kdb_printf("Process is not RUNNING, sending a signal from "
3390 "kdb risks deadlock\n"
3391 "on the run queue locks. "
3392 "The signal has _not_ been sent.\n"
3393 "Reissue the kill command if you want to risk "
3394 "the deadlock.\n");
3395 return;
3396 }
3397 sig = info->si_signo;
3398 if (send_sig_info(sig, info, t))
3399 kdb_printf("Fail to deliver Signal %d to process %d.\n",
3400 sig, t->pid);
3401 else
3402 kdb_printf("Signal %d is sent to process %d.\n", sig, t->pid);
3403}
3404#endif
3405