]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/kern/kern_exit.c
ksiginfo_alloc(): change to directly take M_WAITOK/NOWAIT flags
[FreeBSD/FreeBSD.git] / sys / kern / kern_exit.c
1 /*-
2  * SPDX-License-Identifier: BSD-3-Clause
3  *
4  * Copyright (c) 1982, 1986, 1989, 1991, 1993
5  *      The Regents of the University of California.  All rights reserved.
6  * (c) UNIX System Laboratories, Inc.
7  * All or some portions of this file are derived from material licensed
8  * to the University of California by American Telephone and Telegraph
9  * Co. or Unix System Laboratories, Inc. and are reproduced herein with
10  * the permission of UNIX System Laboratories, Inc.
11  *
12  * Redistribution and use in source and binary forms, with or without
13  * modification, are permitted provided that the following conditions
14  * are met:
15  * 1. Redistributions of source code must retain the above copyright
16  *    notice, this list of conditions and the following disclaimer.
17  * 2. Redistributions in binary form must reproduce the above copyright
18  *    notice, this list of conditions and the following disclaimer in the
19  *    documentation and/or other materials provided with the distribution.
20  * 3. Neither the name of the University nor the names of its contributors
21  *    may be used to endorse or promote products derived from this software
22  *    without specific prior written permission.
23  *
24  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34  * SUCH DAMAGE.
35  *
36  *      @(#)kern_exit.c 8.7 (Berkeley) 2/12/94
37  */
38
39 #include <sys/cdefs.h>
40 __FBSDID("$FreeBSD$");
41
42 #include "opt_ddb.h"
43 #include "opt_ktrace.h"
44
45 #include <sys/param.h>
46 #include <sys/systm.h>
47 #include <sys/sysproto.h>
48 #include <sys/capsicum.h>
49 #include <sys/eventhandler.h>
50 #include <sys/kernel.h>
51 #include <sys/ktr.h>
52 #include <sys/malloc.h>
53 #include <sys/lock.h>
54 #include <sys/mutex.h>
55 #include <sys/proc.h>
56 #include <sys/procdesc.h>
57 #include <sys/jail.h>
58 #include <sys/tty.h>
59 #include <sys/wait.h>
60 #include <sys/vmmeter.h>
61 #include <sys/vnode.h>
62 #include <sys/racct.h>
63 #include <sys/resourcevar.h>
64 #include <sys/sbuf.h>
65 #include <sys/signalvar.h>
66 #include <sys/sched.h>
67 #include <sys/sx.h>
68 #include <sys/syscallsubr.h>
69 #include <sys/sysctl.h>
70 #include <sys/syslog.h>
71 #include <sys/ptrace.h>
72 #include <sys/acct.h>           /* for acct_process() function prototype */
73 #include <sys/filedesc.h>
74 #include <sys/sdt.h>
75 #include <sys/shm.h>
76 #include <sys/sem.h>
77 #include <sys/sysent.h>
78 #include <sys/timers.h>
79 #include <sys/umtxvar.h>
80 #ifdef KTRACE
81 #include <sys/ktrace.h>
82 #endif
83
84 #include <security/audit/audit.h>
85 #include <security/mac/mac_framework.h>
86
87 #include <vm/vm.h>
88 #include <vm/vm_extern.h>
89 #include <vm/vm_param.h>
90 #include <vm/pmap.h>
91 #include <vm/vm_map.h>
92 #include <vm/vm_page.h>
93 #include <vm/uma.h>
94
95 #ifdef KDTRACE_HOOKS
96 #include <sys/dtrace_bsd.h>
97 dtrace_execexit_func_t  dtrace_fasttrap_exit;
98 #endif
99
100 SDT_PROVIDER_DECLARE(proc);
101 SDT_PROBE_DEFINE1(proc, , , exit, "int");
102
103 static int kern_kill_on_dbg_exit = 1;
104 SYSCTL_INT(_kern, OID_AUTO, kill_on_debugger_exit, CTLFLAG_RWTUN,
105     &kern_kill_on_dbg_exit, 0,
106     "Kill ptraced processes when debugger exits");
107
108 static bool kern_wait_dequeue_sigchld = 1;
109 SYSCTL_BOOL(_kern, OID_AUTO, wait_dequeue_sigchld, CTLFLAG_RWTUN,
110     &kern_wait_dequeue_sigchld, 0,
111     "Dequeue SIGCHLD on wait(2) for live process");
112
113 struct proc *
114 proc_realparent(struct proc *child)
115 {
116         struct proc *p, *parent;
117
118         sx_assert(&proctree_lock, SX_LOCKED);
119         if ((child->p_treeflag & P_TREE_ORPHANED) == 0)
120                 return (child->p_pptr->p_pid == child->p_oppid ?
121                     child->p_pptr : child->p_reaper);
122         for (p = child; (p->p_treeflag & P_TREE_FIRST_ORPHAN) == 0;) {
123                 /* Cannot use LIST_PREV(), since the list head is not known. */
124                 p = __containerof(p->p_orphan.le_prev, struct proc,
125                     p_orphan.le_next);
126                 KASSERT((p->p_treeflag & P_TREE_ORPHANED) != 0,
127                     ("missing P_ORPHAN %p", p));
128         }
129         parent = __containerof(p->p_orphan.le_prev, struct proc,
130             p_orphans.lh_first);
131         return (parent);
132 }
133
134 void
135 reaper_abandon_children(struct proc *p, bool exiting)
136 {
137         struct proc *p1, *p2, *ptmp;
138
139         sx_assert(&proctree_lock, SX_XLOCKED);
140         KASSERT(p != initproc, ("reaper_abandon_children for initproc"));
141         if ((p->p_treeflag & P_TREE_REAPER) == 0)
142                 return;
143         p1 = p->p_reaper;
144         LIST_FOREACH_SAFE(p2, &p->p_reaplist, p_reapsibling, ptmp) {
145                 LIST_REMOVE(p2, p_reapsibling);
146                 p2->p_reaper = p1;
147                 p2->p_reapsubtree = p->p_reapsubtree;
148                 LIST_INSERT_HEAD(&p1->p_reaplist, p2, p_reapsibling);
149                 if (exiting && p2->p_pptr == p) {
150                         PROC_LOCK(p2);
151                         proc_reparent(p2, p1, true);
152                         PROC_UNLOCK(p2);
153                 }
154         }
155         KASSERT(LIST_EMPTY(&p->p_reaplist), ("p_reaplist not empty"));
156         p->p_treeflag &= ~P_TREE_REAPER;
157 }
158
159 static void
160 reaper_clear(struct proc *p)
161 {
162         struct proc *p1;
163         bool clear;
164
165         sx_assert(&proctree_lock, SX_LOCKED);
166         LIST_REMOVE(p, p_reapsibling);
167         if (p->p_reapsubtree == 1)
168                 return;
169         clear = true;
170         LIST_FOREACH(p1, &p->p_reaper->p_reaplist, p_reapsibling) {
171                 if (p1->p_reapsubtree == p->p_reapsubtree) {
172                         clear = false;
173                         break;
174                 }
175         }
176         if (clear)
177                 proc_id_clear(PROC_ID_REAP, p->p_reapsubtree);
178 }
179
180 void
181 proc_clear_orphan(struct proc *p)
182 {
183         struct proc *p1;
184
185         sx_assert(&proctree_lock, SA_XLOCKED);
186         if ((p->p_treeflag & P_TREE_ORPHANED) == 0)
187                 return;
188         if ((p->p_treeflag & P_TREE_FIRST_ORPHAN) != 0) {
189                 p1 = LIST_NEXT(p, p_orphan);
190                 if (p1 != NULL)
191                         p1->p_treeflag |= P_TREE_FIRST_ORPHAN;
192                 p->p_treeflag &= ~P_TREE_FIRST_ORPHAN;
193         }
194         LIST_REMOVE(p, p_orphan);
195         p->p_treeflag &= ~P_TREE_ORPHANED;
196 }
197
198 void
199 exit_onexit(struct proc *p)
200 {
201         MPASS(p->p_numthreads == 1);
202         umtx_thread_exit(FIRST_THREAD_IN_PROC(p));
203 }
204
205 /*
206  * exit -- death of process.
207  */
208 void
209 sys_sys_exit(struct thread *td, struct sys_exit_args *uap)
210 {
211
212         exit1(td, uap->rval, 0);
213         /* NOTREACHED */
214 }
215
216 void
217 proc_set_p2_wexit(struct proc *p)
218 {
219         PROC_LOCK_ASSERT(p, MA_OWNED);
220         p->p_flag2 |= P2_WEXIT;
221         while (p->p_singlethr > 0)
222                 msleep(&p->p_singlethr, &p->p_mtx, PWAIT | PCATCH, "exit1t", 0);
223 }
224
225 /*
226  * Exit: deallocate address space and other resources, change proc state to
227  * zombie, and unlink proc from allproc and parent's lists.  Save exit status
228  * and rusage for wait().  Check for child processes and orphan them.
229  */
230 void
231 exit1(struct thread *td, int rval, int signo)
232 {
233         struct proc *p, *nq, *q, *t;
234         struct thread *tdt;
235         ksiginfo_t *ksi, *ksi1;
236         int signal_parent;
237
238         mtx_assert(&Giant, MA_NOTOWNED);
239         KASSERT(rval == 0 || signo == 0, ("exit1 rv %d sig %d", rval, signo));
240         TSPROCEXIT(td->td_proc->p_pid);
241
242         p = td->td_proc;
243         /*
244          * XXX in case we're rebooting we just let init die in order to
245          * work around an unsolved stack overflow seen very late during
246          * shutdown on sparc64 when the gmirror worker process exists.
247          * XXX what to do now that sparc64 is gone... remove if?
248          */
249         if (p == initproc && rebooting == 0) {
250                 printf("init died (signal %d, exit %d)\n", signo, rval);
251                 panic("Going nowhere without my init!");
252         }
253
254         /*
255          * Deref SU mp, since the thread does not return to userspace.
256          */
257         td_softdep_cleanup(td);
258
259         /*
260          * MUST abort all other threads before proceeding past here.
261          */
262         PROC_LOCK(p);
263         proc_set_p2_wexit(p);
264
265         /*
266          * First check if some other thread or external request got
267          * here before us.  If so, act appropriately: exit or suspend.
268          * We must ensure that stop requests are handled before we set
269          * P_WEXIT.
270          */
271         thread_suspend_check(0);
272         while (p->p_flag & P_HADTHREADS) {
273                 /*
274                  * Kill off the other threads. This requires
275                  * some co-operation from other parts of the kernel
276                  * so it may not be instantaneous.  With this state set
277                  * any thread attempting to interruptibly
278                  * sleep will return immediately with EINTR or EWOULDBLOCK
279                  * which will hopefully force them to back out to userland
280                  * freeing resources as they go.  Any thread attempting
281                  * to return to userland will thread_exit() from ast().
282                  * thread_exit() will unsuspend us when the last of the
283                  * other threads exits.
284                  * If there is already a thread singler after resumption,
285                  * calling thread_single() will fail; in that case, we just
286                  * re-check all suspension request, the thread should
287                  * either be suspended there or exit.
288                  */
289                 if (!thread_single(p, SINGLE_EXIT))
290                         /*
291                          * All other activity in this process is now
292                          * stopped.  Threading support has been turned
293                          * off.
294                          */
295                         break;
296                 /*
297                  * Recheck for new stop or suspend requests which
298                  * might appear while process lock was dropped in
299                  * thread_single().
300                  */
301                 thread_suspend_check(0);
302         }
303         KASSERT(p->p_numthreads == 1,
304             ("exit1: proc %p exiting with %d threads", p, p->p_numthreads));
305         racct_sub(p, RACCT_NTHR, 1);
306
307         /* Let event handler change exit status */
308         p->p_xexit = rval;
309         p->p_xsig = signo;
310
311         /*
312          * Ignore any pending request to stop due to a stop signal.
313          * Once P_WEXIT is set, future requests will be ignored as
314          * well.
315          */
316         p->p_flag &= ~P_STOPPED_SIG;
317         KASSERT(!P_SHOULDSTOP(p), ("exiting process is stopped"));
318
319         /* Note that we are exiting. */
320         p->p_flag |= P_WEXIT;
321
322         /*
323          * Wait for any processes that have a hold on our vmspace to
324          * release their reference.
325          */
326         while (p->p_lock > 0)
327                 msleep(&p->p_lock, &p->p_mtx, PWAIT, "exithold", 0);
328
329         PROC_UNLOCK(p);
330         /* Drain the limit callout while we don't have the proc locked */
331         callout_drain(&p->p_limco);
332
333 #ifdef AUDIT
334         /*
335          * The Sun BSM exit token contains two components: an exit status as
336          * passed to exit(), and a return value to indicate what sort of exit
337          * it was.  The exit status is WEXITSTATUS(rv), but it's not clear
338          * what the return value is.
339          */
340         AUDIT_ARG_EXIT(rval, 0);
341         AUDIT_SYSCALL_EXIT(0, td);
342 #endif
343
344         /* Are we a task leader with peers? */
345         if (p->p_peers != NULL && p == p->p_leader) {
346                 mtx_lock(&ppeers_lock);
347                 q = p->p_peers;
348                 while (q != NULL) {
349                         PROC_LOCK(q);
350                         kern_psignal(q, SIGKILL);
351                         PROC_UNLOCK(q);
352                         q = q->p_peers;
353                 }
354                 while (p->p_peers != NULL)
355                         msleep(p, &ppeers_lock, PWAIT, "exit1", 0);
356                 mtx_unlock(&ppeers_lock);
357         }
358
359         itimers_exit(p);
360
361         /*
362          * Check if any loadable modules need anything done at process exit.
363          * E.g. SYSV IPC stuff.
364          * Event handler could change exit status.
365          * XXX what if one of these generates an error?
366          */
367         EVENTHANDLER_DIRECT_INVOKE(process_exit, p);
368
369         /*
370          * If parent is waiting for us to exit or exec,
371          * P_PPWAIT is set; we will wakeup the parent below.
372          */
373         PROC_LOCK(p);
374         stopprofclock(p);
375         p->p_ptevents = 0;
376
377         /*
378          * Stop the real interval timer.  If the handler is currently
379          * executing, prevent it from rearming itself and let it finish.
380          */
381         if (timevalisset(&p->p_realtimer.it_value) &&
382             callout_stop(&p->p_itcallout) == 0) {
383                 timevalclear(&p->p_realtimer.it_interval);
384                 PROC_UNLOCK(p);
385                 callout_drain(&p->p_itcallout);
386         } else {
387                 PROC_UNLOCK(p);
388         }
389
390         if (p->p_sysent->sv_onexit != NULL)
391                 p->p_sysent->sv_onexit(p);
392         seltdfini(td);
393
394         /*
395          * Reset any sigio structures pointing to us as a result of
396          * F_SETOWN with our pid.  The P_WEXIT flag interlocks with fsetown().
397          */
398         funsetownlst(&p->p_sigiolst);
399
400         /*
401          * Close open files and release open-file table.
402          * This may block!
403          */
404         pdescfree(td);
405         fdescfree(td);
406
407         /*
408          * If this thread tickled GEOM, we need to wait for the giggling to
409          * stop before we return to userland
410          */
411         if (td->td_pflags & TDP_GEOM)
412                 g_waitidle();
413
414         /*
415          * Remove ourself from our leader's peer list and wake our leader.
416          */
417         if (p->p_leader->p_peers != NULL) {
418                 mtx_lock(&ppeers_lock);
419                 if (p->p_leader->p_peers != NULL) {
420                         q = p->p_leader;
421                         while (q->p_peers != p)
422                                 q = q->p_peers;
423                         q->p_peers = p->p_peers;
424                         wakeup(p->p_leader);
425                 }
426                 mtx_unlock(&ppeers_lock);
427         }
428
429         exec_free_abi_mappings(p);
430         vmspace_exit(td);
431         (void)acct_process(td);
432
433 #ifdef KTRACE
434         ktrprocexit(td);
435 #endif
436         /*
437          * Release reference to text vnode etc
438          */
439         if (p->p_textvp != NULL) {
440                 vrele(p->p_textvp);
441                 p->p_textvp = NULL;
442         }
443         if (p->p_textdvp != NULL) {
444                 vrele(p->p_textdvp);
445                 p->p_textdvp = NULL;
446         }
447         if (p->p_binname != NULL) {
448                 free(p->p_binname, M_PARGS);
449                 p->p_binname = NULL;
450         }
451
452         /*
453          * Release our limits structure.
454          */
455         lim_free(p->p_limit);
456         p->p_limit = NULL;
457
458         tidhash_remove(td);
459
460         /*
461          * Call machine-dependent code to release any
462          * machine-dependent resources other than the address space.
463          * The address space is released by "vmspace_exitfree(p)" in
464          * vm_waitproc().
465          */
466         cpu_exit(td);
467
468         WITNESS_WARN(WARN_PANIC, NULL, "process (pid %d) exiting", p->p_pid);
469
470         /*
471          * Remove from allproc. It still sits in the hash.
472          */
473         sx_xlock(&allproc_lock);
474         LIST_REMOVE(p, p_list);
475
476 #ifdef DDB
477         /*
478          * Used by ddb's 'ps' command to find this process via the
479          * pidhash.
480          */
481         p->p_list.le_prev = NULL;
482 #endif
483         sx_xunlock(&allproc_lock);
484
485         sx_xlock(&proctree_lock);
486         PROC_LOCK(p);
487         p->p_flag &= ~(P_TRACED | P_PPWAIT | P_PPTRACE);
488         PROC_UNLOCK(p);
489
490         /*
491          * killjobc() might drop and re-acquire proctree_lock to
492          * revoke control tty if exiting process was a session leader.
493          */
494         killjobc();
495
496         /*
497          * Reparent all children processes:
498          * - traced ones to the original parent (or init if we are that parent)
499          * - the rest to init
500          */
501         q = LIST_FIRST(&p->p_children);
502         if (q != NULL)          /* only need this if any child is S_ZOMB */
503                 wakeup(q->p_reaper);
504         for (; q != NULL; q = nq) {
505                 nq = LIST_NEXT(q, p_sibling);
506                 ksi = ksiginfo_alloc(M_WAITOK);
507                 PROC_LOCK(q);
508                 q->p_sigparent = SIGCHLD;
509
510                 if ((q->p_flag & P_TRACED) == 0) {
511                         proc_reparent(q, q->p_reaper, true);
512                         if (q->p_state == PRS_ZOMBIE) {
513                                 /*
514                                  * Inform reaper about the reparented
515                                  * zombie, since wait(2) has something
516                                  * new to report.  Guarantee queueing
517                                  * of the SIGCHLD signal, similar to
518                                  * the _exit() behaviour, by providing
519                                  * our ksiginfo.  Ksi is freed by the
520                                  * signal delivery.
521                                  */
522                                 if (q->p_ksi == NULL) {
523                                         ksi1 = NULL;
524                                 } else {
525                                         ksiginfo_copy(q->p_ksi, ksi);
526                                         ksi->ksi_flags |= KSI_INS;
527                                         ksi1 = ksi;
528                                         ksi = NULL;
529                                 }
530                                 PROC_LOCK(q->p_reaper);
531                                 pksignal(q->p_reaper, SIGCHLD, ksi1);
532                                 PROC_UNLOCK(q->p_reaper);
533                         } else if (q->p_pdeathsig > 0) {
534                                 /*
535                                  * The child asked to received a signal
536                                  * when we exit.
537                                  */
538                                 kern_psignal(q, q->p_pdeathsig);
539                         }
540                 } else {
541                         /*
542                          * Traced processes are killed by default
543                          * since their existence means someone is
544                          * screwing up.
545                          */
546                         t = proc_realparent(q);
547                         if (t == p) {
548                                 proc_reparent(q, q->p_reaper, true);
549                         } else {
550                                 PROC_LOCK(t);
551                                 proc_reparent(q, t, true);
552                                 PROC_UNLOCK(t);
553                         }
554                         /*
555                          * Since q was found on our children list, the
556                          * proc_reparent() call moved q to the orphan
557                          * list due to present P_TRACED flag. Clear
558                          * orphan link for q now while q is locked.
559                          */
560                         proc_clear_orphan(q);
561                         q->p_flag &= ~P_TRACED;
562                         q->p_flag2 &= ~P2_PTRACE_FSTP;
563                         q->p_ptevents = 0;
564                         p->p_xthread = NULL;
565                         FOREACH_THREAD_IN_PROC(q, tdt) {
566                                 tdt->td_dbgflags &= ~(TDB_SUSPEND | TDB_XSIG |
567                                     TDB_FSTP);
568                                 tdt->td_xsig = 0;
569                         }
570                         if (kern_kill_on_dbg_exit) {
571                                 q->p_flag &= ~P_STOPPED_TRACE;
572                                 kern_psignal(q, SIGKILL);
573                         } else if ((q->p_flag & (P_STOPPED_TRACE |
574                             P_STOPPED_SIG)) != 0) {
575                                 sigqueue_delete_proc(q, SIGTRAP);
576                                 ptrace_unsuspend(q);
577                         }
578                 }
579                 PROC_UNLOCK(q);
580                 if (ksi != NULL)
581                         ksiginfo_free(ksi);
582         }
583
584         /*
585          * Also get rid of our orphans.
586          */
587         while ((q = LIST_FIRST(&p->p_orphans)) != NULL) {
588                 PROC_LOCK(q);
589                 KASSERT(q->p_oppid == p->p_pid,
590                     ("orphan %p of %p has unexpected oppid %d", q, p,
591                     q->p_oppid));
592                 q->p_oppid = q->p_reaper->p_pid;
593
594                 /*
595                  * If we are the real parent of this process
596                  * but it has been reparented to a debugger, then
597                  * check if it asked for a signal when we exit.
598                  */
599                 if (q->p_pdeathsig > 0)
600                         kern_psignal(q, q->p_pdeathsig);
601                 CTR2(KTR_PTRACE, "exit: pid %d, clearing orphan %d", p->p_pid,
602                     q->p_pid);
603                 proc_clear_orphan(q);
604                 PROC_UNLOCK(q);
605         }
606
607 #ifdef KDTRACE_HOOKS
608         if (SDT_PROBES_ENABLED()) {
609                 int reason = CLD_EXITED;
610                 if (WCOREDUMP(signo))
611                         reason = CLD_DUMPED;
612                 else if (WIFSIGNALED(signo))
613                         reason = CLD_KILLED;
614                 SDT_PROBE1(proc, , , exit, reason);
615         }
616 #endif
617
618         /* Save exit status. */
619         PROC_LOCK(p);
620         p->p_xthread = td;
621
622         if (p->p_sysent->sv_ontdexit != NULL)
623                 p->p_sysent->sv_ontdexit(td);
624
625 #ifdef KDTRACE_HOOKS
626         /*
627          * Tell the DTrace fasttrap provider about the exit if it
628          * has declared an interest.
629          */
630         if (dtrace_fasttrap_exit)
631                 dtrace_fasttrap_exit(p);
632 #endif
633
634         /*
635          * Notify interested parties of our demise.
636          */
637         KNOTE_LOCKED(p->p_klist, NOTE_EXIT);
638
639         /*
640          * If this is a process with a descriptor, we may not need to deliver
641          * a signal to the parent.  proctree_lock is held over
642          * procdesc_exit() to serialize concurrent calls to close() and
643          * exit().
644          */
645         signal_parent = 0;
646         if (p->p_procdesc == NULL || procdesc_exit(p)) {
647                 /*
648                  * Notify parent that we're gone.  If parent has the
649                  * PS_NOCLDWAIT flag set, or if the handler is set to SIG_IGN,
650                  * notify process 1 instead (and hope it will handle this
651                  * situation).
652                  */
653                 PROC_LOCK(p->p_pptr);
654                 mtx_lock(&p->p_pptr->p_sigacts->ps_mtx);
655                 if (p->p_pptr->p_sigacts->ps_flag &
656                     (PS_NOCLDWAIT | PS_CLDSIGIGN)) {
657                         struct proc *pp;
658
659                         mtx_unlock(&p->p_pptr->p_sigacts->ps_mtx);
660                         pp = p->p_pptr;
661                         PROC_UNLOCK(pp);
662                         proc_reparent(p, p->p_reaper, true);
663                         p->p_sigparent = SIGCHLD;
664                         PROC_LOCK(p->p_pptr);
665
666                         /*
667                          * Notify parent, so in case he was wait(2)ing or
668                          * executing waitpid(2) with our pid, he will
669                          * continue.
670                          */
671                         wakeup(pp);
672                 } else
673                         mtx_unlock(&p->p_pptr->p_sigacts->ps_mtx);
674
675                 if (p->p_pptr == p->p_reaper || p->p_pptr == initproc) {
676                         signal_parent = 1;
677                 } else if (p->p_sigparent != 0) {
678                         if (p->p_sigparent == SIGCHLD) {
679                                 signal_parent = 1;
680                         } else { /* LINUX thread */
681                                 signal_parent = 2;
682                         }
683                 }
684         } else
685                 PROC_LOCK(p->p_pptr);
686         sx_xunlock(&proctree_lock);
687
688         if (signal_parent == 1) {
689                 childproc_exited(p);
690         } else if (signal_parent == 2) {
691                 kern_psignal(p->p_pptr, p->p_sigparent);
692         }
693
694         /* Tell the prison that we are gone. */
695         prison_proc_free(p->p_ucred->cr_prison);
696
697         /*
698          * The state PRS_ZOMBIE prevents other proesses from sending
699          * signal to the process, to avoid memory leak, we free memory
700          * for signal queue at the time when the state is set.
701          */
702         sigqueue_flush(&p->p_sigqueue);
703         sigqueue_flush(&td->td_sigqueue);
704
705         /*
706          * We have to wait until after acquiring all locks before
707          * changing p_state.  We need to avoid all possible context
708          * switches (including ones from blocking on a mutex) while
709          * marked as a zombie.  We also have to set the zombie state
710          * before we release the parent process' proc lock to avoid
711          * a lost wakeup.  So, we first call wakeup, then we grab the
712          * sched lock, update the state, and release the parent process'
713          * proc lock.
714          */
715         wakeup(p->p_pptr);
716         cv_broadcast(&p->p_pwait);
717         sched_exit(p->p_pptr, td);
718         PROC_SLOCK(p);
719         p->p_state = PRS_ZOMBIE;
720         PROC_UNLOCK(p->p_pptr);
721
722         /*
723          * Save our children's rusage information in our exit rusage.
724          */
725         PROC_STATLOCK(p);
726         ruadd(&p->p_ru, &p->p_rux, &p->p_stats->p_cru, &p->p_crux);
727         PROC_STATUNLOCK(p);
728
729         /*
730          * Make sure the scheduler takes this thread out of its tables etc.
731          * This will also release this thread's reference to the ucred.
732          * Other thread parts to release include pcb bits and such.
733          */
734         thread_exit();
735 }
736
737 #ifndef _SYS_SYSPROTO_H_
738 struct abort2_args {
739         char *why;
740         int nargs;
741         void **args;
742 };
743 #endif
744
745 int
746 sys_abort2(struct thread *td, struct abort2_args *uap)
747 {
748         struct proc *p = td->td_proc;
749         struct sbuf *sb;
750         void *uargs[16];
751         int error, i, sig;
752
753         /*
754          * Do it right now so we can log either proper call of abort2(), or
755          * note, that invalid argument was passed. 512 is big enough to
756          * handle 16 arguments' descriptions with additional comments.
757          */
758         sb = sbuf_new(NULL, NULL, 512, SBUF_FIXEDLEN);
759         sbuf_clear(sb);
760         sbuf_printf(sb, "%s(pid %d uid %d) aborted: ",
761             p->p_comm, p->p_pid, td->td_ucred->cr_uid);
762         /*
763          * Since we can't return from abort2(), send SIGKILL in cases, where
764          * abort2() was called improperly
765          */
766         sig = SIGKILL;
767         /* Prevent from DoSes from user-space. */
768         if (uap->nargs < 0 || uap->nargs > 16)
769                 goto out;
770         if (uap->nargs > 0) {
771                 if (uap->args == NULL)
772                         goto out;
773                 error = copyin(uap->args, uargs, uap->nargs * sizeof(void *));
774                 if (error != 0)
775                         goto out;
776         }
777         /*
778          * Limit size of 'reason' string to 128. Will fit even when
779          * maximal number of arguments was chosen to be logged.
780          */
781         if (uap->why != NULL) {
782                 error = sbuf_copyin(sb, uap->why, 128);
783                 if (error < 0)
784                         goto out;
785         } else {
786                 sbuf_printf(sb, "(null)");
787         }
788         if (uap->nargs > 0) {
789                 sbuf_printf(sb, "(");
790                 for (i = 0;i < uap->nargs; i++)
791                         sbuf_printf(sb, "%s%p", i == 0 ? "" : ", ", uargs[i]);
792                 sbuf_printf(sb, ")");
793         }
794         /*
795          * Final stage: arguments were proper, string has been
796          * successfully copied from userspace, and copying pointers
797          * from user-space succeed.
798          */
799         sig = SIGABRT;
800 out:
801         if (sig == SIGKILL) {
802                 sbuf_trim(sb);
803                 sbuf_printf(sb, " (Reason text inaccessible)");
804         }
805         sbuf_cat(sb, "\n");
806         sbuf_finish(sb);
807         log(LOG_INFO, "%s", sbuf_data(sb));
808         sbuf_delete(sb);
809         exit1(td, 0, sig);
810         return (0);
811 }
812
813 #ifdef COMPAT_43
814 /*
815  * The dirty work is handled by kern_wait().
816  */
817 int
818 owait(struct thread *td, struct owait_args *uap __unused)
819 {
820         int error, status;
821
822         error = kern_wait(td, WAIT_ANY, &status, 0, NULL);
823         if (error == 0)
824                 td->td_retval[1] = status;
825         return (error);
826 }
827 #endif /* COMPAT_43 */
828
829 /*
830  * The dirty work is handled by kern_wait().
831  */
832 int
833 sys_wait4(struct thread *td, struct wait4_args *uap)
834 {
835         struct rusage ru, *rup;
836         int error, status;
837
838         if (uap->rusage != NULL)
839                 rup = &ru;
840         else
841                 rup = NULL;
842         error = kern_wait(td, uap->pid, &status, uap->options, rup);
843         if (uap->status != NULL && error == 0 && td->td_retval[0] != 0)
844                 error = copyout(&status, uap->status, sizeof(status));
845         if (uap->rusage != NULL && error == 0 && td->td_retval[0] != 0)
846                 error = copyout(&ru, uap->rusage, sizeof(struct rusage));
847         return (error);
848 }
849
850 int
851 sys_wait6(struct thread *td, struct wait6_args *uap)
852 {
853         struct __wrusage wru, *wrup;
854         siginfo_t si, *sip;
855         idtype_t idtype;
856         id_t id;
857         int error, status;
858
859         idtype = uap->idtype;
860         id = uap->id;
861
862         if (uap->wrusage != NULL)
863                 wrup = &wru;
864         else
865                 wrup = NULL;
866
867         if (uap->info != NULL) {
868                 sip = &si;
869                 bzero(sip, sizeof(*sip));
870         } else
871                 sip = NULL;
872
873         /*
874          *  We expect all callers of wait6() to know about WEXITED and
875          *  WTRAPPED.
876          */
877         error = kern_wait6(td, idtype, id, &status, uap->options, wrup, sip);
878
879         if (uap->status != NULL && error == 0 && td->td_retval[0] != 0)
880                 error = copyout(&status, uap->status, sizeof(status));
881         if (uap->wrusage != NULL && error == 0 && td->td_retval[0] != 0)
882                 error = copyout(&wru, uap->wrusage, sizeof(wru));
883         if (uap->info != NULL && error == 0)
884                 error = copyout(&si, uap->info, sizeof(si));
885         return (error);
886 }
887
888 /*
889  * Reap the remains of a zombie process and optionally return status and
890  * rusage.  Asserts and will release both the proctree_lock and the process
891  * lock as part of its work.
892  */
893 void
894 proc_reap(struct thread *td, struct proc *p, int *status, int options)
895 {
896         struct proc *q, *t;
897
898         sx_assert(&proctree_lock, SA_XLOCKED);
899         PROC_LOCK_ASSERT(p, MA_OWNED);
900         KASSERT(p->p_state == PRS_ZOMBIE, ("proc_reap: !PRS_ZOMBIE"));
901
902         mtx_spin_wait_unlocked(&p->p_slock);
903
904         q = td->td_proc;
905
906         if (status)
907                 *status = KW_EXITCODE(p->p_xexit, p->p_xsig);
908         if (options & WNOWAIT) {
909                 /*
910                  *  Only poll, returning the status.  Caller does not wish to
911                  * release the proc struct just yet.
912                  */
913                 PROC_UNLOCK(p);
914                 sx_xunlock(&proctree_lock);
915                 return;
916         }
917
918         PROC_LOCK(q);
919         sigqueue_take(p->p_ksi);
920         PROC_UNLOCK(q);
921
922         /*
923          * If we got the child via a ptrace 'attach', we need to give it back
924          * to the old parent.
925          */
926         if (p->p_oppid != p->p_pptr->p_pid) {
927                 PROC_UNLOCK(p);
928                 t = proc_realparent(p);
929                 PROC_LOCK(t);
930                 PROC_LOCK(p);
931                 CTR2(KTR_PTRACE,
932                     "wait: traced child %d moved back to parent %d", p->p_pid,
933                     t->p_pid);
934                 proc_reparent(p, t, false);
935                 PROC_UNLOCK(p);
936                 pksignal(t, SIGCHLD, p->p_ksi);
937                 wakeup(t);
938                 cv_broadcast(&p->p_pwait);
939                 PROC_UNLOCK(t);
940                 sx_xunlock(&proctree_lock);
941                 return;
942         }
943         PROC_UNLOCK(p);
944
945         /*
946          * Remove other references to this process to ensure we have an
947          * exclusive reference.
948          */
949         sx_xlock(PIDHASHLOCK(p->p_pid));
950         LIST_REMOVE(p, p_hash);
951         sx_xunlock(PIDHASHLOCK(p->p_pid));
952         LIST_REMOVE(p, p_sibling);
953         reaper_abandon_children(p, true);
954         reaper_clear(p);
955         PROC_LOCK(p);
956         proc_clear_orphan(p);
957         PROC_UNLOCK(p);
958         leavepgrp(p);
959         if (p->p_procdesc != NULL)
960                 procdesc_reap(p);
961         sx_xunlock(&proctree_lock);
962
963         proc_id_clear(PROC_ID_PID, p->p_pid);
964
965         PROC_LOCK(p);
966         knlist_detach(p->p_klist);
967         p->p_klist = NULL;
968         PROC_UNLOCK(p);
969
970         /*
971          * Removal from allproc list and process group list paired with
972          * PROC_LOCK which was executed during that time should guarantee
973          * nothing can reach this process anymore. As such further locking
974          * is unnecessary.
975          */
976         p->p_xexit = p->p_xsig = 0;             /* XXX: why? */
977
978         PROC_LOCK(q);
979         ruadd(&q->p_stats->p_cru, &q->p_crux, &p->p_ru, &p->p_rux);
980         PROC_UNLOCK(q);
981
982         /*
983          * Decrement the count of procs running with this uid.
984          */
985         (void)chgproccnt(p->p_ucred->cr_ruidinfo, -1, 0);
986
987         /*
988          * Destroy resource accounting information associated with the process.
989          */
990 #ifdef RACCT
991         if (racct_enable) {
992                 PROC_LOCK(p);
993                 racct_sub(p, RACCT_NPROC, 1);
994                 PROC_UNLOCK(p);
995         }
996 #endif
997         racct_proc_exit(p);
998
999         /*
1000          * Free credentials, arguments, and sigacts.
1001          */
1002         proc_unset_cred(p);
1003         pargs_drop(p->p_args);
1004         p->p_args = NULL;
1005         sigacts_free(p->p_sigacts);
1006         p->p_sigacts = NULL;
1007
1008         /*
1009          * Do any thread-system specific cleanups.
1010          */
1011         thread_wait(p);
1012
1013         /*
1014          * Give vm and machine-dependent layer a chance to free anything that
1015          * cpu_exit couldn't release while still running in process context.
1016          */
1017         vm_waitproc(p);
1018 #ifdef MAC
1019         mac_proc_destroy(p);
1020 #endif
1021
1022         KASSERT(FIRST_THREAD_IN_PROC(p),
1023             ("proc_reap: no residual thread!"));
1024         uma_zfree(proc_zone, p);
1025         atomic_add_int(&nprocs, -1);
1026 }
1027
1028 static int
1029 proc_to_reap(struct thread *td, struct proc *p, idtype_t idtype, id_t id,
1030     int *status, int options, struct __wrusage *wrusage, siginfo_t *siginfo,
1031     int check_only)
1032 {
1033         struct rusage *rup;
1034
1035         sx_assert(&proctree_lock, SA_XLOCKED);
1036
1037         PROC_LOCK(p);
1038
1039         switch (idtype) {
1040         case P_ALL:
1041                 if (p->p_procdesc == NULL ||
1042                    (p->p_pptr == td->td_proc &&
1043                    (p->p_flag & P_TRACED) != 0)) {
1044                         break;
1045                 }
1046
1047                 PROC_UNLOCK(p);
1048                 return (0);
1049         case P_PID:
1050                 if (p->p_pid != (pid_t)id) {
1051                         PROC_UNLOCK(p);
1052                         return (0);
1053                 }
1054                 break;
1055         case P_PGID:
1056                 if (p->p_pgid != (pid_t)id) {
1057                         PROC_UNLOCK(p);
1058                         return (0);
1059                 }
1060                 break;
1061         case P_SID:
1062                 if (p->p_session->s_sid != (pid_t)id) {
1063                         PROC_UNLOCK(p);
1064                         return (0);
1065                 }
1066                 break;
1067         case P_UID:
1068                 if (p->p_ucred->cr_uid != (uid_t)id) {
1069                         PROC_UNLOCK(p);
1070                         return (0);
1071                 }
1072                 break;
1073         case P_GID:
1074                 if (p->p_ucred->cr_gid != (gid_t)id) {
1075                         PROC_UNLOCK(p);
1076                         return (0);
1077                 }
1078                 break;
1079         case P_JAILID:
1080                 if (p->p_ucred->cr_prison->pr_id != (int)id) {
1081                         PROC_UNLOCK(p);
1082                         return (0);
1083                 }
1084                 break;
1085         /*
1086          * It seems that the thread structures get zeroed out
1087          * at process exit.  This makes it impossible to
1088          * support P_SETID, P_CID or P_CPUID.
1089          */
1090         default:
1091                 PROC_UNLOCK(p);
1092                 return (0);
1093         }
1094
1095         if (p_canwait(td, p)) {
1096                 PROC_UNLOCK(p);
1097                 return (0);
1098         }
1099
1100         if (((options & WEXITED) == 0) && (p->p_state == PRS_ZOMBIE)) {
1101                 PROC_UNLOCK(p);
1102                 return (0);
1103         }
1104
1105         /*
1106          * This special case handles a kthread spawned by linux_clone
1107          * (see linux_misc.c).  The linux_wait4 and linux_waitpid
1108          * functions need to be able to distinguish between waiting
1109          * on a process and waiting on a thread.  It is a thread if
1110          * p_sigparent is not SIGCHLD, and the WLINUXCLONE option
1111          * signifies we want to wait for threads and not processes.
1112          */
1113         if ((p->p_sigparent != SIGCHLD) ^
1114             ((options & WLINUXCLONE) != 0)) {
1115                 PROC_UNLOCK(p);
1116                 return (0);
1117         }
1118
1119         if (siginfo != NULL) {
1120                 bzero(siginfo, sizeof(*siginfo));
1121                 siginfo->si_errno = 0;
1122
1123                 /*
1124                  * SUSv4 requires that the si_signo value is always
1125                  * SIGCHLD. Obey it despite the rfork(2) interface
1126                  * allows to request other signal for child exit
1127                  * notification.
1128                  */
1129                 siginfo->si_signo = SIGCHLD;
1130
1131                 /*
1132                  *  This is still a rough estimate.  We will fix the
1133                  *  cases TRAPPED, STOPPED, and CONTINUED later.
1134                  */
1135                 if (WCOREDUMP(p->p_xsig)) {
1136                         siginfo->si_code = CLD_DUMPED;
1137                         siginfo->si_status = WTERMSIG(p->p_xsig);
1138                 } else if (WIFSIGNALED(p->p_xsig)) {
1139                         siginfo->si_code = CLD_KILLED;
1140                         siginfo->si_status = WTERMSIG(p->p_xsig);
1141                 } else {
1142                         siginfo->si_code = CLD_EXITED;
1143                         siginfo->si_status = p->p_xexit;
1144                 }
1145
1146                 siginfo->si_pid = p->p_pid;
1147                 siginfo->si_uid = p->p_ucred->cr_uid;
1148
1149                 /*
1150                  * The si_addr field would be useful additional
1151                  * detail, but apparently the PC value may be lost
1152                  * when we reach this point.  bzero() above sets
1153                  * siginfo->si_addr to NULL.
1154                  */
1155         }
1156
1157         /*
1158          * There should be no reason to limit resources usage info to
1159          * exited processes only.  A snapshot about any resources used
1160          * by a stopped process may be exactly what is needed.
1161          */
1162         if (wrusage != NULL) {
1163                 rup = &wrusage->wru_self;
1164                 *rup = p->p_ru;
1165                 PROC_STATLOCK(p);
1166                 calcru(p, &rup->ru_utime, &rup->ru_stime);
1167                 PROC_STATUNLOCK(p);
1168
1169                 rup = &wrusage->wru_children;
1170                 *rup = p->p_stats->p_cru;
1171                 calccru(p, &rup->ru_utime, &rup->ru_stime);
1172         }
1173
1174         if (p->p_state == PRS_ZOMBIE && !check_only) {
1175                 proc_reap(td, p, status, options);
1176                 return (-1);
1177         }
1178         return (1);
1179 }
1180
1181 int
1182 kern_wait(struct thread *td, pid_t pid, int *status, int options,
1183     struct rusage *rusage)
1184 {
1185         struct __wrusage wru, *wrup;
1186         idtype_t idtype;
1187         id_t id;
1188         int ret;
1189
1190         /*
1191          * Translate the special pid values into the (idtype, pid)
1192          * pair for kern_wait6.  The WAIT_MYPGRP case is handled by
1193          * kern_wait6() on its own.
1194          */
1195         if (pid == WAIT_ANY) {
1196                 idtype = P_ALL;
1197                 id = 0;
1198         } else if (pid < 0) {
1199                 idtype = P_PGID;
1200                 id = (id_t)-pid;
1201         } else {
1202                 idtype = P_PID;
1203                 id = (id_t)pid;
1204         }
1205
1206         if (rusage != NULL)
1207                 wrup = &wru;
1208         else
1209                 wrup = NULL;
1210
1211         /*
1212          * For backward compatibility we implicitly add flags WEXITED
1213          * and WTRAPPED here.
1214          */
1215         options |= WEXITED | WTRAPPED;
1216         ret = kern_wait6(td, idtype, id, status, options, wrup, NULL);
1217         if (rusage != NULL)
1218                 *rusage = wru.wru_self;
1219         return (ret);
1220 }
1221
1222 static void
1223 report_alive_proc(struct thread *td, struct proc *p, siginfo_t *siginfo,
1224     int *status, int options, int si_code)
1225 {
1226         bool cont;
1227
1228         PROC_LOCK_ASSERT(p, MA_OWNED);
1229         sx_assert(&proctree_lock, SA_XLOCKED);
1230         MPASS(si_code == CLD_TRAPPED || si_code == CLD_STOPPED ||
1231             si_code == CLD_CONTINUED);
1232
1233         cont = si_code == CLD_CONTINUED;
1234         if ((options & WNOWAIT) == 0) {
1235                 if (cont)
1236                         p->p_flag &= ~P_CONTINUED;
1237                 else
1238                         p->p_flag |= P_WAITED;
1239                 if (kern_wait_dequeue_sigchld &&
1240                     (td->td_proc->p_sysent->sv_flags & SV_SIG_WAITNDQ) == 0) {
1241                         PROC_LOCK(td->td_proc);
1242                         sigqueue_take(p->p_ksi);
1243                         PROC_UNLOCK(td->td_proc);
1244                 }
1245         }
1246         sx_xunlock(&proctree_lock);
1247         if (siginfo != NULL) {
1248                 siginfo->si_code = si_code;
1249                 siginfo->si_status = cont ? SIGCONT : p->p_xsig;
1250         }
1251         if (status != NULL)
1252                 *status = cont ? SIGCONT : W_STOPCODE(p->p_xsig);
1253         PROC_UNLOCK(p);
1254         td->td_retval[0] = p->p_pid;
1255 }
1256
1257 int
1258 kern_wait6(struct thread *td, idtype_t idtype, id_t id, int *status,
1259     int options, struct __wrusage *wrusage, siginfo_t *siginfo)
1260 {
1261         struct proc *p, *q;
1262         pid_t pid;
1263         int error, nfound, ret;
1264         bool report;
1265
1266         AUDIT_ARG_VALUE((int)idtype);   /* XXX - This is likely wrong! */
1267         AUDIT_ARG_PID((pid_t)id);       /* XXX - This may be wrong! */
1268         AUDIT_ARG_VALUE(options);
1269
1270         q = td->td_proc;
1271
1272         if ((pid_t)id == WAIT_MYPGRP && (idtype == P_PID || idtype == P_PGID)) {
1273                 PROC_LOCK(q);
1274                 id = (id_t)q->p_pgid;
1275                 PROC_UNLOCK(q);
1276                 idtype = P_PGID;
1277         }
1278
1279         /* If we don't know the option, just return. */
1280         if ((options & ~(WUNTRACED | WNOHANG | WCONTINUED | WNOWAIT |
1281             WEXITED | WTRAPPED | WLINUXCLONE)) != 0)
1282                 return (EINVAL);
1283         if ((options & (WEXITED | WUNTRACED | WCONTINUED | WTRAPPED)) == 0) {
1284                 /*
1285                  * We will be unable to find any matching processes,
1286                  * because there are no known events to look for.
1287                  * Prefer to return error instead of blocking
1288                  * indefinitely.
1289                  */
1290                 return (EINVAL);
1291         }
1292
1293 loop:
1294         if (q->p_flag & P_STATCHILD) {
1295                 PROC_LOCK(q);
1296                 q->p_flag &= ~P_STATCHILD;
1297                 PROC_UNLOCK(q);
1298         }
1299         sx_xlock(&proctree_lock);
1300 loop_locked:
1301         nfound = 0;
1302         LIST_FOREACH(p, &q->p_children, p_sibling) {
1303                 pid = p->p_pid;
1304                 ret = proc_to_reap(td, p, idtype, id, status, options,
1305                     wrusage, siginfo, 0);
1306                 if (ret == 0)
1307                         continue;
1308                 else if (ret != 1) {
1309                         td->td_retval[0] = pid;
1310                         return (0);
1311                 }
1312
1313                 nfound++;
1314                 PROC_LOCK_ASSERT(p, MA_OWNED);
1315
1316                 if ((options & WTRAPPED) != 0 &&
1317                     (p->p_flag & P_TRACED) != 0) {
1318                         PROC_SLOCK(p);
1319                         report =
1320                             ((p->p_flag & (P_STOPPED_TRACE | P_STOPPED_SIG)) &&
1321                             p->p_suspcount == p->p_numthreads &&
1322                             (p->p_flag & P_WAITED) == 0);
1323                         PROC_SUNLOCK(p);
1324                         if (report) {
1325                         CTR4(KTR_PTRACE,
1326                             "wait: returning trapped pid %d status %#x "
1327                             "(xstat %d) xthread %d",
1328                             p->p_pid, W_STOPCODE(p->p_xsig), p->p_xsig,
1329                             p->p_xthread != NULL ?
1330                             p->p_xthread->td_tid : -1);
1331                                 report_alive_proc(td, p, siginfo, status,
1332                                     options, CLD_TRAPPED);
1333                                 return (0);
1334                         }
1335                 }
1336                 if ((options & WUNTRACED) != 0 &&
1337                     (p->p_flag & P_STOPPED_SIG) != 0) {
1338                         PROC_SLOCK(p);
1339                         report = (p->p_suspcount == p->p_numthreads &&
1340                             ((p->p_flag & P_WAITED) == 0));
1341                         PROC_SUNLOCK(p);
1342                         if (report) {
1343                                 report_alive_proc(td, p, siginfo, status,
1344                                     options, CLD_STOPPED);
1345                                 return (0);
1346                         }
1347                 }
1348                 if ((options & WCONTINUED) != 0 &&
1349                     (p->p_flag & P_CONTINUED) != 0) {
1350                         report_alive_proc(td, p, siginfo, status, options,
1351                             CLD_CONTINUED);
1352                         return (0);
1353                 }
1354                 PROC_UNLOCK(p);
1355         }
1356
1357         /*
1358          * Look in the orphans list too, to allow the parent to
1359          * collect it's child exit status even if child is being
1360          * debugged.
1361          *
1362          * Debugger detaches from the parent upon successful
1363          * switch-over from parent to child.  At this point due to
1364          * re-parenting the parent loses the child to debugger and a
1365          * wait4(2) call would report that it has no children to wait
1366          * for.  By maintaining a list of orphans we allow the parent
1367          * to successfully wait until the child becomes a zombie.
1368          */
1369         if (nfound == 0) {
1370                 LIST_FOREACH(p, &q->p_orphans, p_orphan) {
1371                         ret = proc_to_reap(td, p, idtype, id, NULL, options,
1372                             NULL, NULL, 1);
1373                         if (ret != 0) {
1374                                 KASSERT(ret != -1, ("reaped an orphan (pid %d)",
1375                                     (int)td->td_retval[0]));
1376                                 PROC_UNLOCK(p);
1377                                 nfound++;
1378                                 break;
1379                         }
1380                 }
1381         }
1382         if (nfound == 0) {
1383                 sx_xunlock(&proctree_lock);
1384                 return (ECHILD);
1385         }
1386         if (options & WNOHANG) {
1387                 sx_xunlock(&proctree_lock);
1388                 td->td_retval[0] = 0;
1389                 return (0);
1390         }
1391         PROC_LOCK(q);
1392         if (q->p_flag & P_STATCHILD) {
1393                 q->p_flag &= ~P_STATCHILD;
1394                 PROC_UNLOCK(q);
1395                 goto loop_locked;
1396         }
1397         sx_xunlock(&proctree_lock);
1398         error = msleep(q, &q->p_mtx, PWAIT | PCATCH | PDROP, "wait", 0);
1399         if (error)
1400                 return (error);
1401         goto loop;
1402 }
1403
1404 void
1405 proc_add_orphan(struct proc *child, struct proc *parent)
1406 {
1407
1408         sx_assert(&proctree_lock, SX_XLOCKED);
1409         KASSERT((child->p_flag & P_TRACED) != 0,
1410             ("proc_add_orphan: not traced"));
1411
1412         if (LIST_EMPTY(&parent->p_orphans)) {
1413                 child->p_treeflag |= P_TREE_FIRST_ORPHAN;
1414                 LIST_INSERT_HEAD(&parent->p_orphans, child, p_orphan);
1415         } else {
1416                 LIST_INSERT_AFTER(LIST_FIRST(&parent->p_orphans),
1417                     child, p_orphan);
1418         }
1419         child->p_treeflag |= P_TREE_ORPHANED;
1420 }
1421
1422 /*
1423  * Make process 'parent' the new parent of process 'child'.
1424  * Must be called with an exclusive hold of proctree lock.
1425  */
1426 void
1427 proc_reparent(struct proc *child, struct proc *parent, bool set_oppid)
1428 {
1429
1430         sx_assert(&proctree_lock, SX_XLOCKED);
1431         PROC_LOCK_ASSERT(child, MA_OWNED);
1432         if (child->p_pptr == parent)
1433                 return;
1434
1435         PROC_LOCK(child->p_pptr);
1436         sigqueue_take(child->p_ksi);
1437         PROC_UNLOCK(child->p_pptr);
1438         LIST_REMOVE(child, p_sibling);
1439         LIST_INSERT_HEAD(&parent->p_children, child, p_sibling);
1440
1441         proc_clear_orphan(child);
1442         if ((child->p_flag & P_TRACED) != 0) {
1443                 proc_add_orphan(child, child->p_pptr);
1444         }
1445
1446         child->p_pptr = parent;
1447         if (set_oppid)
1448                 child->p_oppid = parent->p_pid;
1449 }