1 /* $NetBSD: kern_sig.c,v 1.358 2019/05/06 08:05:03 kamil Exp $ */ 2 3 /*- 4 * Copyright (c) 2006, 2007, 2008 The NetBSD Foundation, Inc. 5 * All rights reserved. 6 * 7 * This code is derived from software contributed to The NetBSD Foundation 8 * by Andrew Doran. 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions 12 * are met: 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 * POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32 /* 33 * Copyright (c) 1982, 1986, 1989, 1991, 1993 34 * The Regents of the University of California. All rights reserved. 35 * (c) UNIX System Laboratories, Inc. 36 * All or some portions of this file are derived from material licensed 37 * to the University of California by American Telephone and Telegraph 38 * Co. or Unix System Laboratories, Inc. and are reproduced herein with 39 * the permission of UNIX System Laboratories, Inc. 40 * 41 * Redistribution and use in source and binary forms, with or without 42 * modification, are permitted provided that the following conditions 43 * are met: 44 * 1. Redistributions of source code must retain the above copyright 45 * notice, this list of conditions and the following disclaimer. 46 * 2. Redistributions in binary form must reproduce the above copyright 47 * notice, this list of conditions and the following disclaimer in the 48 * documentation and/or other materials provided with the distribution. 49 * 3. Neither the name of the University nor the names of its contributors 50 * may be used to endorse or promote products derived from this software 51 * without specific prior written permission. 52 * 53 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 54 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 55 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 56 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 57 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 58 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 59 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 60 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 61 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 62 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 63 * SUCH DAMAGE. 64 * 65 * @(#)kern_sig.c 8.14 (Berkeley) 5/14/95 66 */ 67 68 /* 69 * Signal subsystem. 70 */ 71 72 #include <sys/cdefs.h> 73 __KERNEL_RCSID(0, "$NetBSD: kern_sig.c,v 1.358 2019/05/06 08:05:03 kamil Exp $"); 74 75 #include "opt_ptrace.h" 76 #include "opt_dtrace.h" 77 #include "opt_compat_sunos.h" 78 #include "opt_compat_netbsd.h" 79 #include "opt_compat_netbsd32.h" 80 #include "opt_pax.h" 81 82 #define SIGPROP /* include signal properties table */ 83 #include <sys/param.h> 84 #include <sys/signalvar.h> 85 #include <sys/proc.h> 86 #include <sys/ptrace.h> 87 #include <sys/systm.h> 88 #include <sys/wait.h> 89 #include <sys/ktrace.h> 90 #include <sys/syslog.h> 91 #include <sys/filedesc.h> 92 #include <sys/file.h> 93 #include <sys/pool.h> 94 #include <sys/ucontext.h> 95 #include <sys/exec.h> 96 #include <sys/kauth.h> 97 #include <sys/acct.h> 98 #include <sys/callout.h> 99 #include <sys/atomic.h> 100 #include <sys/cpu.h> 101 #include <sys/module.h> 102 #include <sys/sdt.h> 103 104 #ifdef PAX_SEGVGUARD 105 #include <sys/pax.h> 106 #endif /* PAX_SEGVGUARD */ 107 108 #include <uvm/uvm_extern.h> 109 110 #define SIGQUEUE_MAX 32 111 static pool_cache_t sigacts_cache __read_mostly; 112 static pool_cache_t ksiginfo_cache __read_mostly; 113 static callout_t proc_stop_ch __cacheline_aligned; 114 115 sigset_t contsigmask __cacheline_aligned; 116 sigset_t stopsigmask __cacheline_aligned; 117 static sigset_t vforksigmask __cacheline_aligned; 118 sigset_t sigcantmask __cacheline_aligned; 119 120 static void ksiginfo_exechook(struct proc *, void *); 121 static void proc_stop(struct proc *, int); 122 static void proc_stop_done(struct proc *, int); 123 static void proc_stop_callout(void *); 124 static int sigchecktrace(void); 125 static int sigpost(struct lwp *, sig_t, int, int); 126 static int sigput(sigpend_t *, struct proc *, ksiginfo_t *); 127 static int sigunwait(struct proc *, const ksiginfo_t *); 128 129 static void sigacts_poolpage_free(struct pool *, void *); 130 static void *sigacts_poolpage_alloc(struct pool *, int); 131 132 void (*sendsig_sigcontext_vec)(const struct ksiginfo *, const sigset_t *); 133 int (*coredump_vec)(struct lwp *, const char *) = 134 (int (*)(struct lwp *, const char *))enosys; 135 136 /* 137 * DTrace SDT provider definitions 138 */ 139 SDT_PROVIDER_DECLARE(proc); 140 SDT_PROBE_DEFINE3(proc, kernel, , signal__send, 141 "struct lwp *", /* target thread */ 142 "struct proc *", /* target process */ 143 "int"); /* signal */ 144 SDT_PROBE_DEFINE3(proc, kernel, , signal__discard, 145 "struct lwp *", /* target thread */ 146 "struct proc *", /* target process */ 147 "int"); /* signal */ 148 SDT_PROBE_DEFINE3(proc, kernel, , signal__handle, 149 "int", /* signal */ 150 "ksiginfo_t *", /* signal info */ 151 "void (*)(void)"); /* handler address */ 152 153 154 static struct pool_allocator sigactspool_allocator = { 155 .pa_alloc = sigacts_poolpage_alloc, 156 .pa_free = sigacts_poolpage_free 157 }; 158 159 #ifdef DEBUG 160 int kern_logsigexit = 1; 161 #else 162 int kern_logsigexit = 0; 163 #endif 164 165 static const char logcoredump[] = 166 "pid %d (%s), uid %d: exited on signal %d (core dumped)\n"; 167 static const char lognocoredump[] = 168 "pid %d (%s), uid %d: exited on signal %d (core not dumped, err = %d)\n"; 169 170 static kauth_listener_t signal_listener; 171 172 static int 173 signal_listener_cb(kauth_cred_t cred, kauth_action_t action, void *cookie, 174 void *arg0, void *arg1, void *arg2, void *arg3) 175 { 176 struct proc *p; 177 int result, signum; 178 179 result = KAUTH_RESULT_DEFER; 180 p = arg0; 181 signum = (int)(unsigned long)arg1; 182 183 if (action != KAUTH_PROCESS_SIGNAL) 184 return result; 185 186 if (kauth_cred_uidmatch(cred, p->p_cred) || 187 (signum == SIGCONT && (curproc->p_session == p->p_session))) 188 result = KAUTH_RESULT_ALLOW; 189 190 return result; 191 } 192 193 static int 194 sigacts_ctor(void *arg __unused, void *obj, int flags __unused) 195 { 196 memset(obj, 0, sizeof(struct sigacts)); 197 return 0; 198 } 199 200 /* 201 * signal_init: 202 * 203 * Initialize global signal-related data structures. 204 */ 205 void 206 signal_init(void) 207 { 208 209 sigactspool_allocator.pa_pagesz = (PAGE_SIZE)*2; 210 211 sigacts_cache = pool_cache_init(sizeof(struct sigacts), 0, 0, 0, 212 "sigacts", sizeof(struct sigacts) > PAGE_SIZE ? 213 &sigactspool_allocator : NULL, IPL_NONE, sigacts_ctor, NULL, NULL); 214 ksiginfo_cache = pool_cache_init(sizeof(ksiginfo_t), 0, 0, 0, 215 "ksiginfo", NULL, IPL_VM, NULL, NULL, NULL); 216 217 exechook_establish(ksiginfo_exechook, NULL); 218 219 callout_init(&proc_stop_ch, CALLOUT_MPSAFE); 220 callout_setfunc(&proc_stop_ch, proc_stop_callout, NULL); 221 222 signal_listener = kauth_listen_scope(KAUTH_SCOPE_PROCESS, 223 signal_listener_cb, NULL); 224 } 225 226 /* 227 * sigacts_poolpage_alloc: 228 * 229 * Allocate a page for the sigacts memory pool. 230 */ 231 static void * 232 sigacts_poolpage_alloc(struct pool *pp, int flags) 233 { 234 235 return (void *)uvm_km_alloc(kernel_map, 236 PAGE_SIZE * 2, PAGE_SIZE * 2, 237 ((flags & PR_WAITOK) ? 0 : UVM_KMF_NOWAIT | UVM_KMF_TRYLOCK) 238 | UVM_KMF_WIRED); 239 } 240 241 /* 242 * sigacts_poolpage_free: 243 * 244 * Free a page on behalf of the sigacts memory pool. 245 */ 246 static void 247 sigacts_poolpage_free(struct pool *pp, void *v) 248 { 249 250 uvm_km_free(kernel_map, (vaddr_t)v, PAGE_SIZE * 2, UVM_KMF_WIRED); 251 } 252 253 /* 254 * sigactsinit: 255 * 256 * Create an initial sigacts structure, using the same signal state 257 * as of specified process. If 'share' is set, share the sigacts by 258 * holding a reference, otherwise just copy it from parent. 259 */ 260 struct sigacts * 261 sigactsinit(struct proc *pp, int share) 262 { 263 struct sigacts *ps = pp->p_sigacts, *ps2; 264 265 if (__predict_false(share)) { 266 atomic_inc_uint(&ps->sa_refcnt); 267 return ps; 268 } 269 ps2 = pool_cache_get(sigacts_cache, PR_WAITOK); 270 mutex_init(&ps2->sa_mutex, MUTEX_DEFAULT, IPL_SCHED); 271 ps2->sa_refcnt = 1; 272 273 mutex_enter(&ps->sa_mutex); 274 memcpy(ps2->sa_sigdesc, ps->sa_sigdesc, sizeof(ps2->sa_sigdesc)); 275 mutex_exit(&ps->sa_mutex); 276 return ps2; 277 } 278 279 /* 280 * sigactsunshare: 281 * 282 * Make this process not share its sigacts, maintaining all signal state. 283 */ 284 void 285 sigactsunshare(struct proc *p) 286 { 287 struct sigacts *ps, *oldps = p->p_sigacts; 288 289 if (__predict_true(oldps->sa_refcnt == 1)) 290 return; 291 292 ps = pool_cache_get(sigacts_cache, PR_WAITOK); 293 mutex_init(&ps->sa_mutex, MUTEX_DEFAULT, IPL_SCHED); 294 memcpy(ps->sa_sigdesc, oldps->sa_sigdesc, sizeof(ps->sa_sigdesc)); 295 ps->sa_refcnt = 1; 296 297 p->p_sigacts = ps; 298 sigactsfree(oldps); 299 } 300 301 /* 302 * sigactsfree; 303 * 304 * Release a sigacts structure. 305 */ 306 void 307 sigactsfree(struct sigacts *ps) 308 { 309 310 if (atomic_dec_uint_nv(&ps->sa_refcnt) == 0) { 311 mutex_destroy(&ps->sa_mutex); 312 pool_cache_put(sigacts_cache, ps); 313 } 314 } 315 316 /* 317 * siginit: 318 * 319 * Initialize signal state for process 0; set to ignore signals that 320 * are ignored by default and disable the signal stack. Locking not 321 * required as the system is still cold. 322 */ 323 void 324 siginit(struct proc *p) 325 { 326 struct lwp *l; 327 struct sigacts *ps; 328 int signo, prop; 329 330 ps = p->p_sigacts; 331 sigemptyset(&contsigmask); 332 sigemptyset(&stopsigmask); 333 sigemptyset(&vforksigmask); 334 sigemptyset(&sigcantmask); 335 for (signo = 1; signo < NSIG; signo++) { 336 prop = sigprop[signo]; 337 if (prop & SA_CONT) 338 sigaddset(&contsigmask, signo); 339 if (prop & SA_STOP) 340 sigaddset(&stopsigmask, signo); 341 if (prop & SA_STOP && signo != SIGSTOP) 342 sigaddset(&vforksigmask, signo); 343 if (prop & SA_CANTMASK) 344 sigaddset(&sigcantmask, signo); 345 if (prop & SA_IGNORE && signo != SIGCONT) 346 sigaddset(&p->p_sigctx.ps_sigignore, signo); 347 sigemptyset(&SIGACTION_PS(ps, signo).sa_mask); 348 SIGACTION_PS(ps, signo).sa_flags = SA_RESTART; 349 } 350 sigemptyset(&p->p_sigctx.ps_sigcatch); 351 p->p_sflag &= ~PS_NOCLDSTOP; 352 353 ksiginfo_queue_init(&p->p_sigpend.sp_info); 354 sigemptyset(&p->p_sigpend.sp_set); 355 356 /* 357 * Reset per LWP state. 358 */ 359 l = LIST_FIRST(&p->p_lwps); 360 l->l_sigwaited = NULL; 361 l->l_sigstk = SS_INIT; 362 ksiginfo_queue_init(&l->l_sigpend.sp_info); 363 sigemptyset(&l->l_sigpend.sp_set); 364 365 /* One reference. */ 366 ps->sa_refcnt = 1; 367 } 368 369 /* 370 * execsigs: 371 * 372 * Reset signals for an exec of the specified process. 373 */ 374 void 375 execsigs(struct proc *p) 376 { 377 struct sigacts *ps; 378 struct lwp *l; 379 int signo, prop; 380 sigset_t tset; 381 ksiginfoq_t kq; 382 383 KASSERT(p->p_nlwps == 1); 384 385 sigactsunshare(p); 386 ps = p->p_sigacts; 387 388 /* 389 * Reset caught signals. Held signals remain held through 390 * l->l_sigmask (unless they were caught, and are now ignored 391 * by default). 392 * 393 * No need to lock yet, the process has only one LWP and 394 * at this point the sigacts are private to the process. 395 */ 396 sigemptyset(&tset); 397 for (signo = 1; signo < NSIG; signo++) { 398 if (sigismember(&p->p_sigctx.ps_sigcatch, signo)) { 399 prop = sigprop[signo]; 400 if (prop & SA_IGNORE) { 401 if ((prop & SA_CONT) == 0) 402 sigaddset(&p->p_sigctx.ps_sigignore, 403 signo); 404 sigaddset(&tset, signo); 405 } 406 SIGACTION_PS(ps, signo).sa_handler = SIG_DFL; 407 } 408 sigemptyset(&SIGACTION_PS(ps, signo).sa_mask); 409 SIGACTION_PS(ps, signo).sa_flags = SA_RESTART; 410 } 411 ksiginfo_queue_init(&kq); 412 413 mutex_enter(p->p_lock); 414 sigclearall(p, &tset, &kq); 415 sigemptyset(&p->p_sigctx.ps_sigcatch); 416 417 /* 418 * Reset no zombies if child dies flag as Solaris does. 419 */ 420 p->p_flag &= ~(PK_NOCLDWAIT | PK_CLDSIGIGN); 421 if (SIGACTION_PS(ps, SIGCHLD).sa_handler == SIG_IGN) 422 SIGACTION_PS(ps, SIGCHLD).sa_handler = SIG_DFL; 423 424 /* 425 * Reset per-LWP state. 426 */ 427 l = LIST_FIRST(&p->p_lwps); 428 l->l_sigwaited = NULL; 429 l->l_sigstk = SS_INIT; 430 ksiginfo_queue_init(&l->l_sigpend.sp_info); 431 sigemptyset(&l->l_sigpend.sp_set); 432 mutex_exit(p->p_lock); 433 434 ksiginfo_queue_drain(&kq); 435 } 436 437 /* 438 * ksiginfo_exechook: 439 * 440 * Free all pending ksiginfo entries from a process on exec. 441 * Additionally, drain any unused ksiginfo structures in the 442 * system back to the pool. 443 * 444 * XXX This should not be a hook, every process has signals. 445 */ 446 static void 447 ksiginfo_exechook(struct proc *p, void *v) 448 { 449 ksiginfoq_t kq; 450 451 ksiginfo_queue_init(&kq); 452 453 mutex_enter(p->p_lock); 454 sigclearall(p, NULL, &kq); 455 mutex_exit(p->p_lock); 456 457 ksiginfo_queue_drain(&kq); 458 } 459 460 /* 461 * ksiginfo_alloc: 462 * 463 * Allocate a new ksiginfo structure from the pool, and optionally copy 464 * an existing one. If the existing ksiginfo_t is from the pool, and 465 * has not been queued somewhere, then just return it. Additionally, 466 * if the existing ksiginfo_t does not contain any information beyond 467 * the signal number, then just return it. 468 */ 469 ksiginfo_t * 470 ksiginfo_alloc(struct proc *p, ksiginfo_t *ok, int flags) 471 { 472 ksiginfo_t *kp; 473 474 if (ok != NULL) { 475 if ((ok->ksi_flags & (KSI_QUEUED | KSI_FROMPOOL)) == 476 KSI_FROMPOOL) 477 return ok; 478 if (KSI_EMPTY_P(ok)) 479 return ok; 480 } 481 482 kp = pool_cache_get(ksiginfo_cache, flags); 483 if (kp == NULL) { 484 #ifdef DIAGNOSTIC 485 printf("Out of memory allocating ksiginfo for pid %d\n", 486 p->p_pid); 487 #endif 488 return NULL; 489 } 490 491 if (ok != NULL) { 492 memcpy(kp, ok, sizeof(*kp)); 493 kp->ksi_flags &= ~KSI_QUEUED; 494 } else 495 KSI_INIT_EMPTY(kp); 496 497 kp->ksi_flags |= KSI_FROMPOOL; 498 499 return kp; 500 } 501 502 /* 503 * ksiginfo_free: 504 * 505 * If the given ksiginfo_t is from the pool and has not been queued, 506 * then free it. 507 */ 508 void 509 ksiginfo_free(ksiginfo_t *kp) 510 { 511 512 if ((kp->ksi_flags & (KSI_QUEUED | KSI_FROMPOOL)) != KSI_FROMPOOL) 513 return; 514 pool_cache_put(ksiginfo_cache, kp); 515 } 516 517 /* 518 * ksiginfo_queue_drain: 519 * 520 * Drain a non-empty ksiginfo_t queue. 521 */ 522 void 523 ksiginfo_queue_drain0(ksiginfoq_t *kq) 524 { 525 ksiginfo_t *ksi; 526 527 KASSERT(!TAILQ_EMPTY(kq)); 528 529 while (!TAILQ_EMPTY(kq)) { 530 ksi = TAILQ_FIRST(kq); 531 TAILQ_REMOVE(kq, ksi, ksi_list); 532 pool_cache_put(ksiginfo_cache, ksi); 533 } 534 } 535 536 static int 537 siggetinfo(sigpend_t *sp, ksiginfo_t *out, int signo) 538 { 539 ksiginfo_t *ksi, *nksi; 540 541 if (sp == NULL) 542 goto out; 543 544 /* Find siginfo and copy it out. */ 545 int count = 0; 546 TAILQ_FOREACH_SAFE(ksi, &sp->sp_info, ksi_list, nksi) { 547 if (ksi->ksi_signo != signo) 548 continue; 549 if (count++ > 0) /* Only remove the first, count all of them */ 550 continue; 551 TAILQ_REMOVE(&sp->sp_info, ksi, ksi_list); 552 KASSERT((ksi->ksi_flags & KSI_FROMPOOL) != 0); 553 KASSERT((ksi->ksi_flags & KSI_QUEUED) != 0); 554 ksi->ksi_flags &= ~KSI_QUEUED; 555 if (out != NULL) { 556 memcpy(out, ksi, sizeof(*out)); 557 out->ksi_flags &= ~(KSI_FROMPOOL | KSI_QUEUED); 558 } 559 ksiginfo_free(ksi); 560 } 561 if (count) 562 return count; 563 564 out: 565 /* If there is no siginfo, then manufacture it. */ 566 if (out != NULL) { 567 KSI_INIT(out); 568 out->ksi_info._signo = signo; 569 out->ksi_info._code = SI_NOINFO; 570 } 571 return 0; 572 } 573 574 /* 575 * sigget: 576 * 577 * Fetch the first pending signal from a set. Optionally, also fetch 578 * or manufacture a ksiginfo element. Returns the number of the first 579 * pending signal, or zero. 580 */ 581 int 582 sigget(sigpend_t *sp, ksiginfo_t *out, int signo, const sigset_t *mask) 583 { 584 sigset_t tset; 585 int count; 586 587 /* If there's no pending set, the signal is from the debugger. */ 588 if (sp == NULL) 589 goto out; 590 591 /* Construct mask from signo, and 'mask'. */ 592 if (signo == 0) { 593 if (mask != NULL) { 594 tset = *mask; 595 __sigandset(&sp->sp_set, &tset); 596 } else 597 tset = sp->sp_set; 598 599 /* If there are no signals pending - return. */ 600 if ((signo = firstsig(&tset)) == 0) 601 goto out; 602 } else { 603 KASSERT(sigismember(&sp->sp_set, signo)); 604 } 605 606 sigdelset(&sp->sp_set, signo); 607 out: 608 count = siggetinfo(sp, out, signo); 609 if (count > 1) 610 sigaddset(&sp->sp_set, signo); 611 return signo; 612 } 613 614 /* 615 * sigput: 616 * 617 * Append a new ksiginfo element to the list of pending ksiginfo's. 618 */ 619 static int 620 sigput(sigpend_t *sp, struct proc *p, ksiginfo_t *ksi) 621 { 622 ksiginfo_t *kp; 623 624 KASSERT(mutex_owned(p->p_lock)); 625 KASSERT((ksi->ksi_flags & KSI_QUEUED) == 0); 626 627 sigaddset(&sp->sp_set, ksi->ksi_signo); 628 629 /* 630 * If there is no siginfo, we are done. 631 */ 632 if (KSI_EMPTY_P(ksi)) 633 return 0; 634 635 KASSERT((ksi->ksi_flags & KSI_FROMPOOL) != 0); 636 637 size_t count = 0; 638 TAILQ_FOREACH(kp, &sp->sp_info, ksi_list) { 639 count++; 640 if (ksi->ksi_signo >= SIGRTMIN && ksi->ksi_signo <= SIGRTMAX) 641 continue; 642 if (kp->ksi_signo == ksi->ksi_signo) { 643 KSI_COPY(ksi, kp); 644 kp->ksi_flags |= KSI_QUEUED; 645 return 0; 646 } 647 } 648 649 if (count >= SIGQUEUE_MAX) { 650 #ifdef DIAGNOSTIC 651 printf("%s(%d): Signal queue is full signal=%d\n", 652 p->p_comm, p->p_pid, ksi->ksi_signo); 653 #endif 654 return EAGAIN; 655 } 656 ksi->ksi_flags |= KSI_QUEUED; 657 TAILQ_INSERT_TAIL(&sp->sp_info, ksi, ksi_list); 658 659 return 0; 660 } 661 662 /* 663 * sigclear: 664 * 665 * Clear all pending signals in the specified set. 666 */ 667 void 668 sigclear(sigpend_t *sp, const sigset_t *mask, ksiginfoq_t *kq) 669 { 670 ksiginfo_t *ksi, *next; 671 672 if (mask == NULL) 673 sigemptyset(&sp->sp_set); 674 else 675 sigminusset(mask, &sp->sp_set); 676 677 TAILQ_FOREACH_SAFE(ksi, &sp->sp_info, ksi_list, next) { 678 if (mask == NULL || sigismember(mask, ksi->ksi_signo)) { 679 TAILQ_REMOVE(&sp->sp_info, ksi, ksi_list); 680 KASSERT((ksi->ksi_flags & KSI_FROMPOOL) != 0); 681 KASSERT((ksi->ksi_flags & KSI_QUEUED) != 0); 682 TAILQ_INSERT_TAIL(kq, ksi, ksi_list); 683 } 684 } 685 } 686 687 /* 688 * sigclearall: 689 * 690 * Clear all pending signals in the specified set from a process and 691 * its LWPs. 692 */ 693 void 694 sigclearall(struct proc *p, const sigset_t *mask, ksiginfoq_t *kq) 695 { 696 struct lwp *l; 697 698 KASSERT(mutex_owned(p->p_lock)); 699 700 sigclear(&p->p_sigpend, mask, kq); 701 702 LIST_FOREACH(l, &p->p_lwps, l_sibling) { 703 sigclear(&l->l_sigpend, mask, kq); 704 } 705 } 706 707 /* 708 * sigispending: 709 * 710 * Return the first signal number if there are pending signals for the 711 * current LWP. May be called unlocked provided that LW_PENDSIG is set, 712 * and that the signal has been posted to the appopriate queue before 713 * LW_PENDSIG is set. 714 */ 715 int 716 sigispending(struct lwp *l, int signo) 717 { 718 struct proc *p = l->l_proc; 719 sigset_t tset; 720 721 membar_consumer(); 722 723 tset = l->l_sigpend.sp_set; 724 sigplusset(&p->p_sigpend.sp_set, &tset); 725 sigminusset(&p->p_sigctx.ps_sigignore, &tset); 726 sigminusset(&l->l_sigmask, &tset); 727 728 if (signo == 0) { 729 return firstsig(&tset); 730 } 731 return sigismember(&tset, signo) ? signo : 0; 732 } 733 734 void 735 getucontext(struct lwp *l, ucontext_t *ucp) 736 { 737 struct proc *p = l->l_proc; 738 739 KASSERT(mutex_owned(p->p_lock)); 740 741 ucp->uc_flags = 0; 742 ucp->uc_link = l->l_ctxlink; 743 ucp->uc_sigmask = l->l_sigmask; 744 ucp->uc_flags |= _UC_SIGMASK; 745 746 /* 747 * The (unsupplied) definition of the `current execution stack' 748 * in the System V Interface Definition appears to allow returning 749 * the main context stack. 750 */ 751 if ((l->l_sigstk.ss_flags & SS_ONSTACK) == 0) { 752 ucp->uc_stack.ss_sp = (void *)l->l_proc->p_stackbase; 753 ucp->uc_stack.ss_size = ctob(l->l_proc->p_vmspace->vm_ssize); 754 ucp->uc_stack.ss_flags = 0; /* XXX, def. is Very Fishy */ 755 } else { 756 /* Simply copy alternate signal execution stack. */ 757 ucp->uc_stack = l->l_sigstk; 758 } 759 ucp->uc_flags |= _UC_STACK; 760 mutex_exit(p->p_lock); 761 cpu_getmcontext(l, &ucp->uc_mcontext, &ucp->uc_flags); 762 mutex_enter(p->p_lock); 763 } 764 765 int 766 setucontext(struct lwp *l, const ucontext_t *ucp) 767 { 768 struct proc *p = l->l_proc; 769 int error; 770 771 KASSERT(mutex_owned(p->p_lock)); 772 773 if ((ucp->uc_flags & _UC_SIGMASK) != 0) { 774 error = sigprocmask1(l, SIG_SETMASK, &ucp->uc_sigmask, NULL); 775 if (error != 0) 776 return error; 777 } 778 779 mutex_exit(p->p_lock); 780 error = cpu_setmcontext(l, &ucp->uc_mcontext, ucp->uc_flags); 781 mutex_enter(p->p_lock); 782 if (error != 0) 783 return (error); 784 785 l->l_ctxlink = ucp->uc_link; 786 787 /* 788 * If there was stack information, update whether or not we are 789 * still running on an alternate signal stack. 790 */ 791 if ((ucp->uc_flags & _UC_STACK) != 0) { 792 if (ucp->uc_stack.ss_flags & SS_ONSTACK) 793 l->l_sigstk.ss_flags |= SS_ONSTACK; 794 else 795 l->l_sigstk.ss_flags &= ~SS_ONSTACK; 796 } 797 798 return 0; 799 } 800 801 /* 802 * killpg1: common code for kill process group/broadcast kill. 803 */ 804 int 805 killpg1(struct lwp *l, ksiginfo_t *ksi, int pgid, int all) 806 { 807 struct proc *p, *cp; 808 kauth_cred_t pc; 809 struct pgrp *pgrp; 810 int nfound; 811 int signo = ksi->ksi_signo; 812 813 cp = l->l_proc; 814 pc = l->l_cred; 815 nfound = 0; 816 817 mutex_enter(proc_lock); 818 if (all) { 819 /* 820 * Broadcast. 821 */ 822 PROCLIST_FOREACH(p, &allproc) { 823 if (p->p_pid <= 1 || p == cp || 824 (p->p_flag & PK_SYSTEM) != 0) 825 continue; 826 mutex_enter(p->p_lock); 827 if (kauth_authorize_process(pc, 828 KAUTH_PROCESS_SIGNAL, p, KAUTH_ARG(signo), NULL, 829 NULL) == 0) { 830 nfound++; 831 if (signo) 832 kpsignal2(p, ksi); 833 } 834 mutex_exit(p->p_lock); 835 } 836 } else { 837 if (pgid == 0) 838 /* Zero pgid means send to my process group. */ 839 pgrp = cp->p_pgrp; 840 else { 841 pgrp = pgrp_find(pgid); 842 if (pgrp == NULL) 843 goto out; 844 } 845 LIST_FOREACH(p, &pgrp->pg_members, p_pglist) { 846 if (p->p_pid <= 1 || p->p_flag & PK_SYSTEM) 847 continue; 848 mutex_enter(p->p_lock); 849 if (kauth_authorize_process(pc, KAUTH_PROCESS_SIGNAL, 850 p, KAUTH_ARG(signo), NULL, NULL) == 0) { 851 nfound++; 852 if (signo && P_ZOMBIE(p) == 0) 853 kpsignal2(p, ksi); 854 } 855 mutex_exit(p->p_lock); 856 } 857 } 858 out: 859 mutex_exit(proc_lock); 860 return nfound ? 0 : ESRCH; 861 } 862 863 /* 864 * Send a signal to a process group. If checktty is set, limit to members 865 * which have a controlling terminal. 866 */ 867 void 868 pgsignal(struct pgrp *pgrp, int sig, int checkctty) 869 { 870 ksiginfo_t ksi; 871 872 KASSERT(!cpu_intr_p()); 873 KASSERT(mutex_owned(proc_lock)); 874 875 KSI_INIT_EMPTY(&ksi); 876 ksi.ksi_signo = sig; 877 kpgsignal(pgrp, &ksi, NULL, checkctty); 878 } 879 880 void 881 kpgsignal(struct pgrp *pgrp, ksiginfo_t *ksi, void *data, int checkctty) 882 { 883 struct proc *p; 884 885 KASSERT(!cpu_intr_p()); 886 KASSERT(mutex_owned(proc_lock)); 887 KASSERT(pgrp != NULL); 888 889 LIST_FOREACH(p, &pgrp->pg_members, p_pglist) 890 if (checkctty == 0 || p->p_lflag & PL_CONTROLT) 891 kpsignal(p, ksi, data); 892 } 893 894 /* 895 * Send a signal caused by a trap to the current LWP. If it will be caught 896 * immediately, deliver it with correct code. Otherwise, post it normally. 897 */ 898 void 899 trapsignal(struct lwp *l, ksiginfo_t *ksi) 900 { 901 struct proc *p; 902 struct sigacts *ps; 903 int signo = ksi->ksi_signo; 904 sigset_t *mask; 905 sig_t action; 906 907 KASSERT(KSI_TRAP_P(ksi)); 908 909 ksi->ksi_lid = l->l_lid; 910 p = l->l_proc; 911 912 KASSERT(!cpu_intr_p()); 913 mutex_enter(proc_lock); 914 mutex_enter(p->p_lock); 915 916 mask = &l->l_sigmask; 917 ps = p->p_sigacts; 918 action = SIGACTION_PS(ps, signo).sa_handler; 919 920 if (ISSET(p->p_slflag, PSL_TRACED) && 921 !(p->p_pptr == p->p_opptr && ISSET(p->p_lflag, PL_PPWAIT)) && 922 p->p_xsig != SIGKILL && 923 !sigismember(&p->p_sigpend.sp_set, SIGKILL)) { 924 p->p_xsig = signo; 925 p->p_sigctx.ps_faked = true; 926 p->p_sigctx.ps_lwp = ksi->ksi_lid; 927 p->p_sigctx.ps_info = ksi->ksi_info; 928 sigswitch(0, signo, false); 929 930 if (ktrpoint(KTR_PSIG)) { 931 if (p->p_emul->e_ktrpsig) 932 p->p_emul->e_ktrpsig(signo, action, mask, ksi); 933 else 934 ktrpsig(signo, action, mask, ksi); 935 } 936 return; 937 } 938 939 const bool caught = sigismember(&p->p_sigctx.ps_sigcatch, signo); 940 const bool masked = sigismember(mask, signo); 941 if (caught && !masked) { 942 mutex_exit(proc_lock); 943 l->l_ru.ru_nsignals++; 944 kpsendsig(l, ksi, mask); 945 mutex_exit(p->p_lock); 946 947 if (ktrpoint(KTR_PSIG)) { 948 if (p->p_emul->e_ktrpsig) 949 p->p_emul->e_ktrpsig(signo, action, mask, ksi); 950 else 951 ktrpsig(signo, action, mask, ksi); 952 } 953 return; 954 } 955 956 /* 957 * If the signal is masked or ignored, then unmask it and 958 * reset it to the default action so that the process or 959 * its tracer will be notified. 960 */ 961 const bool ignored = action == SIG_IGN; 962 if (masked || ignored) { 963 mutex_enter(&ps->sa_mutex); 964 sigdelset(mask, signo); 965 sigdelset(&p->p_sigctx.ps_sigcatch, signo); 966 sigdelset(&p->p_sigctx.ps_sigignore, signo); 967 sigdelset(&SIGACTION_PS(ps, signo).sa_mask, signo); 968 SIGACTION_PS(ps, signo).sa_handler = SIG_DFL; 969 mutex_exit(&ps->sa_mutex); 970 } 971 972 kpsignal2(p, ksi); 973 mutex_exit(p->p_lock); 974 mutex_exit(proc_lock); 975 } 976 977 /* 978 * Fill in signal information and signal the parent for a child status change. 979 */ 980 void 981 child_psignal(struct proc *p, int mask) 982 { 983 ksiginfo_t ksi; 984 struct proc *q; 985 int xsig; 986 987 KASSERT(mutex_owned(proc_lock)); 988 KASSERT(mutex_owned(p->p_lock)); 989 990 xsig = p->p_xsig; 991 992 KSI_INIT(&ksi); 993 ksi.ksi_signo = SIGCHLD; 994 ksi.ksi_code = (xsig == SIGCONT ? CLD_CONTINUED : CLD_STOPPED); 995 ksi.ksi_pid = p->p_pid; 996 ksi.ksi_uid = kauth_cred_geteuid(p->p_cred); 997 ksi.ksi_status = xsig; 998 ksi.ksi_utime = p->p_stats->p_ru.ru_utime.tv_sec; 999 ksi.ksi_stime = p->p_stats->p_ru.ru_stime.tv_sec; 1000 1001 q = p->p_pptr; 1002 1003 mutex_exit(p->p_lock); 1004 mutex_enter(q->p_lock); 1005 1006 if ((q->p_sflag & mask) == 0) 1007 kpsignal2(q, &ksi); 1008 1009 mutex_exit(q->p_lock); 1010 mutex_enter(p->p_lock); 1011 } 1012 1013 void 1014 psignal(struct proc *p, int signo) 1015 { 1016 ksiginfo_t ksi; 1017 1018 KASSERT(!cpu_intr_p()); 1019 KASSERT(mutex_owned(proc_lock)); 1020 1021 KSI_INIT_EMPTY(&ksi); 1022 ksi.ksi_signo = signo; 1023 mutex_enter(p->p_lock); 1024 kpsignal2(p, &ksi); 1025 mutex_exit(p->p_lock); 1026 } 1027 1028 void 1029 kpsignal(struct proc *p, ksiginfo_t *ksi, void *data) 1030 { 1031 fdfile_t *ff; 1032 file_t *fp; 1033 fdtab_t *dt; 1034 1035 KASSERT(!cpu_intr_p()); 1036 KASSERT(mutex_owned(proc_lock)); 1037 1038 if ((p->p_sflag & PS_WEXIT) == 0 && data) { 1039 size_t fd; 1040 filedesc_t *fdp = p->p_fd; 1041 1042 /* XXXSMP locking */ 1043 ksi->ksi_fd = -1; 1044 dt = fdp->fd_dt; 1045 for (fd = 0; fd < dt->dt_nfiles; fd++) { 1046 if ((ff = dt->dt_ff[fd]) == NULL) 1047 continue; 1048 if ((fp = ff->ff_file) == NULL) 1049 continue; 1050 if (fp->f_data == data) { 1051 ksi->ksi_fd = fd; 1052 break; 1053 } 1054 } 1055 } 1056 mutex_enter(p->p_lock); 1057 kpsignal2(p, ksi); 1058 mutex_exit(p->p_lock); 1059 } 1060 1061 /* 1062 * sigismasked: 1063 * 1064 * Returns true if signal is ignored or masked for the specified LWP. 1065 */ 1066 int 1067 sigismasked(struct lwp *l, int sig) 1068 { 1069 struct proc *p = l->l_proc; 1070 1071 return sigismember(&p->p_sigctx.ps_sigignore, sig) || 1072 sigismember(&l->l_sigmask, sig); 1073 } 1074 1075 /* 1076 * sigpost: 1077 * 1078 * Post a pending signal to an LWP. Returns non-zero if the LWP may 1079 * be able to take the signal. 1080 */ 1081 static int 1082 sigpost(struct lwp *l, sig_t action, int prop, int sig) 1083 { 1084 int rv, masked; 1085 struct proc *p = l->l_proc; 1086 1087 KASSERT(mutex_owned(p->p_lock)); 1088 1089 /* 1090 * If the LWP is on the way out, sigclear() will be busy draining all 1091 * pending signals. Don't give it more. 1092 */ 1093 if (l->l_refcnt == 0) 1094 return 0; 1095 1096 SDT_PROBE(proc, kernel, , signal__send, l, p, sig, 0, 0); 1097 1098 /* 1099 * Have the LWP check for signals. This ensures that even if no LWP 1100 * is found to take the signal immediately, it should be taken soon. 1101 */ 1102 lwp_lock(l); 1103 l->l_flag |= LW_PENDSIG; 1104 1105 /* 1106 * SIGCONT can be masked, but if LWP is stopped, it needs restart. 1107 * Note: SIGKILL and SIGSTOP cannot be masked. 1108 */ 1109 masked = sigismember(&l->l_sigmask, sig); 1110 if (masked && ((prop & SA_CONT) == 0 || l->l_stat != LSSTOP)) { 1111 lwp_unlock(l); 1112 return 0; 1113 } 1114 1115 /* 1116 * If killing the process, make it run fast. 1117 */ 1118 if (__predict_false((prop & SA_KILL) != 0) && 1119 action == SIG_DFL && l->l_priority < MAXPRI_USER) { 1120 KASSERT(l->l_class == SCHED_OTHER); 1121 lwp_changepri(l, MAXPRI_USER); 1122 } 1123 1124 /* 1125 * If the LWP is running or on a run queue, then we win. If it's 1126 * sleeping interruptably, wake it and make it take the signal. If 1127 * the sleep isn't interruptable, then the chances are it will get 1128 * to see the signal soon anyhow. If suspended, it can't take the 1129 * signal right now. If it's LWP private or for all LWPs, save it 1130 * for later; otherwise punt. 1131 */ 1132 rv = 0; 1133 1134 switch (l->l_stat) { 1135 case LSRUN: 1136 case LSONPROC: 1137 lwp_need_userret(l); 1138 rv = 1; 1139 break; 1140 1141 case LSSLEEP: 1142 if ((l->l_flag & LW_SINTR) != 0) { 1143 /* setrunnable() will release the lock. */ 1144 setrunnable(l); 1145 return 1; 1146 } 1147 break; 1148 1149 case LSSUSPENDED: 1150 if ((prop & SA_KILL) != 0 && (l->l_flag & LW_WCORE) != 0) { 1151 /* lwp_continue() will release the lock. */ 1152 lwp_continue(l); 1153 return 1; 1154 } 1155 break; 1156 1157 case LSSTOP: 1158 if ((prop & SA_STOP) != 0) 1159 break; 1160 1161 /* 1162 * If the LWP is stopped and we are sending a continue 1163 * signal, then start it again. 1164 */ 1165 if ((prop & SA_CONT) != 0) { 1166 if (l->l_wchan != NULL) { 1167 l->l_stat = LSSLEEP; 1168 p->p_nrlwps++; 1169 rv = 1; 1170 break; 1171 } 1172 /* setrunnable() will release the lock. */ 1173 setrunnable(l); 1174 return 1; 1175 } else if (l->l_wchan == NULL || (l->l_flag & LW_SINTR) != 0) { 1176 /* setrunnable() will release the lock. */ 1177 setrunnable(l); 1178 return 1; 1179 } 1180 break; 1181 1182 default: 1183 break; 1184 } 1185 1186 lwp_unlock(l); 1187 return rv; 1188 } 1189 1190 /* 1191 * Notify an LWP that it has a pending signal. 1192 */ 1193 void 1194 signotify(struct lwp *l) 1195 { 1196 KASSERT(lwp_locked(l, NULL)); 1197 1198 l->l_flag |= LW_PENDSIG; 1199 lwp_need_userret(l); 1200 } 1201 1202 /* 1203 * Find an LWP within process p that is waiting on signal ksi, and hand 1204 * it on. 1205 */ 1206 static int 1207 sigunwait(struct proc *p, const ksiginfo_t *ksi) 1208 { 1209 struct lwp *l; 1210 int signo; 1211 1212 KASSERT(mutex_owned(p->p_lock)); 1213 1214 signo = ksi->ksi_signo; 1215 1216 if (ksi->ksi_lid != 0) { 1217 /* 1218 * Signal came via _lwp_kill(). Find the LWP and see if 1219 * it's interested. 1220 */ 1221 if ((l = lwp_find(p, ksi->ksi_lid)) == NULL) 1222 return 0; 1223 if (l->l_sigwaited == NULL || 1224 !sigismember(&l->l_sigwaitset, signo)) 1225 return 0; 1226 } else { 1227 /* 1228 * Look for any LWP that may be interested. 1229 */ 1230 LIST_FOREACH(l, &p->p_sigwaiters, l_sigwaiter) { 1231 KASSERT(l->l_sigwaited != NULL); 1232 if (sigismember(&l->l_sigwaitset, signo)) 1233 break; 1234 } 1235 } 1236 1237 if (l != NULL) { 1238 l->l_sigwaited->ksi_info = ksi->ksi_info; 1239 l->l_sigwaited = NULL; 1240 LIST_REMOVE(l, l_sigwaiter); 1241 cv_signal(&l->l_sigcv); 1242 return 1; 1243 } 1244 1245 return 0; 1246 } 1247 1248 /* 1249 * Send the signal to the process. If the signal has an action, the action 1250 * is usually performed by the target process rather than the caller; we add 1251 * the signal to the set of pending signals for the process. 1252 * 1253 * Exceptions: 1254 * o When a stop signal is sent to a sleeping process that takes the 1255 * default action, the process is stopped without awakening it. 1256 * o SIGCONT restarts stopped processes (or puts them back to sleep) 1257 * regardless of the signal action (eg, blocked or ignored). 1258 * 1259 * Other ignored signals are discarded immediately. 1260 */ 1261 int 1262 kpsignal2(struct proc *p, ksiginfo_t *ksi) 1263 { 1264 int prop, signo = ksi->ksi_signo; 1265 struct lwp *l = NULL; 1266 ksiginfo_t *kp; 1267 lwpid_t lid; 1268 sig_t action; 1269 bool toall; 1270 int error = 0; 1271 1272 KASSERT(!cpu_intr_p()); 1273 KASSERT(mutex_owned(proc_lock)); 1274 KASSERT(mutex_owned(p->p_lock)); 1275 KASSERT((ksi->ksi_flags & KSI_QUEUED) == 0); 1276 KASSERT(signo > 0 && signo < NSIG); 1277 1278 /* 1279 * If the process is being created by fork, is a zombie or is 1280 * exiting, then just drop the signal here and bail out. 1281 */ 1282 if (p->p_stat != SACTIVE && p->p_stat != SSTOP) 1283 return 0; 1284 1285 /* XXX for core dump/debugger */ 1286 p->p_sigctx.ps_lwp = ksi->ksi_lid; 1287 p->p_sigctx.ps_info = ksi->ksi_info; 1288 1289 /* 1290 * Notify any interested parties of the signal. 1291 */ 1292 KNOTE(&p->p_klist, NOTE_SIGNAL | signo); 1293 1294 /* 1295 * Some signals including SIGKILL must act on the entire process. 1296 */ 1297 kp = NULL; 1298 prop = sigprop[signo]; 1299 toall = ((prop & SA_TOALL) != 0); 1300 lid = toall ? 0 : ksi->ksi_lid; 1301 1302 /* 1303 * If proc is traced, always give parent a chance. 1304 */ 1305 if (p->p_slflag & PSL_TRACED) { 1306 action = SIG_DFL; 1307 1308 if (lid == 0) { 1309 /* 1310 * If the process is being traced and the signal 1311 * is being caught, make sure to save any ksiginfo. 1312 */ 1313 if ((kp = ksiginfo_alloc(p, ksi, PR_NOWAIT)) == NULL) 1314 goto discard; 1315 if ((error = sigput(&p->p_sigpend, p, kp)) != 0) 1316 goto out; 1317 } 1318 } else { 1319 1320 /* 1321 * If the signal is being ignored, then drop it. Note: we 1322 * don't set SIGCONT in ps_sigignore, and if it is set to 1323 * SIG_IGN, action will be SIG_DFL here. 1324 */ 1325 if (sigismember(&p->p_sigctx.ps_sigignore, signo)) 1326 goto discard; 1327 1328 else if (sigismember(&p->p_sigctx.ps_sigcatch, signo)) 1329 action = SIG_CATCH; 1330 else { 1331 action = SIG_DFL; 1332 1333 /* 1334 * If sending a tty stop signal to a member of an 1335 * orphaned process group, discard the signal here if 1336 * the action is default; don't stop the process below 1337 * if sleeping, and don't clear any pending SIGCONT. 1338 */ 1339 if (prop & SA_TTYSTOP && p->p_pgrp->pg_jobc == 0) 1340 goto discard; 1341 1342 if (prop & SA_KILL && p->p_nice > NZERO) 1343 p->p_nice = NZERO; 1344 } 1345 } 1346 1347 /* 1348 * If stopping or continuing a process, discard any pending 1349 * signals that would do the inverse. 1350 */ 1351 if ((prop & (SA_CONT | SA_STOP)) != 0) { 1352 ksiginfoq_t kq; 1353 1354 ksiginfo_queue_init(&kq); 1355 if ((prop & SA_CONT) != 0) 1356 sigclear(&p->p_sigpend, &stopsigmask, &kq); 1357 if ((prop & SA_STOP) != 0) 1358 sigclear(&p->p_sigpend, &contsigmask, &kq); 1359 ksiginfo_queue_drain(&kq); /* XXXSMP */ 1360 } 1361 1362 /* 1363 * If the signal doesn't have SA_CANTMASK (no override for SIGKILL, 1364 * please!), check if any LWPs are waiting on it. If yes, pass on 1365 * the signal info. The signal won't be processed further here. 1366 */ 1367 if ((prop & SA_CANTMASK) == 0 && !LIST_EMPTY(&p->p_sigwaiters) && 1368 p->p_stat == SACTIVE && (p->p_sflag & PS_STOPPING) == 0 && 1369 sigunwait(p, ksi)) 1370 goto discard; 1371 1372 /* 1373 * XXXSMP Should be allocated by the caller, we're holding locks 1374 * here. 1375 */ 1376 if (kp == NULL && (kp = ksiginfo_alloc(p, ksi, PR_NOWAIT)) == NULL) 1377 goto discard; 1378 1379 /* 1380 * LWP private signals are easy - just find the LWP and post 1381 * the signal to it. 1382 */ 1383 if (lid != 0) { 1384 l = lwp_find(p, lid); 1385 if (l != NULL) { 1386 if ((error = sigput(&l->l_sigpend, p, kp)) != 0) 1387 goto out; 1388 membar_producer(); 1389 if (sigpost(l, action, prop, kp->ksi_signo) != 0) 1390 signo = -1; 1391 } 1392 goto out; 1393 } 1394 1395 /* 1396 * Some signals go to all LWPs, even if posted with _lwp_kill() 1397 * or for an SA process. 1398 */ 1399 if (p->p_stat == SACTIVE && (p->p_sflag & PS_STOPPING) == 0) { 1400 if ((p->p_slflag & PSL_TRACED) != 0) 1401 goto deliver; 1402 1403 /* 1404 * If SIGCONT is default (or ignored) and process is 1405 * asleep, we are finished; the process should not 1406 * be awakened. 1407 */ 1408 if ((prop & SA_CONT) != 0 && action == SIG_DFL) 1409 goto out; 1410 } else { 1411 /* 1412 * Process is stopped or stopping. 1413 * - If traced, then no action is needed, unless killing. 1414 * - Run the process only if sending SIGCONT or SIGKILL. 1415 */ 1416 if ((p->p_slflag & PSL_TRACED) != 0 && signo != SIGKILL) { 1417 goto out; 1418 } 1419 if ((prop & SA_CONT) != 0 || signo == SIGKILL) { 1420 /* 1421 * Re-adjust p_nstopchild if the process was 1422 * stopped but not yet collected by its parent. 1423 */ 1424 if (p->p_stat == SSTOP && !p->p_waited) 1425 p->p_pptr->p_nstopchild--; 1426 p->p_stat = SACTIVE; 1427 p->p_sflag &= ~PS_STOPPING; 1428 if (p->p_slflag & PSL_TRACED) { 1429 KASSERT(signo == SIGKILL); 1430 goto deliver; 1431 } 1432 /* 1433 * Do not make signal pending if SIGCONT is default. 1434 * 1435 * If the process catches SIGCONT, let it handle the 1436 * signal itself (if waiting on event - process runs, 1437 * otherwise continues sleeping). 1438 */ 1439 if ((prop & SA_CONT) != 0) { 1440 p->p_xsig = SIGCONT; 1441 p->p_sflag |= PS_CONTINUED; 1442 child_psignal(p, 0); 1443 if (action == SIG_DFL) { 1444 KASSERT(signo != SIGKILL); 1445 goto deliver; 1446 } 1447 } 1448 } else if ((prop & SA_STOP) != 0) { 1449 /* 1450 * Already stopped, don't need to stop again. 1451 * (If we did the shell could get confused.) 1452 */ 1453 goto out; 1454 } 1455 } 1456 /* 1457 * Make signal pending. 1458 */ 1459 KASSERT((p->p_slflag & PSL_TRACED) == 0); 1460 if ((error = sigput(&p->p_sigpend, p, kp)) != 0) 1461 goto out; 1462 deliver: 1463 /* 1464 * Before we set LW_PENDSIG on any LWP, ensure that the signal is 1465 * visible on the per process list (for sigispending()). This 1466 * is unlikely to be needed in practice, but... 1467 */ 1468 membar_producer(); 1469 1470 /* 1471 * Try to find an LWP that can take the signal. 1472 */ 1473 LIST_FOREACH(l, &p->p_lwps, l_sibling) { 1474 if (sigpost(l, action, prop, kp->ksi_signo) && !toall) 1475 break; 1476 } 1477 signo = -1; 1478 out: 1479 /* 1480 * If the ksiginfo wasn't used, then bin it. XXXSMP freeing memory 1481 * with locks held. The caller should take care of this. 1482 */ 1483 ksiginfo_free(kp); 1484 if (signo == -1) 1485 return error; 1486 discard: 1487 SDT_PROBE(proc, kernel, , signal__discard, l, p, signo, 0, 0); 1488 return error; 1489 } 1490 1491 void 1492 kpsendsig(struct lwp *l, const ksiginfo_t *ksi, const sigset_t *mask) 1493 { 1494 struct proc *p = l->l_proc; 1495 1496 KASSERT(mutex_owned(p->p_lock)); 1497 (*p->p_emul->e_sendsig)(ksi, mask); 1498 } 1499 1500 /* 1501 * Stop any LWPs sleeping interruptably. 1502 */ 1503 static void 1504 proc_stop_lwps(struct proc *p) 1505 { 1506 struct lwp *l; 1507 1508 KASSERT(mutex_owned(p->p_lock)); 1509 KASSERT((p->p_sflag & PS_STOPPING) != 0); 1510 1511 LIST_FOREACH(l, &p->p_lwps, l_sibling) { 1512 lwp_lock(l); 1513 if (l->l_stat == LSSLEEP && (l->l_flag & LW_SINTR) != 0) { 1514 l->l_stat = LSSTOP; 1515 p->p_nrlwps--; 1516 } 1517 lwp_unlock(l); 1518 } 1519 } 1520 1521 /* 1522 * Finish stopping of a process. Mark it stopped and notify the parent. 1523 * 1524 * Drop p_lock briefly if PS_NOTIFYSTOP is set and ppsig is true. 1525 */ 1526 static void 1527 proc_stop_done(struct proc *p, int ppmask) 1528 { 1529 1530 KASSERT(mutex_owned(proc_lock)); 1531 KASSERT(mutex_owned(p->p_lock)); 1532 KASSERT((p->p_sflag & PS_STOPPING) != 0); 1533 KASSERT(p->p_nrlwps == 0 || (p->p_nrlwps == 1 && p == curproc)); 1534 1535 p->p_sflag &= ~PS_STOPPING; 1536 p->p_stat = SSTOP; 1537 p->p_waited = 0; 1538 p->p_pptr->p_nstopchild++; 1539 if ((p->p_sflag & PS_NOTIFYSTOP) != 0) { 1540 /* child_psignal drops p_lock briefly. */ 1541 child_psignal(p, ppmask); 1542 cv_broadcast(&p->p_pptr->p_waitcv); 1543 } 1544 } 1545 1546 /* 1547 * Stop the current process and switch away to the debugger notifying 1548 * an event specific to a traced process only. 1549 */ 1550 void 1551 eventswitch(int code) 1552 { 1553 struct lwp *l = curlwp; 1554 struct proc *p = l->l_proc; 1555 struct sigacts *ps; 1556 sigset_t *mask; 1557 sig_t action; 1558 ksiginfo_t ksi; 1559 const int signo = SIGTRAP; 1560 1561 KASSERT(mutex_owned(proc_lock)); 1562 KASSERT(mutex_owned(p->p_lock)); 1563 KASSERT(p->p_pptr != initproc); 1564 KASSERT(l->l_stat == LSONPROC); 1565 KASSERT(ISSET(p->p_slflag, PSL_TRACED)); 1566 KASSERT(!ISSET(l->l_flag, LW_SYSTEM)); 1567 KASSERT(p->p_nrlwps > 0); 1568 KASSERT((code == TRAP_CHLD) || (code == TRAP_LWP) || 1569 (code == TRAP_EXEC)); 1570 1571 /* 1572 * If there's a pending SIGKILL process it immediately. 1573 */ 1574 if (p->p_xsig == SIGKILL || 1575 sigismember(&p->p_sigpend.sp_set, SIGKILL)) { 1576 mutex_exit(p->p_lock); 1577 mutex_exit(proc_lock); 1578 return; 1579 } 1580 1581 KSI_INIT_TRAP(&ksi); 1582 ksi.ksi_lid = l->l_lid; 1583 ksi.ksi_info._signo = signo; 1584 ksi.ksi_info._code = code; 1585 1586 /* Needed for ktrace */ 1587 ps = p->p_sigacts; 1588 action = SIGACTION_PS(ps, signo).sa_handler; 1589 mask = &l->l_sigmask; 1590 1591 p->p_xsig = signo; 1592 p->p_sigctx.ps_faked = true; 1593 p->p_sigctx.ps_lwp = ksi.ksi_lid; 1594 p->p_sigctx.ps_info = ksi.ksi_info; 1595 1596 sigswitch(0, signo, false); 1597 1598 /* XXX: hangs for VFORK */ 1599 if (code == TRAP_CHLD) 1600 return; 1601 1602 if (ktrpoint(KTR_PSIG)) { 1603 if (p->p_emul->e_ktrpsig) 1604 p->p_emul->e_ktrpsig(signo, action, mask, &ksi); 1605 else 1606 ktrpsig(signo, action, mask, &ksi); 1607 } 1608 } 1609 1610 /* 1611 * Stop the current process and switch away when being stopped or traced. 1612 */ 1613 void 1614 sigswitch(int ppmask, int signo, bool relock) 1615 { 1616 struct lwp *l = curlwp; 1617 struct proc *p = l->l_proc; 1618 int biglocks; 1619 1620 KASSERT(mutex_owned(p->p_lock)); 1621 KASSERT(l->l_stat == LSONPROC); 1622 KASSERT(p->p_nrlwps > 0); 1623 1624 /* 1625 * On entry we know that the process needs to stop. If it's 1626 * the result of a 'sideways' stop signal that has been sourced 1627 * through issignal(), then stop other LWPs in the process too. 1628 */ 1629 if (p->p_stat == SACTIVE && (p->p_sflag & PS_STOPPING) == 0) { 1630 KASSERT(signo != 0); 1631 proc_stop(p, signo); 1632 KASSERT(p->p_nrlwps > 0); 1633 } 1634 1635 /* 1636 * If we are the last live LWP, and the stop was a result of 1637 * a new signal, then signal the parent. 1638 */ 1639 if ((p->p_sflag & PS_STOPPING) != 0) { 1640 if (relock && !mutex_tryenter(proc_lock)) { 1641 mutex_exit(p->p_lock); 1642 mutex_enter(proc_lock); 1643 mutex_enter(p->p_lock); 1644 } 1645 1646 if (p->p_nrlwps == 1 && (p->p_sflag & PS_STOPPING) != 0) { 1647 /* 1648 * Note that proc_stop_done() can drop 1649 * p->p_lock briefly. 1650 */ 1651 proc_stop_done(p, ppmask); 1652 } 1653 1654 mutex_exit(proc_lock); 1655 } 1656 1657 /* 1658 * Unlock and switch away. 1659 */ 1660 KERNEL_UNLOCK_ALL(l, &biglocks); 1661 if (p->p_stat == SSTOP || (p->p_sflag & PS_STOPPING) != 0) { 1662 p->p_nrlwps--; 1663 lwp_lock(l); 1664 KASSERT(l->l_stat == LSONPROC || l->l_stat == LSSLEEP); 1665 l->l_stat = LSSTOP; 1666 lwp_unlock(l); 1667 } 1668 1669 mutex_exit(p->p_lock); 1670 lwp_lock(l); 1671 mi_switch(l); 1672 KERNEL_LOCK(biglocks, l); 1673 } 1674 1675 /* 1676 * Check for a signal from the debugger. 1677 */ 1678 static int 1679 sigchecktrace(void) 1680 { 1681 struct lwp *l = curlwp; 1682 struct proc *p = l->l_proc; 1683 int signo; 1684 1685 KASSERT(mutex_owned(p->p_lock)); 1686 1687 /* If there's a pending SIGKILL, process it immediately. */ 1688 if (sigismember(&p->p_sigpend.sp_set, SIGKILL)) 1689 return 0; 1690 1691 /* 1692 * If we are no longer being traced, or the parent didn't 1693 * give us a signal, or we're stopping, look for more signals. 1694 */ 1695 if ((p->p_slflag & PSL_TRACED) == 0 || p->p_xsig == 0 || 1696 (p->p_sflag & PS_STOPPING) != 0) 1697 return 0; 1698 1699 /* 1700 * If the new signal is being masked, look for other signals. 1701 * `p->p_sigctx.ps_siglist |= mask' is done in setrunnable(). 1702 */ 1703 signo = p->p_xsig; 1704 p->p_xsig = 0; 1705 if (sigismember(&l->l_sigmask, signo)) { 1706 signo = 0; 1707 } 1708 return signo; 1709 } 1710 1711 /* 1712 * If the current process has received a signal (should be caught or cause 1713 * termination, should interrupt current syscall), return the signal number. 1714 * 1715 * Stop signals with default action are processed immediately, then cleared; 1716 * they aren't returned. This is checked after each entry to the system for 1717 * a syscall or trap. 1718 * 1719 * We will also return -1 if the process is exiting and the current LWP must 1720 * follow suit. 1721 */ 1722 int 1723 issignal(struct lwp *l) 1724 { 1725 struct proc *p; 1726 int signo, prop; 1727 sigpend_t *sp; 1728 sigset_t ss; 1729 1730 p = l->l_proc; 1731 sp = NULL; 1732 signo = 0; 1733 1734 KASSERT(p == curproc); 1735 KASSERT(mutex_owned(p->p_lock)); 1736 1737 for (;;) { 1738 /* Discard any signals that we have decided not to take. */ 1739 if (signo != 0) { 1740 (void)sigget(sp, NULL, signo, NULL); 1741 } 1742 1743 /* 1744 * If the process is stopped/stopping, then stop ourselves 1745 * now that we're on the kernel/userspace boundary. When 1746 * we awaken, check for a signal from the debugger. 1747 */ 1748 if (p->p_stat == SSTOP || (p->p_sflag & PS_STOPPING) != 0) { 1749 sigswitch(PS_NOCLDSTOP, 0, true); 1750 mutex_enter(p->p_lock); 1751 signo = sigchecktrace(); 1752 } else if (p->p_stat == SACTIVE) 1753 signo = sigchecktrace(); 1754 else 1755 signo = 0; 1756 1757 /* Signals from the debugger are "out of band". */ 1758 sp = NULL; 1759 1760 /* 1761 * If the debugger didn't provide a signal, find a pending 1762 * signal from our set. Check per-LWP signals first, and 1763 * then per-process. 1764 */ 1765 if (signo == 0) { 1766 sp = &l->l_sigpend; 1767 ss = sp->sp_set; 1768 if ((p->p_lflag & PL_PPWAIT) != 0) 1769 sigminusset(&vforksigmask, &ss); 1770 sigminusset(&l->l_sigmask, &ss); 1771 1772 if ((signo = firstsig(&ss)) == 0) { 1773 sp = &p->p_sigpend; 1774 ss = sp->sp_set; 1775 if ((p->p_lflag & PL_PPWAIT) != 0) 1776 sigminusset(&vforksigmask, &ss); 1777 sigminusset(&l->l_sigmask, &ss); 1778 1779 if ((signo = firstsig(&ss)) == 0) { 1780 /* 1781 * No signal pending - clear the 1782 * indicator and bail out. 1783 */ 1784 lwp_lock(l); 1785 l->l_flag &= ~LW_PENDSIG; 1786 lwp_unlock(l); 1787 sp = NULL; 1788 break; 1789 } 1790 } 1791 } 1792 1793 /* 1794 * We should see pending but ignored signals only if 1795 * we are being traced. 1796 */ 1797 if (sigismember(&p->p_sigctx.ps_sigignore, signo) && 1798 (p->p_slflag & PSL_TRACED) == 0) { 1799 /* Discard the signal. */ 1800 continue; 1801 } 1802 1803 /* 1804 * If traced, always stop, and stay stopped until released 1805 * by the debugger. If the our parent is our debugger waiting 1806 * for us and we vforked, don't hang as we could deadlock. 1807 */ 1808 if (ISSET(p->p_slflag, PSL_TRACED) && signo != SIGKILL && 1809 !(ISSET(p->p_lflag, PL_PPWAIT) && 1810 (p->p_pptr == p->p_opptr))) { 1811 /* 1812 * Take the signal, but don't remove it from the 1813 * siginfo queue, because the debugger can send 1814 * it later. 1815 */ 1816 if (sp) 1817 sigdelset(&sp->sp_set, signo); 1818 p->p_xsig = signo; 1819 1820 /* Handling of signal trace */ 1821 sigswitch(0, signo, true); 1822 mutex_enter(p->p_lock); 1823 1824 /* Check for a signal from the debugger. */ 1825 if ((signo = sigchecktrace()) == 0) 1826 continue; 1827 1828 /* Signals from the debugger are "out of band". */ 1829 sp = NULL; 1830 } 1831 1832 prop = sigprop[signo]; 1833 1834 /* 1835 * Decide whether the signal should be returned. 1836 */ 1837 switch ((long)SIGACTION(p, signo).sa_handler) { 1838 case (long)SIG_DFL: 1839 /* 1840 * Don't take default actions on system processes. 1841 */ 1842 if (p->p_pid <= 1) { 1843 #ifdef DIAGNOSTIC 1844 /* 1845 * Are you sure you want to ignore SIGSEGV 1846 * in init? XXX 1847 */ 1848 printf_nolog("Process (pid %d) got sig %d\n", 1849 p->p_pid, signo); 1850 #endif 1851 continue; 1852 } 1853 1854 /* 1855 * If there is a pending stop signal to process with 1856 * default action, stop here, then clear the signal. 1857 * However, if process is member of an orphaned 1858 * process group, ignore tty stop signals. 1859 */ 1860 if (prop & SA_STOP) { 1861 /* 1862 * XXX Don't hold proc_lock for p_lflag, 1863 * but it's not a big deal. 1864 */ 1865 if ((ISSET(p->p_slflag, PSL_TRACED) && 1866 !(ISSET(p->p_lflag, PL_PPWAIT) && 1867 (p->p_pptr == p->p_opptr))) || 1868 ((p->p_lflag & PL_ORPHANPG) != 0 && 1869 prop & SA_TTYSTOP)) { 1870 /* Ignore the signal. */ 1871 continue; 1872 } 1873 /* Take the signal. */ 1874 (void)sigget(sp, NULL, signo, NULL); 1875 p->p_xsig = signo; 1876 p->p_sflag &= ~PS_CONTINUED; 1877 signo = 0; 1878 sigswitch(PS_NOCLDSTOP, p->p_xsig, true); 1879 mutex_enter(p->p_lock); 1880 } else if (prop & SA_IGNORE) { 1881 /* 1882 * Except for SIGCONT, shouldn't get here. 1883 * Default action is to ignore; drop it. 1884 */ 1885 continue; 1886 } 1887 break; 1888 1889 case (long)SIG_IGN: 1890 #ifdef DEBUG_ISSIGNAL 1891 /* 1892 * Masking above should prevent us ever trying 1893 * to take action on an ignored signal other 1894 * than SIGCONT, unless process is traced. 1895 */ 1896 if ((prop & SA_CONT) == 0 && 1897 (p->p_slflag & PSL_TRACED) == 0) 1898 printf_nolog("issignal\n"); 1899 #endif 1900 continue; 1901 1902 default: 1903 /* 1904 * This signal has an action, let postsig() process 1905 * it. 1906 */ 1907 break; 1908 } 1909 1910 break; 1911 } 1912 1913 l->l_sigpendset = sp; 1914 return signo; 1915 } 1916 1917 /* 1918 * Take the action for the specified signal 1919 * from the current set of pending signals. 1920 */ 1921 void 1922 postsig(int signo) 1923 { 1924 struct lwp *l; 1925 struct proc *p; 1926 struct sigacts *ps; 1927 sig_t action; 1928 sigset_t *returnmask; 1929 ksiginfo_t ksi; 1930 1931 l = curlwp; 1932 p = l->l_proc; 1933 ps = p->p_sigacts; 1934 1935 KASSERT(mutex_owned(p->p_lock)); 1936 KASSERT(signo > 0); 1937 1938 /* 1939 * Set the new mask value and also defer further occurrences of this 1940 * signal. 1941 * 1942 * Special case: user has done a sigsuspend. Here the current mask is 1943 * not of interest, but rather the mask from before the sigsuspend is 1944 * what we want restored after the signal processing is completed. 1945 */ 1946 if (l->l_sigrestore) { 1947 returnmask = &l->l_sigoldmask; 1948 l->l_sigrestore = 0; 1949 } else 1950 returnmask = &l->l_sigmask; 1951 1952 /* 1953 * Commit to taking the signal before releasing the mutex. 1954 */ 1955 action = SIGACTION_PS(ps, signo).sa_handler; 1956 l->l_ru.ru_nsignals++; 1957 if (l->l_sigpendset == NULL) { 1958 /* From the debugger */ 1959 if (p->p_sigctx.ps_faked && 1960 signo == p->p_sigctx.ps_info._signo) { 1961 KSI_INIT(&ksi); 1962 ksi.ksi_info = p->p_sigctx.ps_info; 1963 ksi.ksi_lid = p->p_sigctx.ps_lwp; 1964 p->p_sigctx.ps_faked = false; 1965 } else { 1966 if (!siggetinfo(&l->l_sigpend, &ksi, signo)) 1967 (void)siggetinfo(&p->p_sigpend, &ksi, signo); 1968 } 1969 } else 1970 sigget(l->l_sigpendset, &ksi, signo, NULL); 1971 1972 if (ktrpoint(KTR_PSIG)) { 1973 mutex_exit(p->p_lock); 1974 if (p->p_emul->e_ktrpsig) 1975 p->p_emul->e_ktrpsig(signo, action, 1976 returnmask, &ksi); 1977 else 1978 ktrpsig(signo, action, returnmask, &ksi); 1979 mutex_enter(p->p_lock); 1980 } 1981 1982 SDT_PROBE(proc, kernel, , signal__handle, signo, &ksi, action, 0, 0); 1983 1984 if (action == SIG_DFL) { 1985 /* 1986 * Default action, where the default is to kill 1987 * the process. (Other cases were ignored above.) 1988 */ 1989 sigexit(l, signo); 1990 return; 1991 } 1992 1993 /* 1994 * If we get here, the signal must be caught. 1995 */ 1996 #ifdef DIAGNOSTIC 1997 if (action == SIG_IGN || sigismember(&l->l_sigmask, signo)) 1998 panic("postsig action"); 1999 #endif 2000 2001 kpsendsig(l, &ksi, returnmask); 2002 } 2003 2004 /* 2005 * sendsig: 2006 * 2007 * Default signal delivery method for NetBSD. 2008 */ 2009 void 2010 sendsig(const struct ksiginfo *ksi, const sigset_t *mask) 2011 { 2012 struct sigacts *sa; 2013 int sig; 2014 2015 sig = ksi->ksi_signo; 2016 sa = curproc->p_sigacts; 2017 2018 switch (sa->sa_sigdesc[sig].sd_vers) { 2019 case 0: 2020 case 1: 2021 /* Compat for 1.6 and earlier. */ 2022 if (sendsig_sigcontext_vec == NULL) { 2023 break; 2024 } 2025 (*sendsig_sigcontext_vec)(ksi, mask); 2026 return; 2027 case 2: 2028 case 3: 2029 sendsig_siginfo(ksi, mask); 2030 return; 2031 default: 2032 break; 2033 } 2034 2035 printf("sendsig: bad version %d\n", sa->sa_sigdesc[sig].sd_vers); 2036 sigexit(curlwp, SIGILL); 2037 } 2038 2039 /* 2040 * sendsig_reset: 2041 * 2042 * Reset the signal action. Called from emulation specific sendsig() 2043 * before unlocking to deliver the signal. 2044 */ 2045 void 2046 sendsig_reset(struct lwp *l, int signo) 2047 { 2048 struct proc *p = l->l_proc; 2049 struct sigacts *ps = p->p_sigacts; 2050 2051 KASSERT(mutex_owned(p->p_lock)); 2052 2053 p->p_sigctx.ps_lwp = 0; 2054 memset(&p->p_sigctx.ps_info, 0, sizeof(p->p_sigctx.ps_info)); 2055 2056 mutex_enter(&ps->sa_mutex); 2057 sigplusset(&SIGACTION_PS(ps, signo).sa_mask, &l->l_sigmask); 2058 if (SIGACTION_PS(ps, signo).sa_flags & SA_RESETHAND) { 2059 sigdelset(&p->p_sigctx.ps_sigcatch, signo); 2060 if (signo != SIGCONT && sigprop[signo] & SA_IGNORE) 2061 sigaddset(&p->p_sigctx.ps_sigignore, signo); 2062 SIGACTION_PS(ps, signo).sa_handler = SIG_DFL; 2063 } 2064 mutex_exit(&ps->sa_mutex); 2065 } 2066 2067 /* 2068 * Kill the current process for stated reason. 2069 */ 2070 void 2071 killproc(struct proc *p, const char *why) 2072 { 2073 2074 KASSERT(mutex_owned(proc_lock)); 2075 2076 log(LOG_ERR, "pid %d was killed: %s\n", p->p_pid, why); 2077 uprintf_locked("sorry, pid %d was killed: %s\n", p->p_pid, why); 2078 psignal(p, SIGKILL); 2079 } 2080 2081 /* 2082 * Force the current process to exit with the specified signal, dumping core 2083 * if appropriate. We bypass the normal tests for masked and caught 2084 * signals, allowing unrecoverable failures to terminate the process without 2085 * changing signal state. Mark the accounting record with the signal 2086 * termination. If dumping core, save the signal number for the debugger. 2087 * Calls exit and does not return. 2088 */ 2089 void 2090 sigexit(struct lwp *l, int signo) 2091 { 2092 int exitsig, error, docore; 2093 struct proc *p; 2094 struct lwp *t; 2095 2096 p = l->l_proc; 2097 2098 KASSERT(mutex_owned(p->p_lock)); 2099 KERNEL_UNLOCK_ALL(l, NULL); 2100 2101 /* 2102 * Don't permit coredump() multiple times in the same process. 2103 * Call back into sigexit, where we will be suspended until 2104 * the deed is done. Note that this is a recursive call, but 2105 * LW_WCORE will prevent us from coming back this way. 2106 */ 2107 if ((p->p_sflag & PS_WCORE) != 0) { 2108 lwp_lock(l); 2109 l->l_flag |= (LW_WCORE | LW_WEXIT | LW_WSUSPEND); 2110 lwp_unlock(l); 2111 mutex_exit(p->p_lock); 2112 lwp_userret(l); 2113 panic("sigexit 1"); 2114 /* NOTREACHED */ 2115 } 2116 2117 /* If process is already on the way out, then bail now. */ 2118 if ((p->p_sflag & PS_WEXIT) != 0) { 2119 mutex_exit(p->p_lock); 2120 lwp_exit(l); 2121 panic("sigexit 2"); 2122 /* NOTREACHED */ 2123 } 2124 2125 /* 2126 * Prepare all other LWPs for exit. If dumping core, suspend them 2127 * so that their registers are available long enough to be dumped. 2128 */ 2129 if ((docore = (sigprop[signo] & SA_CORE)) != 0) { 2130 p->p_sflag |= PS_WCORE; 2131 for (;;) { 2132 LIST_FOREACH(t, &p->p_lwps, l_sibling) { 2133 lwp_lock(t); 2134 if (t == l) { 2135 t->l_flag &= ~LW_WSUSPEND; 2136 lwp_unlock(t); 2137 continue; 2138 } 2139 t->l_flag |= (LW_WCORE | LW_WEXIT); 2140 lwp_suspend(l, t); 2141 } 2142 2143 if (p->p_nrlwps == 1) 2144 break; 2145 2146 /* 2147 * Kick any LWPs sitting in lwp_wait1(), and wait 2148 * for everyone else to stop before proceeding. 2149 */ 2150 p->p_nlwpwait++; 2151 cv_broadcast(&p->p_lwpcv); 2152 cv_wait(&p->p_lwpcv, p->p_lock); 2153 p->p_nlwpwait--; 2154 } 2155 } 2156 2157 exitsig = signo; 2158 p->p_acflag |= AXSIG; 2159 memset(&p->p_sigctx.ps_info, 0, sizeof(p->p_sigctx.ps_info)); 2160 p->p_sigctx.ps_info._signo = signo; 2161 p->p_sigctx.ps_info._code = SI_NOINFO; 2162 2163 if (docore) { 2164 mutex_exit(p->p_lock); 2165 error = (*coredump_vec)(l, NULL); 2166 2167 if (kern_logsigexit) { 2168 int uid = l->l_cred ? 2169 (int)kauth_cred_geteuid(l->l_cred) : -1; 2170 2171 if (error) 2172 log(LOG_INFO, lognocoredump, p->p_pid, 2173 p->p_comm, uid, signo, error); 2174 else 2175 log(LOG_INFO, logcoredump, p->p_pid, 2176 p->p_comm, uid, signo); 2177 } 2178 2179 #ifdef PAX_SEGVGUARD 2180 pax_segvguard(l, p->p_textvp, p->p_comm, true); 2181 #endif /* PAX_SEGVGUARD */ 2182 /* Acquire the sched state mutex. exit1() will release it. */ 2183 mutex_enter(p->p_lock); 2184 if (error == 0) 2185 p->p_sflag |= PS_COREDUMP; 2186 } 2187 2188 /* No longer dumping core. */ 2189 p->p_sflag &= ~PS_WCORE; 2190 2191 exit1(l, 0, exitsig); 2192 /* NOTREACHED */ 2193 } 2194 2195 /* 2196 * Put process 'p' into the stopped state and optionally, notify the parent. 2197 */ 2198 void 2199 proc_stop(struct proc *p, int signo) 2200 { 2201 struct lwp *l; 2202 2203 KASSERT(mutex_owned(p->p_lock)); 2204 2205 /* 2206 * First off, set the stopping indicator and bring all sleeping 2207 * LWPs to a halt so they are included in p->p_nrlwps. We musn't 2208 * unlock between here and the p->p_nrlwps check below. 2209 */ 2210 p->p_sflag |= PS_STOPPING | PS_NOTIFYSTOP; 2211 membar_producer(); 2212 2213 proc_stop_lwps(p); 2214 2215 /* 2216 * If there are no LWPs available to take the signal, then we 2217 * signal the parent process immediately. Otherwise, the last 2218 * LWP to stop will take care of it. 2219 */ 2220 2221 if (p->p_nrlwps == 0) { 2222 proc_stop_done(p, PS_NOCLDSTOP); 2223 } else { 2224 /* 2225 * Have the remaining LWPs come to a halt, and trigger 2226 * proc_stop_callout() to ensure that they do. 2227 */ 2228 LIST_FOREACH(l, &p->p_lwps, l_sibling) { 2229 sigpost(l, SIG_DFL, SA_STOP, signo); 2230 } 2231 callout_schedule(&proc_stop_ch, 1); 2232 } 2233 } 2234 2235 /* 2236 * When stopping a process, we do not immediatly set sleeping LWPs stopped, 2237 * but wait for them to come to a halt at the kernel-user boundary. This is 2238 * to allow LWPs to release any locks that they may hold before stopping. 2239 * 2240 * Non-interruptable sleeps can be long, and there is the potential for an 2241 * LWP to begin sleeping interruptably soon after the process has been set 2242 * stopping (PS_STOPPING). These LWPs will not notice that the process is 2243 * stopping, and so complete halt of the process and the return of status 2244 * information to the parent could be delayed indefinitely. 2245 * 2246 * To handle this race, proc_stop_callout() runs once per tick while there 2247 * are stopping processes in the system. It sets LWPs that are sleeping 2248 * interruptably into the LSSTOP state. 2249 * 2250 * Note that we are not concerned about keeping all LWPs stopped while the 2251 * process is stopped: stopped LWPs can awaken briefly to handle signals. 2252 * What we do need to ensure is that all LWPs in a stopping process have 2253 * stopped at least once, so that notification can be sent to the parent 2254 * process. 2255 */ 2256 static void 2257 proc_stop_callout(void *cookie) 2258 { 2259 bool more, restart; 2260 struct proc *p; 2261 2262 (void)cookie; 2263 2264 do { 2265 restart = false; 2266 more = false; 2267 2268 mutex_enter(proc_lock); 2269 PROCLIST_FOREACH(p, &allproc) { 2270 mutex_enter(p->p_lock); 2271 2272 if ((p->p_sflag & PS_STOPPING) == 0) { 2273 mutex_exit(p->p_lock); 2274 continue; 2275 } 2276 2277 /* Stop any LWPs sleeping interruptably. */ 2278 proc_stop_lwps(p); 2279 if (p->p_nrlwps == 0) { 2280 /* 2281 * We brought the process to a halt. 2282 * Mark it as stopped and notify the 2283 * parent. 2284 */ 2285 if ((p->p_sflag & PS_NOTIFYSTOP) != 0) { 2286 /* 2287 * Note that proc_stop_done() will 2288 * drop p->p_lock briefly. 2289 * Arrange to restart and check 2290 * all processes again. 2291 */ 2292 restart = true; 2293 } 2294 proc_stop_done(p, PS_NOCLDSTOP); 2295 } else 2296 more = true; 2297 2298 mutex_exit(p->p_lock); 2299 if (restart) 2300 break; 2301 } 2302 mutex_exit(proc_lock); 2303 } while (restart); 2304 2305 /* 2306 * If we noted processes that are stopping but still have 2307 * running LWPs, then arrange to check again in 1 tick. 2308 */ 2309 if (more) 2310 callout_schedule(&proc_stop_ch, 1); 2311 } 2312 2313 /* 2314 * Given a process in state SSTOP, set the state back to SACTIVE and 2315 * move LSSTOP'd LWPs to LSSLEEP or make them runnable. 2316 */ 2317 void 2318 proc_unstop(struct proc *p) 2319 { 2320 struct lwp *l; 2321 int sig; 2322 2323 KASSERT(mutex_owned(proc_lock)); 2324 KASSERT(mutex_owned(p->p_lock)); 2325 2326 p->p_stat = SACTIVE; 2327 p->p_sflag &= ~PS_STOPPING; 2328 sig = p->p_xsig; 2329 2330 if (!p->p_waited) 2331 p->p_pptr->p_nstopchild--; 2332 2333 LIST_FOREACH(l, &p->p_lwps, l_sibling) { 2334 lwp_lock(l); 2335 if (l->l_stat != LSSTOP) { 2336 lwp_unlock(l); 2337 continue; 2338 } 2339 if (l->l_wchan == NULL) { 2340 setrunnable(l); 2341 continue; 2342 } 2343 if (sig && (l->l_flag & LW_SINTR) != 0) { 2344 setrunnable(l); 2345 sig = 0; 2346 } else { 2347 l->l_stat = LSSLEEP; 2348 p->p_nrlwps++; 2349 lwp_unlock(l); 2350 } 2351 } 2352 } 2353 2354 void 2355 proc_stoptrace(int trapno, int sysnum, const register_t args[], 2356 const register_t *ret, int error) 2357 { 2358 struct lwp *l = curlwp; 2359 struct proc *p = l->l_proc; 2360 struct sigacts *ps; 2361 sigset_t *mask; 2362 sig_t action; 2363 ksiginfo_t ksi; 2364 size_t i, sy_narg; 2365 const int signo = SIGTRAP; 2366 2367 KASSERT((trapno == TRAP_SCE) || (trapno == TRAP_SCX)); 2368 KASSERT(p->p_pptr != initproc); 2369 KASSERT(ISSET(p->p_slflag, PSL_TRACED)); 2370 KASSERT(ISSET(p->p_slflag, PSL_SYSCALL)); 2371 2372 sy_narg = p->p_emul->e_sysent[sysnum].sy_narg; 2373 2374 KSI_INIT_TRAP(&ksi); 2375 ksi.ksi_lid = l->l_lid; 2376 ksi.ksi_signo = signo; 2377 ksi.ksi_code = trapno; 2378 2379 ksi.ksi_sysnum = sysnum; 2380 if (trapno == TRAP_SCE) { 2381 ksi.ksi_retval[0] = 0; 2382 ksi.ksi_retval[1] = 0; 2383 ksi.ksi_error = 0; 2384 } else { 2385 ksi.ksi_retval[0] = ret[0]; 2386 ksi.ksi_retval[1] = ret[1]; 2387 ksi.ksi_error = error; 2388 } 2389 2390 memset(ksi.ksi_args, 0, sizeof(ksi.ksi_args)); 2391 2392 for (i = 0; i < sy_narg; i++) 2393 ksi.ksi_args[i] = args[i]; 2394 2395 mutex_enter(p->p_lock); 2396 2397 /* 2398 * If there's a pending SIGKILL process it immediately. 2399 */ 2400 if (p->p_xsig == SIGKILL || 2401 sigismember(&p->p_sigpend.sp_set, SIGKILL)) { 2402 mutex_exit(p->p_lock); 2403 return; 2404 } 2405 2406 /* Needed for ktrace */ 2407 ps = p->p_sigacts; 2408 action = SIGACTION_PS(ps, signo).sa_handler; 2409 mask = &l->l_sigmask; 2410 2411 p->p_xsig = signo; 2412 p->p_sigctx.ps_lwp = ksi.ksi_lid; 2413 p->p_sigctx.ps_info = ksi.ksi_info; 2414 sigswitch(0, signo, true); 2415 2416 if (ktrpoint(KTR_PSIG)) { 2417 if (p->p_emul->e_ktrpsig) 2418 p->p_emul->e_ktrpsig(signo, action, mask, &ksi); 2419 else 2420 ktrpsig(signo, action, mask, &ksi); 2421 } 2422 } 2423 2424 static int 2425 filt_sigattach(struct knote *kn) 2426 { 2427 struct proc *p = curproc; 2428 2429 kn->kn_obj = p; 2430 kn->kn_flags |= EV_CLEAR; /* automatically set */ 2431 2432 mutex_enter(p->p_lock); 2433 SLIST_INSERT_HEAD(&p->p_klist, kn, kn_selnext); 2434 mutex_exit(p->p_lock); 2435 2436 return 0; 2437 } 2438 2439 static void 2440 filt_sigdetach(struct knote *kn) 2441 { 2442 struct proc *p = kn->kn_obj; 2443 2444 mutex_enter(p->p_lock); 2445 SLIST_REMOVE(&p->p_klist, kn, knote, kn_selnext); 2446 mutex_exit(p->p_lock); 2447 } 2448 2449 /* 2450 * Signal knotes are shared with proc knotes, so we apply a mask to 2451 * the hint in order to differentiate them from process hints. This 2452 * could be avoided by using a signal-specific knote list, but probably 2453 * isn't worth the trouble. 2454 */ 2455 static int 2456 filt_signal(struct knote *kn, long hint) 2457 { 2458 2459 if (hint & NOTE_SIGNAL) { 2460 hint &= ~NOTE_SIGNAL; 2461 2462 if (kn->kn_id == hint) 2463 kn->kn_data++; 2464 } 2465 return (kn->kn_data != 0); 2466 } 2467 2468 const struct filterops sig_filtops = { 2469 .f_isfd = 0, 2470 .f_attach = filt_sigattach, 2471 .f_detach = filt_sigdetach, 2472 .f_event = filt_signal, 2473 }; 2474