kernel - Make the wdog.h and gpio.h includes conditional in kern_shutdown.c.
[dragonfly.git] / sys / kern / kern_proc.c
1 /*
2  * Copyright (c) 1982, 1986, 1989, 1991, 1993
3  *      The Regents of the University of California.  All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  * 3. Neither the name of the University nor the names of its contributors
14  *    may be used to endorse or promote products derived from this software
15  *    without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27  * SUCH DAMAGE.
28  */
29
30 #include <sys/param.h>
31 #include <sys/systm.h>
32 #include <sys/kernel.h>
33 #include <sys/sysctl.h>
34 #include <sys/malloc.h>
35 #include <sys/proc.h>
36 #include <sys/vnode.h>
37 #include <sys/jail.h>
38 #include <sys/filedesc.h>
39 #include <sys/tty.h>
40 #include <sys/dsched.h>
41 #include <sys/signalvar.h>
42 #include <sys/spinlock.h>
43 #include <sys/random.h>
44 #include <sys/vnode.h>
45 #include <sys/exec.h>
46 #include <vm/vm.h>
47 #include <sys/lock.h>
48 #include <vm/pmap.h>
49 #include <vm/vm_map.h>
50 #include <sys/user.h>
51 #include <machine/smp.h>
52
53 #include <sys/refcount.h>
54 #include <sys/spinlock2.h>
55
56 /*
57  * Hash table size must be a power of two and is not currently dynamically
58  * sized.  There is a trade-off between the linear scans which must iterate
59  * all HSIZE elements and the number of elements which might accumulate
60  * within each hash chain.
61  */
62 #define ALLPROC_HSIZE   256
63 #define ALLPROC_HMASK   (ALLPROC_HSIZE - 1)
64 #define ALLPROC_HASH(pid)       (pid & ALLPROC_HMASK)
65 #define PGRP_HASH(pid)  (pid & ALLPROC_HMASK)
66 #define SESS_HASH(pid)  (pid & ALLPROC_HMASK)
67
68 /*
69  * pid_doms[] management, used to control how quickly a PID can be recycled.
70  * Must be a multiple of ALLPROC_HSIZE for the proc_makepid() inner loops.
71  *
72  * WARNING! PIDDOM_DELAY should not be defined > 20 or so unless you change
73  *          the array from int8_t's to int16_t's.
74  */
75 #define PIDDOM_COUNT    10      /* 10 pids per domain - reduce array size */
76 #define PIDDOM_DELAY    10      /* min 10 seconds after exit before reuse */
77 #define PIDDOM_SCALE    10      /* (10,000*SCALE)/sec performance guarantee */
78 #define PIDSEL_DOMAINS  (PID_MAX * PIDDOM_SCALE / PIDDOM_COUNT /        \
79                          ALLPROC_HSIZE * ALLPROC_HSIZE)
80
81 /* Used by libkvm */
82 int allproc_hsize = ALLPROC_HSIZE;
83
84 LIST_HEAD(pidhashhead, proc);
85
86 static MALLOC_DEFINE(M_PGRP, "pgrp", "process group header");
87 MALLOC_DEFINE(M_SESSION, "session", "session header");
88 MALLOC_DEFINE(M_PROC, "proc", "Proc structures");
89 MALLOC_DEFINE(M_LWP, "lwp", "lwp structures");
90 MALLOC_DEFINE(M_SUBPROC, "subproc", "Proc sub-structures");
91
92 int ps_showallprocs = 1;
93 static int ps_showallthreads = 1;
94 SYSCTL_INT(_security, OID_AUTO, ps_showallprocs, CTLFLAG_RW,
95     &ps_showallprocs, 0,
96     "Unprivileged processes can see processes with different UID/GID");
97 SYSCTL_INT(_security, OID_AUTO, ps_showallthreads, CTLFLAG_RW,
98     &ps_showallthreads, 0,
99     "Unprivileged processes can see kernel threads");
100 static u_int pid_domain_skips;
101 SYSCTL_UINT(_kern, OID_AUTO, pid_domain_skips, CTLFLAG_RW,
102     &pid_domain_skips, 0,
103     "Number of pid_doms[] skipped");
104 static u_int pid_inner_skips;
105 SYSCTL_UINT(_kern, OID_AUTO, pid_inner_skips, CTLFLAG_RW,
106     &pid_inner_skips, 0,
107     "Number of pid_doms[] skipped");
108
109 static void orphanpg(struct pgrp *pg);
110 static void proc_makepid(struct proc *p, int random_offset);
111
112 /*
113  * Process related lists (for proc_token, allproc, allpgrp, and allsess)
114  */
115 typedef struct procglob procglob_t;
116
117 static procglob_t       procglob[ALLPROC_HSIZE];
118
119 /*
120  * We try our best to avoid recycling a PID too quickly.  We do this by
121  * storing (uint8_t)time_second in the related pid domain on-reap and then
122  * using that to skip-over the domain on-allocate.
123  *
124  * This array has to be fairly large to support a high fork/exec rate.
125  * A ~100,000 entry array will support a 10-second reuse latency at
126  * 10,000 execs/second, worst case.  Best-case multiply by PIDDOM_COUNT
127  * (approximately 100,000 execs/second).
128  *
129  * Currently we allocate around a megabyte, making the worst-case fork
130  * rate around 100,000/second.
131  */
132 static uint8_t *pid_doms;
133
134 /*
135  * Random component to nextpid generation.  We mix in a random factor to make
136  * it a little harder to predict.  We sanity check the modulus value to avoid
137  * doing it in critical paths.  Don't let it be too small or we pointlessly
138  * waste randomness entropy, and don't let it be impossibly large.  Using a
139  * modulus that is too big causes a LOT more process table scans and slows
140  * down fork processing as the pidchecked caching is defeated.
141  */
142 static int randompid = 0;
143
144 static __inline
145 struct ucred *
146 pcredcache(struct ucred *cr, struct proc *p)
147 {
148         if (cr != p->p_ucred) {
149                 if (cr)
150                         crfree(cr);
151                 spin_lock(&p->p_spin);
152                 if ((cr = p->p_ucred) != NULL)
153                         crhold(cr);
154                 spin_unlock(&p->p_spin);
155         }
156         return cr;
157 }
158
159 /*
160  * No requirements.
161  */
162 static int
163 sysctl_kern_randompid(SYSCTL_HANDLER_ARGS)
164 {
165         int error, pid;
166
167         pid = randompid;
168         error = sysctl_handle_int(oidp, &pid, 0, req);
169         if (error || !req->newptr)
170                 return (error);
171         if (pid < 0 || pid > PID_MAX - 100)     /* out of range */
172                 pid = PID_MAX - 100;
173         else if (pid < 2)                       /* NOP */
174                 pid = 0;
175         else if (pid < 100)                     /* Make it reasonable */
176                 pid = 100;
177         randompid = pid;
178         return (error);
179 }
180
181 SYSCTL_PROC(_kern, OID_AUTO, randompid, CTLTYPE_INT|CTLFLAG_RW,
182             0, 0, sysctl_kern_randompid, "I", "Random PID modulus");
183
184 /*
185  * Initialize global process hashing structures.
186  *
187  * These functions are ONLY called from the low level boot code and do
188  * not lock their operations.
189  */
190 void
191 procinit(void)
192 {
193         u_long i;
194
195         /*
196          * Allocate dynamically.  This array can be large (~1MB) so don't
197          * waste boot loader space.
198          */
199         pid_doms = kmalloc(sizeof(pid_doms[0]) * PIDSEL_DOMAINS,
200                            M_PROC, M_WAITOK | M_ZERO);
201
202         /*
203          * Avoid unnecessary stalls due to pid_doms[] values all being
204          * the same.  Make sure that the allocation of pid 1 and pid 2
205          * succeeds.
206          */
207         for (i = 0; i < PIDSEL_DOMAINS; ++i)
208                 pid_doms[i] = (int8_t)i - (int8_t)(PIDDOM_DELAY + 1);
209
210         /*
211          * Other misc init.
212          */
213         for (i = 0; i < ALLPROC_HSIZE; ++i) {
214                 procglob_t *prg = &procglob[i];
215                 LIST_INIT(&prg->allproc);
216                 LIST_INIT(&prg->allsess);
217                 LIST_INIT(&prg->allpgrp);
218                 lwkt_token_init(&prg->proc_token, "allproc");
219         }
220         uihashinit();
221 }
222
223 void
224 procinsertinit(struct proc *p)
225 {
226         LIST_INSERT_HEAD(&procglob[ALLPROC_HASH(p->p_pid)].allproc,
227                          p, p_list);
228 }
229
230 void
231 pgrpinsertinit(struct pgrp *pg)
232 {
233         LIST_INSERT_HEAD(&procglob[ALLPROC_HASH(pg->pg_id)].allpgrp,
234                          pg, pg_list);
235 }
236
237 void
238 sessinsertinit(struct session *sess)
239 {
240         LIST_INSERT_HEAD(&procglob[ALLPROC_HASH(sess->s_sid)].allsess,
241                          sess, s_list);
242 }
243
244 /*
245  * Process hold/release support functions.  Called via the PHOLD(),
246  * PRELE(), and PSTALL() macros.
247  *
248  * p->p_lock is a simple hold count with a waiting interlock.  No wakeup()
249  * is issued unless someone is actually waiting for the process.
250  *
251  * Most holds are short-term, allowing a process scan or other similar
252  * operation to access a proc structure without it getting ripped out from
253  * under us.  procfs and process-list sysctl ops also use the hold function
254  * interlocked with various p_flags to keep the vmspace intact when reading
255  * or writing a user process's address space.
256  *
257  * There are two situations where a hold count can be longer.  Exiting lwps
258  * hold the process until the lwp is reaped, and the parent will hold the
259  * child during vfork()/exec() sequences while the child is marked P_PPWAIT.
260  *
261  * The kernel waits for the hold count to drop to 0 (or 1 in some cases) at
262  * various critical points in the fork/exec and exit paths before proceeding.
263  */
264 #define PLOCK_ZOMB      0x20000000
265 #define PLOCK_WAITING   0x40000000
266 #define PLOCK_MASK      0x1FFFFFFF
267
268 void
269 pstall(struct proc *p, const char *wmesg, int count)
270 {
271         int o;
272         int n;
273
274         for (;;) {
275                 o = p->p_lock;
276                 cpu_ccfence();
277                 if ((o & PLOCK_MASK) <= count)
278                         break;
279                 n = o | PLOCK_WAITING;
280                 tsleep_interlock(&p->p_lock, 0);
281
282                 /*
283                  * If someone is trying to single-step the process during
284                  * an exec or an exit they can deadlock us because procfs
285                  * sleeps with the process held.
286                  */
287                 if (p->p_stops) {
288                         if (p->p_flags & P_INEXEC) {
289                                 wakeup(&p->p_stype);
290                         } else if (p->p_flags & P_POSTEXIT) {
291                                 spin_lock(&p->p_spin);
292                                 p->p_stops = 0;
293                                 p->p_step = 0;
294                                 spin_unlock(&p->p_spin);
295                                 wakeup(&p->p_stype);
296                         }
297                 }
298
299                 if (atomic_cmpset_int(&p->p_lock, o, n)) {
300                         tsleep(&p->p_lock, PINTERLOCKED, wmesg, 0);
301                 }
302         }
303 }
304
305 void
306 phold(struct proc *p)
307 {
308         atomic_add_int(&p->p_lock, 1);
309 }
310
311 /*
312  * WARNING!  On last release (p) can become instantly invalid due to
313  *           MP races.
314  */
315 void
316 prele(struct proc *p)
317 {
318         int o;
319         int n;
320
321         /*
322          * Fast path
323          */
324         if (atomic_cmpset_int(&p->p_lock, 1, 0))
325                 return;
326
327         /*
328          * Slow path
329          */
330         for (;;) {
331                 o = p->p_lock;
332                 KKASSERT((o & PLOCK_MASK) > 0);
333                 cpu_ccfence();
334                 n = (o - 1) & ~PLOCK_WAITING;
335                 if (atomic_cmpset_int(&p->p_lock, o, n)) {
336                         if (o & PLOCK_WAITING)
337                                 wakeup(&p->p_lock);
338                         break;
339                 }
340         }
341 }
342
343 /*
344  * Hold and flag serialized for zombie reaping purposes.
345  *
346  * This function will fail if it has to block, returning non-zero with
347  * neither the flag set or the hold count bumped.  Note that (p) may
348  * not be valid in this case if the caller does not have some other
349  * reference on (p).
350  *
351  * This function does not block on other PHOLD()s, only on other
352  * PHOLDZOMB()s.
353  *
354  * Zero is returned on success.  The hold count will be incremented and
355  * the serialization flag acquired.  Note that serialization is only against
356  * other pholdzomb() calls, not against phold() calls.
357  */
358 int
359 pholdzomb(struct proc *p)
360 {
361         int o;
362         int n;
363
364         /*
365          * Fast path
366          */
367         if (atomic_cmpset_int(&p->p_lock, 0, PLOCK_ZOMB | 1))
368                 return(0);
369
370         /*
371          * Slow path
372          */
373         for (;;) {
374                 o = p->p_lock;
375                 cpu_ccfence();
376                 if ((o & PLOCK_ZOMB) == 0) {
377                         n = (o + 1) | PLOCK_ZOMB;
378                         if (atomic_cmpset_int(&p->p_lock, o, n))
379                                 return(0);
380                 } else {
381                         KKASSERT((o & PLOCK_MASK) > 0);
382                         n = o | PLOCK_WAITING;
383                         tsleep_interlock(&p->p_lock, 0);
384                         if (atomic_cmpset_int(&p->p_lock, o, n)) {
385                                 tsleep(&p->p_lock, PINTERLOCKED, "phldz", 0);
386                                 /* (p) can be ripped out at this point */
387                                 return(1);
388                         }
389                 }
390         }
391 }
392
393 /*
394  * Release PLOCK_ZOMB and the hold count, waking up any waiters.
395  *
396  * WARNING!  On last release (p) can become instantly invalid due to
397  *           MP races.
398  */
399 void
400 prelezomb(struct proc *p)
401 {
402         int o;
403         int n;
404
405         /*
406          * Fast path
407          */
408         if (atomic_cmpset_int(&p->p_lock, PLOCK_ZOMB | 1, 0))
409                 return;
410
411         /*
412          * Slow path
413          */
414         KKASSERT(p->p_lock & PLOCK_ZOMB);
415         for (;;) {
416                 o = p->p_lock;
417                 KKASSERT((o & PLOCK_MASK) > 0);
418                 cpu_ccfence();
419                 n = (o - 1) & ~(PLOCK_ZOMB | PLOCK_WAITING);
420                 if (atomic_cmpset_int(&p->p_lock, o, n)) {
421                         if (o & PLOCK_WAITING)
422                                 wakeup(&p->p_lock);
423                         break;
424                 }
425         }
426 }
427
428 /*
429  * Is p an inferior of the current process?
430  *
431  * No requirements.
432  */
433 int
434 inferior(struct proc *p)
435 {
436         struct proc *p2;
437
438         PHOLD(p);
439         lwkt_gettoken_shared(&p->p_token);
440         while (p != curproc) {
441                 if (p->p_pid == 0) {
442                         lwkt_reltoken(&p->p_token);
443                         return (0);
444                 }
445                 p2 = p->p_pptr;
446                 PHOLD(p2);
447                 lwkt_reltoken(&p->p_token);
448                 PRELE(p);
449                 lwkt_gettoken_shared(&p2->p_token);
450                 p = p2;
451         }
452         lwkt_reltoken(&p->p_token);
453         PRELE(p);
454
455         return (1);
456 }
457
458 /*
459  * Locate a process by number.  The returned process will be referenced and
460  * must be released with PRELE().
461  *
462  * No requirements.
463  */
464 struct proc *
465 pfind(pid_t pid)
466 {
467         struct proc *p = curproc;
468         procglob_t *prg;
469         int n;
470
471         /*
472          * Shortcut the current process
473          */
474         if (p && p->p_pid == pid) {
475                 PHOLD(p);
476                 return (p);
477         }
478
479         /*
480          * Otherwise find it in the hash table.
481          */
482         n = ALLPROC_HASH(pid);
483         prg = &procglob[n];
484
485         lwkt_gettoken_shared(&prg->proc_token);
486         LIST_FOREACH(p, &prg->allproc, p_list) {
487                 if (p->p_stat == SZOMB)
488                         continue;
489                 if (p->p_pid == pid) {
490                         PHOLD(p);
491                         lwkt_reltoken(&prg->proc_token);
492                         return (p);
493                 }
494         }
495         lwkt_reltoken(&prg->proc_token);
496
497         return (NULL);
498 }
499
500 /*
501  * Locate a process by number.  The returned process is NOT referenced.
502  * The result will not be stable and is typically only used to validate
503  * against a process that the caller has in-hand.
504  *
505  * No requirements.
506  */
507 struct proc *
508 pfindn(pid_t pid)
509 {
510         struct proc *p = curproc;
511         procglob_t *prg;
512         int n;
513
514         /*
515          * Shortcut the current process
516          */
517         if (p && p->p_pid == pid)
518                 return (p);
519
520         /*
521          * Otherwise find it in the hash table.
522          */
523         n = ALLPROC_HASH(pid);
524         prg = &procglob[n];
525
526         lwkt_gettoken_shared(&prg->proc_token);
527         LIST_FOREACH(p, &prg->allproc, p_list) {
528                 if (p->p_stat == SZOMB)
529                         continue;
530                 if (p->p_pid == pid) {
531                         lwkt_reltoken(&prg->proc_token);
532                         return (p);
533                 }
534         }
535         lwkt_reltoken(&prg->proc_token);
536
537         return (NULL);
538 }
539
540 /*
541  * Locate a process on the zombie list.  Return a process or NULL.
542  * The returned process will be referenced and the caller must release
543  * it with PRELE().
544  *
545  * No other requirements.
546  */
547 struct proc *
548 zpfind(pid_t pid)
549 {
550         struct proc *p = curproc;
551         procglob_t *prg;
552         int n;
553
554         /*
555          * Shortcut the current process
556          */
557         if (p && p->p_pid == pid) {
558                 PHOLD(p);
559                 return (p);
560         }
561
562         /*
563          * Otherwise find it in the hash table.
564          */
565         n = ALLPROC_HASH(pid);
566         prg = &procglob[n];
567
568         lwkt_gettoken_shared(&prg->proc_token);
569         LIST_FOREACH(p, &prg->allproc, p_list) {
570                 if (p->p_stat != SZOMB)
571                         continue;
572                 if (p->p_pid == pid) {
573                         PHOLD(p);
574                         lwkt_reltoken(&prg->proc_token);
575                         return (p);
576                 }
577         }
578         lwkt_reltoken(&prg->proc_token);
579
580         return (NULL);
581 }
582
583
584 void
585 pgref(struct pgrp *pgrp)
586 {
587         refcount_acquire(&pgrp->pg_refs);
588 }
589
590 void
591 pgrel(struct pgrp *pgrp)
592 {
593         procglob_t *prg;
594         int count;
595         int n;
596
597         n = PGRP_HASH(pgrp->pg_id);
598         prg = &procglob[n];
599
600         for (;;) {
601                 count = pgrp->pg_refs;
602                 cpu_ccfence();
603                 KKASSERT(count > 0);
604                 if (count == 1) {
605                         lwkt_gettoken(&prg->proc_token);
606                         if (atomic_cmpset_int(&pgrp->pg_refs, 1, 0))
607                                 break;
608                         lwkt_reltoken(&prg->proc_token);
609                         /* retry */
610                 } else {
611                         if (atomic_cmpset_int(&pgrp->pg_refs, count, count - 1))
612                                 return;
613                         /* retry */
614                 }
615         }
616
617         /*
618          * Successful 1->0 transition, pghash_spin is held.
619          */
620         LIST_REMOVE(pgrp, pg_list);
621         if (pid_doms[pgrp->pg_id % PIDSEL_DOMAINS] != (uint8_t)time_second)
622                 pid_doms[pgrp->pg_id % PIDSEL_DOMAINS] = (uint8_t)time_second;
623
624         /*
625          * Reset any sigio structures pointing to us as a result of
626          * F_SETOWN with our pgid.
627          */
628         funsetownlst(&pgrp->pg_sigiolst);
629
630         if (pgrp->pg_session->s_ttyp != NULL &&
631             pgrp->pg_session->s_ttyp->t_pgrp == pgrp) {
632                 pgrp->pg_session->s_ttyp->t_pgrp = NULL;
633         }
634         lwkt_reltoken(&prg->proc_token);
635
636         sess_rele(pgrp->pg_session);
637         kfree(pgrp, M_PGRP);
638 }
639
640 /*
641  * Locate a process group by number.  The returned process group will be
642  * referenced w/pgref() and must be released with pgrel() (or assigned
643  * somewhere if you wish to keep the reference).
644  *
645  * No requirements.
646  */
647 struct pgrp *
648 pgfind(pid_t pgid)
649 {
650         struct pgrp *pgrp;
651         procglob_t *prg;
652         int n;
653
654         n = PGRP_HASH(pgid);
655         prg = &procglob[n];
656         lwkt_gettoken_shared(&prg->proc_token);
657
658         LIST_FOREACH(pgrp, &prg->allpgrp, pg_list) {
659                 if (pgrp->pg_id == pgid) {
660                         refcount_acquire(&pgrp->pg_refs);
661                         lwkt_reltoken(&prg->proc_token);
662                         return (pgrp);
663                 }
664         }
665         lwkt_reltoken(&prg->proc_token);
666         return (NULL);
667 }
668
669 /*
670  * Move p to a new or existing process group (and session)
671  *
672  * No requirements.
673  */
674 int
675 enterpgrp(struct proc *p, pid_t pgid, int mksess)
676 {
677         struct pgrp *pgrp;
678         struct pgrp *opgrp;
679         int error;
680
681         pgrp = pgfind(pgid);
682
683         KASSERT(pgrp == NULL || !mksess,
684                 ("enterpgrp: setsid into non-empty pgrp"));
685         KASSERT(!SESS_LEADER(p),
686                 ("enterpgrp: session leader attempted setpgrp"));
687
688         if (pgrp == NULL) {
689                 pid_t savepid = p->p_pid;
690                 struct proc *np;
691                 procglob_t *prg;
692                 int n;
693
694                 /*
695                  * new process group
696                  */
697                 KASSERT(p->p_pid == pgid,
698                         ("enterpgrp: new pgrp and pid != pgid"));
699                 pgrp = kmalloc(sizeof(struct pgrp), M_PGRP, M_WAITOK | M_ZERO);
700                 pgrp->pg_id = pgid;
701                 LIST_INIT(&pgrp->pg_members);
702                 pgrp->pg_jobc = 0;
703                 SLIST_INIT(&pgrp->pg_sigiolst);
704                 lwkt_token_init(&pgrp->pg_token, "pgrp_token");
705                 refcount_init(&pgrp->pg_refs, 1);
706                 lockinit(&pgrp->pg_lock, "pgwt", 0, 0);
707
708                 n = PGRP_HASH(pgid);
709                 prg = &procglob[n];
710
711                 if ((np = pfindn(savepid)) == NULL || np != p) {
712                         lwkt_reltoken(&prg->proc_token);
713                         error = ESRCH;
714                         kfree(pgrp, M_PGRP);
715                         goto fatal;
716                 }
717
718                 lwkt_gettoken(&prg->proc_token);
719                 if (mksess) {
720                         struct session *sess;
721
722                         /*
723                          * new session
724                          */
725                         sess = kmalloc(sizeof(struct session), M_SESSION,
726                                        M_WAITOK | M_ZERO);
727                         lwkt_gettoken(&p->p_token);
728                         sess->s_prg = prg;
729                         sess->s_leader = p;
730                         sess->s_sid = p->p_pid;
731                         sess->s_count = 1;
732                         sess->s_ttyvp = NULL;
733                         sess->s_ttyp = NULL;
734                         bcopy(p->p_session->s_login, sess->s_login,
735                               sizeof(sess->s_login));
736                         pgrp->pg_session = sess;
737                         KASSERT(p == curproc,
738                                 ("enterpgrp: mksession and p != curproc"));
739                         p->p_flags &= ~P_CONTROLT;
740                         LIST_INSERT_HEAD(&prg->allsess, sess, s_list);
741                         lwkt_reltoken(&p->p_token);
742                 } else {
743                         lwkt_gettoken(&p->p_token);
744                         pgrp->pg_session = p->p_session;
745                         sess_hold(pgrp->pg_session);
746                         lwkt_reltoken(&p->p_token);
747                 }
748                 LIST_INSERT_HEAD(&prg->allpgrp, pgrp, pg_list);
749
750                 lwkt_reltoken(&prg->proc_token);
751         } else if (pgrp == p->p_pgrp) {
752                 pgrel(pgrp);
753                 goto done;
754         } /* else pgfind() referenced the pgrp */
755
756         lwkt_gettoken(&pgrp->pg_token);
757         lwkt_gettoken(&p->p_token);
758
759         /*
760          * Replace p->p_pgrp, handling any races that occur.
761          */
762         while ((opgrp = p->p_pgrp) != NULL) {
763                 pgref(opgrp);
764                 lwkt_gettoken(&opgrp->pg_token);
765                 if (opgrp != p->p_pgrp) {
766                         lwkt_reltoken(&opgrp->pg_token);
767                         pgrel(opgrp);
768                         continue;
769                 }
770                 LIST_REMOVE(p, p_pglist);
771                 break;
772         }
773         p->p_pgrp = pgrp;
774         LIST_INSERT_HEAD(&pgrp->pg_members, p, p_pglist);
775
776         /*
777          * Adjust eligibility of affected pgrps to participate in job control.
778          * Increment eligibility counts before decrementing, otherwise we
779          * could reach 0 spuriously during the first call.
780          */
781         fixjobc(p, pgrp, 1);
782         if (opgrp) {
783                 fixjobc(p, opgrp, 0);
784                 lwkt_reltoken(&opgrp->pg_token);
785                 pgrel(opgrp);   /* manual pgref */
786                 pgrel(opgrp);   /* p->p_pgrp ref */
787         }
788         lwkt_reltoken(&p->p_token);
789         lwkt_reltoken(&pgrp->pg_token);
790 done:
791         error = 0;
792 fatal:
793         return (error);
794 }
795
796 /*
797  * Remove process from process group
798  *
799  * No requirements.
800  */
801 int
802 leavepgrp(struct proc *p)
803 {
804         struct pgrp *pg = p->p_pgrp;
805
806         lwkt_gettoken(&p->p_token);
807         while ((pg = p->p_pgrp) != NULL) {
808                 pgref(pg);
809                 lwkt_gettoken(&pg->pg_token);
810                 if (p->p_pgrp != pg) {
811                         lwkt_reltoken(&pg->pg_token);
812                         pgrel(pg);
813                         continue;
814                 }
815                 p->p_pgrp = NULL;
816                 LIST_REMOVE(p, p_pglist);
817                 lwkt_reltoken(&pg->pg_token);
818                 pgrel(pg);      /* manual pgref */
819                 pgrel(pg);      /* p->p_pgrp ref */
820                 break;
821         }
822         lwkt_reltoken(&p->p_token);
823
824         return (0);
825 }
826
827 /*
828  * Adjust the ref count on a session structure.  When the ref count falls to
829  * zero the tty is disassociated from the session and the session structure
830  * is freed.  Note that tty assocation is not itself ref-counted.
831  *
832  * No requirements.
833  */
834 void
835 sess_hold(struct session *sp)
836 {
837         atomic_add_int(&sp->s_count, 1);
838 }
839
840 /*
841  * No requirements.
842  */
843 void
844 sess_rele(struct session *sess)
845 {
846         procglob_t *prg;
847         struct tty *tp;
848         int count;
849         int n;
850
851         n = SESS_HASH(sess->s_sid);
852         prg = &procglob[n];
853
854         for (;;) {
855                 count = sess->s_count;
856                 cpu_ccfence();
857                 KKASSERT(count > 0);
858                 if (count == 1) {
859                         lwkt_gettoken(&prg->proc_token);
860                         if (atomic_cmpset_int(&sess->s_count, 1, 0))
861                                 break;
862                         lwkt_reltoken(&prg->proc_token);
863                         /* retry */
864                 } else {
865                         if (atomic_cmpset_int(&sess->s_count, count, count - 1))
866                                 return;
867                         /* retry */
868                 }
869         }
870
871         /*
872          * Successful 1->0 transition and prg->proc_token is held.
873          */
874         LIST_REMOVE(sess, s_list);
875         if (pid_doms[sess->s_sid % PIDSEL_DOMAINS] != (uint8_t)time_second)
876                 pid_doms[sess->s_sid % PIDSEL_DOMAINS] = (uint8_t)time_second;
877
878         if (sess->s_ttyp && sess->s_ttyp->t_session) {
879 #ifdef TTY_DO_FULL_CLOSE
880                 /* FULL CLOSE, see ttyclearsession() */
881                 KKASSERT(sess->s_ttyp->t_session == sess);
882                 sess->s_ttyp->t_session = NULL;
883 #else
884                 /* HALF CLOSE, see ttyclearsession() */
885                 if (sess->s_ttyp->t_session == sess)
886                         sess->s_ttyp->t_session = NULL;
887 #endif
888         }
889         if ((tp = sess->s_ttyp) != NULL) {
890                 sess->s_ttyp = NULL;
891                 ttyunhold(tp);
892         }
893         lwkt_reltoken(&prg->proc_token);
894
895         kfree(sess, M_SESSION);
896 }
897
898 /*
899  * Adjust pgrp jobc counters when specified process changes process group.
900  * We count the number of processes in each process group that "qualify"
901  * the group for terminal job control (those with a parent in a different
902  * process group of the same session).  If that count reaches zero, the
903  * process group becomes orphaned.  Check both the specified process'
904  * process group and that of its children.
905  * entering == 0 => p is leaving specified group.
906  * entering == 1 => p is entering specified group.
907  *
908  * No requirements.
909  */
910 void
911 fixjobc(struct proc *p, struct pgrp *pgrp, int entering)
912 {
913         struct pgrp *hispgrp;
914         struct session *mysession;
915         struct proc *np;
916
917         /*
918          * Check p's parent to see whether p qualifies its own process
919          * group; if so, adjust count for p's process group.
920          */
921         lwkt_gettoken(&p->p_token);     /* p_children scan */
922         lwkt_gettoken(&pgrp->pg_token);
923
924         mysession = pgrp->pg_session;
925         if ((hispgrp = p->p_pptr->p_pgrp) != pgrp &&
926             hispgrp->pg_session == mysession) {
927                 if (entering)
928                         pgrp->pg_jobc++;
929                 else if (--pgrp->pg_jobc == 0)
930                         orphanpg(pgrp);
931         }
932
933         /*
934          * Check this process' children to see whether they qualify
935          * their process groups; if so, adjust counts for children's
936          * process groups.
937          */
938         LIST_FOREACH(np, &p->p_children, p_sibling) {
939                 PHOLD(np);
940                 lwkt_gettoken(&np->p_token);
941                 if ((hispgrp = np->p_pgrp) != pgrp &&
942                     hispgrp->pg_session == mysession &&
943                     np->p_stat != SZOMB) {
944                         pgref(hispgrp);
945                         lwkt_gettoken(&hispgrp->pg_token);
946                         if (entering)
947                                 hispgrp->pg_jobc++;
948                         else if (--hispgrp->pg_jobc == 0)
949                                 orphanpg(hispgrp);
950                         lwkt_reltoken(&hispgrp->pg_token);
951                         pgrel(hispgrp);
952                 }
953                 lwkt_reltoken(&np->p_token);
954                 PRELE(np);
955         }
956         KKASSERT(pgrp->pg_refs > 0);
957         lwkt_reltoken(&pgrp->pg_token);
958         lwkt_reltoken(&p->p_token);
959 }
960
961 /*
962  * A process group has become orphaned;
963  * if there are any stopped processes in the group,
964  * hang-up all process in that group.
965  *
966  * The caller must hold pg_token.
967  */
968 static void
969 orphanpg(struct pgrp *pg)
970 {
971         struct proc *p;
972
973         LIST_FOREACH(p, &pg->pg_members, p_pglist) {
974                 if (p->p_stat == SSTOP) {
975                         LIST_FOREACH(p, &pg->pg_members, p_pglist) {
976                                 ksignal(p, SIGHUP);
977                                 ksignal(p, SIGCONT);
978                         }
979                         return;
980                 }
981         }
982 }
983
984 /*
985  * Add a new process to the allproc list and the PID hash.  This
986  * also assigns a pid to the new process.
987  *
988  * No requirements.
989  */
990 void
991 proc_add_allproc(struct proc *p)
992 {
993         int random_offset;
994
995         if ((random_offset = randompid) != 0) {
996                 read_random(&random_offset, sizeof(random_offset));
997                 random_offset = (random_offset & 0x7FFFFFFF) % randompid;
998         }
999         proc_makepid(p, random_offset);
1000 }
1001
1002 /*
1003  * Calculate a new process pid.  This function is integrated into
1004  * proc_add_allproc() to guarentee that the new pid is not reused before
1005  * the new process can be added to the allproc list.
1006  *
1007  * p_pid is assigned and the process is added to the allproc hash table
1008  *
1009  * WARNING! We need to allocate PIDs sequentially during early boot.
1010  *          In particular, init needs to have a pid of 1.
1011  */
1012 static
1013 void
1014 proc_makepid(struct proc *p, int random_offset)
1015 {
1016         static pid_t nextpid = 1;       /* heuristic, allowed to race */
1017         procglob_t *prg;
1018         struct pgrp *pg;
1019         struct proc *ps;
1020         struct session *sess;
1021         pid_t base;
1022         int8_t delta8;
1023         int retries;
1024         int n;
1025
1026         /*
1027          * Select the next pid base candidate.
1028          *
1029          * Check cyclement, do not allow a pid < 100.
1030          */
1031         retries = 0;
1032 retry:
1033         base = atomic_fetchadd_int(&nextpid, 1) + random_offset;
1034         if (base <= 0 || base >= PID_MAX) {
1035                 base = base % PID_MAX;
1036                 if (base < 0)
1037                         base = 100;
1038                 if (base < 100)
1039                         base += 100;
1040                 nextpid = base;         /* reset (SMP race ok) */
1041         }
1042
1043         /*
1044          * Do not allow a base pid to be selected from a domain that has
1045          * recently seen a pid/pgid/sessid reap.  Sleep a little if we looped
1046          * through all available domains.
1047          *
1048          * WARNING: We want the early pids to be allocated linearly,
1049          *          particularly pid 1 and pid 2.
1050          */
1051         if (++retries >= PIDSEL_DOMAINS)
1052                 tsleep(&nextpid, 0, "makepid", 1);
1053         if (base >= 100) {
1054                 delta8 = (int8_t)time_second -
1055                          (int8_t)pid_doms[base % PIDSEL_DOMAINS];
1056                 if (delta8 >= 0 && delta8 <= PIDDOM_DELAY) {
1057                         ++pid_domain_skips;
1058                         goto retry;
1059                 }
1060         }
1061
1062         /*
1063          * Calculate a hash index and find an unused process id within
1064          * the table, looping if we cannot find one.
1065          *
1066          * The inner loop increments by ALLPROC_HSIZE which keeps the
1067          * PID at the same pid_doms[] index as well as the same hash index.
1068          */
1069         n = ALLPROC_HASH(base);
1070         prg = &procglob[n];
1071         lwkt_gettoken(&prg->proc_token);
1072
1073 restart1:
1074         LIST_FOREACH(ps, &prg->allproc, p_list) {
1075                 if (ps->p_pid == base) {
1076                         base += ALLPROC_HSIZE;
1077                         if (base >= PID_MAX) {
1078                                 lwkt_reltoken(&prg->proc_token);
1079                                 goto retry;
1080                         }
1081                         ++pid_inner_skips;
1082                         goto restart1;
1083                 }
1084         }
1085         LIST_FOREACH(pg, &prg->allpgrp, pg_list) {
1086                 if (pg->pg_id == base) {
1087                         base += ALLPROC_HSIZE;
1088                         if (base >= PID_MAX) {
1089                                 lwkt_reltoken(&prg->proc_token);
1090                                 goto retry;
1091                         }
1092                         ++pid_inner_skips;
1093                         goto restart1;
1094                 }
1095         }
1096         LIST_FOREACH(sess, &prg->allsess, s_list) {
1097                 if (sess->s_sid == base) {
1098                         base += ALLPROC_HSIZE;
1099                         if (base >= PID_MAX) {
1100                                 lwkt_reltoken(&prg->proc_token);
1101                                 goto retry;
1102                         }
1103                         ++pid_inner_skips;
1104                         goto restart1;
1105                 }
1106         }
1107
1108         /*
1109          * Assign the pid and insert the process.
1110          */
1111         p->p_pid = base;
1112         LIST_INSERT_HEAD(&prg->allproc, p, p_list);
1113         lwkt_reltoken(&prg->proc_token);
1114 }
1115
1116 /*
1117  * Called from exit1 to place the process into a zombie state.
1118  * The process is removed from the pid hash and p_stat is set
1119  * to SZOMB.  Normal pfind[n]() calls will not find it any more.
1120  *
1121  * Caller must hold p->p_token.  We are required to wait until p_lock
1122  * becomes zero before we can manipulate the list, allowing allproc
1123  * scans to guarantee consistency during a list scan.
1124  */
1125 void
1126 proc_move_allproc_zombie(struct proc *p)
1127 {
1128         procglob_t *prg;
1129         int n;
1130
1131         n = ALLPROC_HASH(p->p_pid);
1132         prg = &procglob[n];
1133         PSTALL(p, "reap1", 0);
1134         lwkt_gettoken(&prg->proc_token);
1135
1136         PSTALL(p, "reap1a", 0);
1137         p->p_stat = SZOMB;
1138
1139         lwkt_reltoken(&prg->proc_token);
1140         dsched_exit_proc(p);
1141 }
1142
1143 /*
1144  * This routine is called from kern_wait() and will remove the process
1145  * from the zombie list and the sibling list.  This routine will block
1146  * if someone has a lock on the proces (p_lock).
1147  *
1148  * Caller must hold p->p_token.  We are required to wait until p_lock
1149  * becomes one before we can manipulate the list, allowing allproc
1150  * scans to guarantee consistency during a list scan.
1151  *
1152  * Assumes caller has one ref.
1153  */
1154 void
1155 proc_remove_zombie(struct proc *p)
1156 {
1157         procglob_t *prg;
1158         int n;
1159
1160         n = ALLPROC_HASH(p->p_pid);
1161         prg = &procglob[n];
1162
1163         PSTALL(p, "reap2", 1);
1164         lwkt_gettoken(&prg->proc_token);
1165         PSTALL(p, "reap2a", 1);
1166         LIST_REMOVE(p, p_list);         /* from remove master list */
1167         LIST_REMOVE(p, p_sibling);      /* and from sibling list */
1168         p->p_pptr = NULL;
1169         p->p_ppid = 0;
1170         if (pid_doms[p->p_pid % PIDSEL_DOMAINS] != (uint8_t)time_second)
1171                 pid_doms[p->p_pid % PIDSEL_DOMAINS] = (uint8_t)time_second;
1172         lwkt_reltoken(&prg->proc_token);
1173 }
1174
1175 /*
1176  * Handle various requirements prior to returning to usermode.  Called from
1177  * platform trap and system call code.
1178  */
1179 void
1180 lwpuserret(struct lwp *lp)
1181 {
1182         struct proc *p = lp->lwp_proc;
1183
1184         if (lp->lwp_mpflags & LWP_MP_VNLRU) {
1185                 atomic_clear_int(&lp->lwp_mpflags, LWP_MP_VNLRU);
1186                 allocvnode_gc();
1187         }
1188         if (lp->lwp_mpflags & LWP_MP_WEXIT) {
1189                 lwkt_gettoken(&p->p_token);
1190                 lwp_exit(0, NULL);
1191                 lwkt_reltoken(&p->p_token);     /* NOT REACHED */
1192         }
1193 }
1194
1195 /*
1196  * Kernel threads run from user processes can also accumulate deferred
1197  * actions which need to be acted upon.  Callers include:
1198  *
1199  * nfsd         - Can allocate lots of vnodes
1200  */
1201 void
1202 lwpkthreaddeferred(void)
1203 {
1204         struct lwp *lp = curthread->td_lwp;
1205
1206         if (lp) {
1207                 if (lp->lwp_mpflags & LWP_MP_VNLRU) {
1208                         atomic_clear_int(&lp->lwp_mpflags, LWP_MP_VNLRU);
1209                         allocvnode_gc();
1210                 }
1211         }
1212 }
1213
1214 void
1215 proc_usermap(struct proc *p, int invfork)
1216 {
1217         struct sys_upmap *upmap;
1218
1219         lwkt_gettoken(&p->p_token);
1220         upmap = kmalloc(roundup2(sizeof(*upmap), PAGE_SIZE), M_PROC,
1221                         M_WAITOK | M_ZERO);
1222         if (p->p_upmap == NULL) {
1223                 upmap->header[0].type = UKPTYPE_VERSION;
1224                 upmap->header[0].offset = offsetof(struct sys_upmap, version);
1225                 upmap->header[1].type = UPTYPE_RUNTICKS;
1226                 upmap->header[1].offset = offsetof(struct sys_upmap, runticks);
1227                 upmap->header[2].type = UPTYPE_FORKID;
1228                 upmap->header[2].offset = offsetof(struct sys_upmap, forkid);
1229                 upmap->header[3].type = UPTYPE_PID;
1230                 upmap->header[3].offset = offsetof(struct sys_upmap, pid);
1231                 upmap->header[4].type = UPTYPE_PROC_TITLE;
1232                 upmap->header[4].offset = offsetof(struct sys_upmap,proc_title);
1233                 upmap->header[5].type = UPTYPE_INVFORK;
1234                 upmap->header[5].offset = offsetof(struct sys_upmap, invfork);
1235
1236                 upmap->version = UPMAP_VERSION;
1237                 upmap->pid = p->p_pid;
1238                 upmap->forkid = p->p_forkid;
1239                 upmap->invfork = invfork;
1240                 p->p_upmap = upmap;
1241         } else {
1242                 kfree(upmap, M_PROC);
1243         }
1244         lwkt_reltoken(&p->p_token);
1245 }
1246
1247 void
1248 proc_userunmap(struct proc *p)
1249 {
1250         struct sys_upmap *upmap;
1251
1252         lwkt_gettoken(&p->p_token);
1253         if ((upmap = p->p_upmap) != NULL) {
1254                 p->p_upmap = NULL;
1255                 kfree(upmap, M_PROC);
1256         }
1257         lwkt_reltoken(&p->p_token);
1258 }
1259
1260 /*
1261  * Scan all processes on the allproc list.  The process is automatically
1262  * held for the callback.  A return value of -1 terminates the loop.
1263  * Zombie procs are skipped.
1264  *
1265  * The callback is made with the process held and proc_token held.
1266  *
1267  * We limit the scan to the number of processes as-of the start of
1268  * the scan so as not to get caught up in an endless loop if new processes
1269  * are created more quickly than we can scan the old ones.  Add a little
1270  * slop to try to catch edge cases since nprocs can race.
1271  *
1272  * No requirements.
1273  */
1274 void
1275 allproc_scan(int (*callback)(struct proc *, void *), void *data, int segmented)
1276 {
1277         int limit = nprocs + ncpus;
1278         struct proc *p;
1279         int ns;
1280         int ne;
1281         int r;
1282         int n;
1283
1284         if (segmented) {
1285                 int id = mycpu->gd_cpuid;
1286                 ns = id * ALLPROC_HSIZE / ncpus;
1287                 ne = (id + 1) * ALLPROC_HSIZE / ncpus;
1288         } else {
1289                 ns = 0;
1290                 ne = ALLPROC_HSIZE;
1291         }
1292
1293         /*
1294          * prg->proc_token protects the allproc list and PHOLD() prevents the
1295          * process from being removed from the allproc list or the zombproc
1296          * list.
1297          */
1298         for (n = ns; n < ne; ++n) {
1299                 procglob_t *prg = &procglob[n];
1300                 if (LIST_FIRST(&prg->allproc) == NULL)
1301                         continue;
1302                 lwkt_gettoken(&prg->proc_token);
1303                 LIST_FOREACH(p, &prg->allproc, p_list) {
1304                         if (p->p_stat == SZOMB)
1305                                 continue;
1306                         PHOLD(p);
1307                         r = callback(p, data);
1308                         PRELE(p);
1309                         if (r < 0)
1310                                 break;
1311                         if (--limit < 0)
1312                                 break;
1313                 }
1314                 lwkt_reltoken(&prg->proc_token);
1315
1316                 /*
1317                  * Check if asked to stop early
1318                  */
1319                 if (p)
1320                         break;
1321         }
1322 }
1323
1324 /*
1325  * Scan all lwps of processes on the allproc list.  The lwp is automatically
1326  * held for the callback.  A return value of -1 terminates the loop.
1327  *
1328  * The callback is made with the proces and lwp both held, and proc_token held.
1329  *
1330  * No requirements.
1331  */
1332 void
1333 alllwp_scan(int (*callback)(struct lwp *, void *), void *data, int segmented)
1334 {
1335         struct proc *p;
1336         struct lwp *lp;
1337         int ns;
1338         int ne;
1339         int r = 0;
1340         int n;
1341
1342         if (segmented) {
1343                 int id = mycpu->gd_cpuid;
1344                 ns = id * ALLPROC_HSIZE / ncpus;
1345                 ne = (id + 1) * ALLPROC_HSIZE / ncpus;
1346         } else {
1347                 ns = 0;
1348                 ne = ALLPROC_HSIZE;
1349         }
1350
1351         for (n = ns; n < ne; ++n) {
1352                 procglob_t *prg = &procglob[n];
1353
1354                 if (LIST_FIRST(&prg->allproc) == NULL)
1355                         continue;
1356                 lwkt_gettoken(&prg->proc_token);
1357                 LIST_FOREACH(p, &prg->allproc, p_list) {
1358                         if (p->p_stat == SZOMB)
1359                                 continue;
1360                         PHOLD(p);
1361                         lwkt_gettoken(&p->p_token);
1362                         FOREACH_LWP_IN_PROC(lp, p) {
1363                                 LWPHOLD(lp);
1364                                 r = callback(lp, data);
1365                                 LWPRELE(lp);
1366                         }
1367                         lwkt_reltoken(&p->p_token);
1368                         PRELE(p);
1369                         if (r < 0)
1370                                 break;
1371                 }
1372                 lwkt_reltoken(&prg->proc_token);
1373
1374                 /*
1375                  * Asked to exit early
1376                  */
1377                 if (p)
1378                         break;
1379         }
1380 }
1381
1382 /*
1383  * Scan all processes on the zombproc list.  The process is automatically
1384  * held for the callback.  A return value of -1 terminates the loop.
1385  *
1386  * No requirements.
1387  * The callback is made with the proces held and proc_token held.
1388  */
1389 void
1390 zombproc_scan(int (*callback)(struct proc *, void *), void *data)
1391 {
1392         struct proc *p;
1393         int r;
1394         int n;
1395
1396         /*
1397          * prg->proc_token protects the allproc list and PHOLD() prevents the
1398          * process from being removed from the allproc list or the zombproc
1399          * list.
1400          */
1401         for (n = 0; n < ALLPROC_HSIZE; ++n) {
1402                 procglob_t *prg = &procglob[n];
1403
1404                 if (LIST_FIRST(&prg->allproc) == NULL)
1405                         continue;
1406                 lwkt_gettoken(&prg->proc_token);
1407                 LIST_FOREACH(p, &prg->allproc, p_list) {
1408                         if (p->p_stat != SZOMB)
1409                                 continue;
1410                         PHOLD(p);
1411                         r = callback(p, data);
1412                         PRELE(p);
1413                         if (r < 0)
1414                                 break;
1415                 }
1416                 lwkt_reltoken(&prg->proc_token);
1417
1418                 /*
1419                  * Check if asked to stop early
1420                  */
1421                 if (p)
1422                         break;
1423         }
1424 }
1425
1426 #include "opt_ddb.h"
1427 #ifdef DDB
1428 #include <ddb/ddb.h>
1429
1430 /*
1431  * Debugging only
1432  */
1433 DB_SHOW_COMMAND(pgrpdump, pgrpdump)
1434 {
1435         struct pgrp *pgrp;
1436         struct proc *p;
1437         procglob_t *prg;
1438         int i;
1439
1440         for (i = 0; i < ALLPROC_HSIZE; ++i) {
1441                 prg = &procglob[i];
1442
1443                 if (LIST_EMPTY(&prg->allpgrp))
1444                         continue;
1445                 kprintf("\tindx %d\n", i);
1446                 LIST_FOREACH(pgrp, &prg->allpgrp, pg_list) {
1447                         kprintf("\tpgrp %p, pgid %ld, sess %p, "
1448                                 "sesscnt %d, mem %p\n",
1449                                 (void *)pgrp, (long)pgrp->pg_id,
1450                                 (void *)pgrp->pg_session,
1451                                 pgrp->pg_session->s_count,
1452                                 (void *)LIST_FIRST(&pgrp->pg_members));
1453                         LIST_FOREACH(p, &pgrp->pg_members, p_pglist) {
1454                                 kprintf("\t\tpid %ld addr %p pgrp %p\n",
1455                                         (long)p->p_pid, (void *)p,
1456                                         (void *)p->p_pgrp);
1457                         }
1458                 }
1459         }
1460 }
1461 #endif /* DDB */
1462
1463 /*
1464  * The caller must hold proc_token.
1465  */
1466 static int
1467 sysctl_out_proc(struct proc *p, struct sysctl_req *req, int flags)
1468 {
1469         struct kinfo_proc ki;
1470         struct lwp *lp;
1471         int skp = 0, had_output = 0;
1472         int error;
1473
1474         bzero(&ki, sizeof(ki));
1475         lwkt_gettoken_shared(&p->p_token);
1476         fill_kinfo_proc(p, &ki);
1477         if ((flags & KERN_PROC_FLAG_LWP) == 0)
1478                 skp = 1;
1479         error = 0;
1480         FOREACH_LWP_IN_PROC(lp, p) {
1481                 LWPHOLD(lp);
1482                 fill_kinfo_lwp(lp, &ki.kp_lwp);
1483                 had_output = 1;
1484                 error = SYSCTL_OUT(req, &ki, sizeof(ki));
1485                 LWPRELE(lp);
1486                 if (error)
1487                         break;
1488                 if (skp)
1489                         break;
1490         }
1491         lwkt_reltoken(&p->p_token);
1492         /* We need to output at least the proc, even if there is no lwp. */
1493         if (had_output == 0) {
1494                 error = SYSCTL_OUT(req, &ki, sizeof(ki));
1495         }
1496         return (error);
1497 }
1498
1499 /*
1500  * The caller must hold proc_token.
1501  */
1502 static int
1503 sysctl_out_proc_kthread(struct thread *td, struct sysctl_req *req)
1504 {
1505         struct kinfo_proc ki;
1506         int error;
1507
1508         fill_kinfo_proc_kthread(td, &ki);
1509         error = SYSCTL_OUT(req, &ki, sizeof(ki));
1510         if (error)
1511                 return error;
1512         return(0);
1513 }
1514
1515 /*
1516  * No requirements.
1517  */
1518 static int
1519 sysctl_kern_proc(SYSCTL_HANDLER_ARGS)
1520 {
1521         int *name = (int *)arg1;
1522         int oid = oidp->oid_number;
1523         u_int namelen = arg2;
1524         struct proc *p;
1525         struct thread *td;
1526         struct thread *marker;
1527         int flags = 0;
1528         int error = 0;
1529         int n;
1530         int origcpu;
1531         struct ucred *cr1 = curproc->p_ucred;
1532         struct ucred *crcache = NULL;
1533
1534         flags = oid & KERN_PROC_FLAGMASK;
1535         oid &= ~KERN_PROC_FLAGMASK;
1536
1537         if ((oid == KERN_PROC_ALL && namelen != 0) ||
1538             (oid != KERN_PROC_ALL && namelen != 1)) {
1539                 return (EINVAL);
1540         }
1541
1542         /*
1543          * proc_token protects the allproc list and PHOLD() prevents the
1544          * process from being removed from the allproc list or the zombproc
1545          * list.
1546          */
1547         if (oid == KERN_PROC_PID) {
1548                 p = pfind((pid_t)name[0]);
1549                 if (p) {
1550                         crcache = pcredcache(crcache, p);
1551                         if (PRISON_CHECK(cr1, crcache))
1552                                 error = sysctl_out_proc(p, req, flags);
1553                         PRELE(p);
1554                 }
1555                 goto post_threads;
1556         }
1557         p = NULL;
1558
1559         if (!req->oldptr) {
1560                 /* overestimate by 5 procs */
1561                 error = SYSCTL_OUT(req, 0, sizeof (struct kinfo_proc) * 5);
1562                 if (error)
1563                         goto post_threads;
1564         }
1565
1566         for (n = 0; n < ALLPROC_HSIZE; ++n) {
1567                 procglob_t *prg = &procglob[n];
1568
1569                 if (LIST_EMPTY(&prg->allproc))
1570                         continue;
1571                 lwkt_gettoken_shared(&prg->proc_token);
1572                 LIST_FOREACH(p, &prg->allproc, p_list) {
1573                         /*
1574                          * Show a user only their processes.
1575                          */
1576                         if (ps_showallprocs == 0) {
1577                                 crcache = pcredcache(crcache, p);
1578                                 if (crcache == NULL ||
1579                                     p_trespass(cr1, crcache)) {
1580                                         continue;
1581                                 }
1582                         }
1583
1584                         /*
1585                          * Skip embryonic processes.
1586                          */
1587                         if (p->p_stat == SIDL)
1588                                 continue;
1589                         /*
1590                          * TODO - make more efficient (see notes below).
1591                          * do by session.
1592                          */
1593                         switch (oid) {
1594                         case KERN_PROC_PGRP:
1595                                 /* could do this by traversing pgrp */
1596                                 if (p->p_pgrp == NULL || 
1597                                     p->p_pgrp->pg_id != (pid_t)name[0])
1598                                         continue;
1599                                 break;
1600
1601                         case KERN_PROC_TTY:
1602                                 if ((p->p_flags & P_CONTROLT) == 0 ||
1603                                     p->p_session == NULL ||
1604                                     p->p_session->s_ttyp == NULL ||
1605                                     dev2udev(p->p_session->s_ttyp->t_dev) != 
1606                                         (udev_t)name[0])
1607                                         continue;
1608                                 break;
1609
1610                         case KERN_PROC_UID:
1611                                 crcache = pcredcache(crcache, p);
1612                                 if (crcache == NULL ||
1613                                     crcache->cr_uid != (uid_t)name[0]) {
1614                                         continue;
1615                                 }
1616                                 break;
1617
1618                         case KERN_PROC_RUID:
1619                                 crcache = pcredcache(crcache, p);
1620                                 if (crcache == NULL ||
1621                                     crcache->cr_ruid != (uid_t)name[0]) {
1622                                         continue;
1623                                 }
1624                                 break;
1625                         }
1626
1627                         crcache = pcredcache(crcache, p);
1628                         if (!PRISON_CHECK(cr1, crcache))
1629                                 continue;
1630                         PHOLD(p);
1631                         error = sysctl_out_proc(p, req, flags);
1632                         PRELE(p);
1633                         if (error) {
1634                                 lwkt_reltoken(&prg->proc_token);
1635                                 goto post_threads;
1636                         }
1637                 }
1638                 lwkt_reltoken(&prg->proc_token);
1639         }
1640
1641         /*
1642          * Iterate over all active cpus and scan their thread list.  Start
1643          * with the next logical cpu and end with our original cpu.  We
1644          * migrate our own thread to each target cpu in order to safely scan
1645          * its thread list.  In the last loop we migrate back to our original
1646          * cpu.
1647          */
1648         origcpu = mycpu->gd_cpuid;
1649         if (!ps_showallthreads || jailed(cr1))
1650                 goto post_threads;
1651
1652         marker = kmalloc(sizeof(struct thread), M_TEMP, M_WAITOK|M_ZERO);
1653         marker->td_flags = TDF_MARKER;
1654         error = 0;
1655
1656         for (n = 1; n <= ncpus; ++n) {
1657                 globaldata_t rgd;
1658                 int nid;
1659
1660                 nid = (origcpu + n) % ncpus;
1661                 if (CPUMASK_TESTBIT(smp_active_mask, nid) == 0)
1662                         continue;
1663                 rgd = globaldata_find(nid);
1664                 lwkt_setcpu_self(rgd);
1665
1666                 crit_enter();
1667                 TAILQ_INSERT_TAIL(&rgd->gd_tdallq, marker, td_allq);
1668
1669                 while ((td = TAILQ_PREV(marker, lwkt_queue, td_allq)) != NULL) {
1670                         TAILQ_REMOVE(&rgd->gd_tdallq, marker, td_allq);
1671                         TAILQ_INSERT_BEFORE(td, marker, td_allq);
1672                         if (td->td_flags & TDF_MARKER)
1673                                 continue;
1674                         if (td->td_proc)
1675                                 continue;
1676
1677                         lwkt_hold(td);
1678                         crit_exit();
1679
1680                         switch (oid) {
1681                         case KERN_PROC_PGRP:
1682                         case KERN_PROC_TTY:
1683                         case KERN_PROC_UID:
1684                         case KERN_PROC_RUID:
1685                                 break;
1686                         default:
1687                                 error = sysctl_out_proc_kthread(td, req);
1688                                 break;
1689                         }
1690                         lwkt_rele(td);
1691                         crit_enter();
1692                         if (error)
1693                                 break;
1694                 }
1695                 TAILQ_REMOVE(&rgd->gd_tdallq, marker, td_allq);
1696                 crit_exit();
1697
1698                 if (error)
1699                         break;
1700         }
1701
1702         /*
1703          * Userland scheduler expects us to return on the same cpu we
1704          * started on.
1705          */
1706         if (mycpu->gd_cpuid != origcpu)
1707                 lwkt_setcpu_self(globaldata_find(origcpu));
1708
1709         kfree(marker, M_TEMP);
1710
1711 post_threads:
1712         if (crcache)
1713                 crfree(crcache);
1714         return (error);
1715 }
1716
1717 /*
1718  * This sysctl allows a process to retrieve the argument list or process
1719  * title for another process without groping around in the address space
1720  * of the other process.  It also allow a process to set its own "process 
1721  * title to a string of its own choice.
1722  *
1723  * No requirements.
1724  */
1725 static int
1726 sysctl_kern_proc_args(SYSCTL_HANDLER_ARGS)
1727 {
1728         int *name = (int*) arg1;
1729         u_int namelen = arg2;
1730         struct proc *p;
1731         struct pargs *opa;
1732         struct pargs *pa;
1733         int error = 0;
1734         struct ucred *cr1 = curproc->p_ucred;
1735
1736         if (namelen != 1) 
1737                 return (EINVAL);
1738
1739         p = pfind((pid_t)name[0]);
1740         if (p == NULL)
1741                 goto done;
1742         lwkt_gettoken(&p->p_token);
1743
1744         if ((!ps_argsopen) && p_trespass(cr1, p->p_ucred))
1745                 goto done;
1746
1747         if (req->newptr && curproc != p) {
1748                 error = EPERM;
1749                 goto done;
1750         }
1751         if (req->oldptr) {
1752                 if (p->p_upmap != NULL && p->p_upmap->proc_title[0]) {
1753                         /*
1754                          * Args set via writable user process mmap.
1755                          * We must calculate the string length manually
1756                          * because the user data can change at any time.
1757                          */
1758                         size_t n;
1759                         char *base;
1760
1761                         base = p->p_upmap->proc_title;
1762                         for (n = 0; n < UPMAP_MAXPROCTITLE - 1; ++n) {
1763                                 if (base[n] == 0)
1764                                         break;
1765                         }
1766                         error = SYSCTL_OUT(req, base, n);
1767                         if (error == 0)
1768                                 error = SYSCTL_OUT(req, "", 1);
1769                 } else if ((pa = p->p_args) != NULL) {
1770                         /*
1771                          * Args set by setproctitle() sysctl.
1772                          */
1773                         refcount_acquire(&pa->ar_ref);
1774                         error = SYSCTL_OUT(req, pa->ar_args, pa->ar_length);
1775                         if (refcount_release(&pa->ar_ref))
1776                                 kfree(pa, M_PARGS);
1777                 }
1778         }
1779         if (req->newptr == NULL)
1780                 goto done;
1781
1782         if (req->newlen + sizeof(struct pargs) > ps_arg_cache_limit) {
1783                 goto done;
1784         }
1785
1786         pa = kmalloc(sizeof(struct pargs) + req->newlen, M_PARGS, M_WAITOK);
1787         refcount_init(&pa->ar_ref, 1);
1788         pa->ar_length = req->newlen;
1789         error = SYSCTL_IN(req, pa->ar_args, req->newlen);
1790         if (error) {
1791                 kfree(pa, M_PARGS);
1792                 goto done;
1793         }
1794
1795
1796         /*
1797          * Replace p_args with the new pa.  p_args may have previously
1798          * been NULL.
1799          */
1800         opa = p->p_args;
1801         p->p_args = pa;
1802
1803         if (opa) {
1804                 KKASSERT(opa->ar_ref > 0);
1805                 if (refcount_release(&opa->ar_ref)) {
1806                         kfree(opa, M_PARGS);
1807                         /* opa = NULL; */
1808                 }
1809         }
1810 done:
1811         if (p) {
1812                 lwkt_reltoken(&p->p_token);
1813                 PRELE(p);
1814         }
1815         return (error);
1816 }
1817
1818 static int
1819 sysctl_kern_proc_cwd(SYSCTL_HANDLER_ARGS)
1820 {
1821         int *name = (int*) arg1;
1822         u_int namelen = arg2;
1823         struct proc *p;
1824         int error = 0;
1825         char *fullpath, *freepath;
1826         struct ucred *cr1 = curproc->p_ucred;
1827
1828         if (namelen != 1) 
1829                 return (EINVAL);
1830
1831         p = pfind((pid_t)name[0]);
1832         if (p == NULL)
1833                 goto done;
1834         lwkt_gettoken_shared(&p->p_token);
1835
1836         /*
1837          * If we are not allowed to see other args, we certainly shouldn't
1838          * get the cwd either. Also check the usual trespassing.
1839          */
1840         if ((!ps_argsopen) && p_trespass(cr1, p->p_ucred))
1841                 goto done;
1842
1843         if (req->oldptr && p->p_fd != NULL && p->p_fd->fd_ncdir.ncp) {
1844                 struct nchandle nch;
1845
1846                 cache_copy(&p->p_fd->fd_ncdir, &nch);
1847                 error = cache_fullpath(p, &nch, NULL,
1848                                        &fullpath, &freepath, 0);
1849                 cache_drop(&nch);
1850                 if (error)
1851                         goto done;
1852                 error = SYSCTL_OUT(req, fullpath, strlen(fullpath) + 1);
1853                 kfree(freepath, M_TEMP);
1854         }
1855
1856 done:
1857         if (p) {
1858                 lwkt_reltoken(&p->p_token);
1859                 PRELE(p);
1860         }
1861         return (error);
1862 }
1863
1864 /*
1865  * This sysctl allows a process to retrieve the path of the executable for
1866  * itself or another process.
1867  */
1868 static int
1869 sysctl_kern_proc_pathname(SYSCTL_HANDLER_ARGS)
1870 {
1871         pid_t *pidp = (pid_t *)arg1;
1872         unsigned int arglen = arg2;
1873         struct proc *p;
1874         char *retbuf, *freebuf;
1875         int error = 0;
1876         struct nchandle nch;
1877
1878         if (arglen != 1)
1879                 return (EINVAL);
1880         if (*pidp == -1) {      /* -1 means this process */
1881                 p = curproc;
1882         } else {
1883                 p = pfind(*pidp);
1884                 if (p == NULL)
1885                         return (ESRCH);
1886         }
1887
1888         cache_copy(&p->p_textnch, &nch);
1889         error = cache_fullpath(p, &nch, NULL, &retbuf, &freebuf, 0);
1890         cache_drop(&nch);
1891         if (error)
1892                 goto done;
1893         error = SYSCTL_OUT(req, retbuf, strlen(retbuf) + 1);
1894         kfree(freebuf, M_TEMP);
1895 done:
1896         if (*pidp != -1)
1897                 PRELE(p);
1898
1899         return (error);
1900 }
1901
1902 static int
1903 sysctl_kern_proc_sigtramp(SYSCTL_HANDLER_ARGS)
1904 {
1905         /*int *name = (int *)arg1;*/
1906         u_int namelen = arg2;
1907         struct kinfo_sigtramp kst;
1908         const struct sysentvec *sv;
1909         int error;
1910
1911         if (namelen > 1)
1912                 return (EINVAL);
1913         /* ignore pid if passed in (freebsd compatibility) */
1914
1915         sv = curproc->p_sysent;
1916         bzero(&kst, sizeof(kst));
1917         if (sv->sv_szsigcode) {
1918                 intptr_t sigbase;
1919
1920                 sigbase = trunc_page64((intptr_t)PS_STRINGS -
1921                                        *sv->sv_szsigcode);
1922                 sigbase -= SZSIGCODE_EXTRA_BYTES;
1923
1924                 kst.ksigtramp_start = (void *)sigbase;
1925                 kst.ksigtramp_end = (void *)(sigbase + *sv->sv_szsigcode);
1926         }
1927         error = SYSCTL_OUT(req, &kst, sizeof(kst));
1928
1929         return (error);
1930 }
1931
1932 SYSCTL_NODE(_kern, KERN_PROC, proc, CTLFLAG_RD,  0, "Process table");
1933
1934 SYSCTL_PROC(_kern_proc, KERN_PROC_ALL, all,
1935         CTLFLAG_RD | CTLTYPE_STRUCT | CTLFLAG_NOLOCK,
1936         0, 0, sysctl_kern_proc, "S,proc", "Return entire process table");
1937
1938 SYSCTL_NODE(_kern_proc, KERN_PROC_PGRP, pgrp,
1939         CTLFLAG_RD | CTLFLAG_NOLOCK,
1940         sysctl_kern_proc, "Process table");
1941
1942 SYSCTL_NODE(_kern_proc, KERN_PROC_TTY, tty,
1943         CTLFLAG_RD | CTLFLAG_NOLOCK,
1944         sysctl_kern_proc, "Process table");
1945
1946 SYSCTL_NODE(_kern_proc, KERN_PROC_UID, uid,
1947         CTLFLAG_RD | CTLFLAG_NOLOCK,
1948         sysctl_kern_proc, "Process table");
1949
1950 SYSCTL_NODE(_kern_proc, KERN_PROC_RUID, ruid,
1951         CTLFLAG_RD | CTLFLAG_NOLOCK,
1952         sysctl_kern_proc, "Process table");
1953
1954 SYSCTL_NODE(_kern_proc, KERN_PROC_PID, pid,
1955         CTLFLAG_RD | CTLFLAG_NOLOCK,
1956         sysctl_kern_proc, "Process table");
1957
1958 SYSCTL_NODE(_kern_proc, (KERN_PROC_ALL | KERN_PROC_FLAG_LWP), all_lwp,
1959         CTLFLAG_RD | CTLFLAG_NOLOCK,
1960         sysctl_kern_proc, "Process table");
1961
1962 SYSCTL_NODE(_kern_proc, (KERN_PROC_PGRP | KERN_PROC_FLAG_LWP), pgrp_lwp,
1963         CTLFLAG_RD | CTLFLAG_NOLOCK,
1964         sysctl_kern_proc, "Process table");
1965
1966 SYSCTL_NODE(_kern_proc, (KERN_PROC_TTY | KERN_PROC_FLAG_LWP), tty_lwp,
1967         CTLFLAG_RD | CTLFLAG_NOLOCK,
1968         sysctl_kern_proc, "Process table");
1969
1970 SYSCTL_NODE(_kern_proc, (KERN_PROC_UID | KERN_PROC_FLAG_LWP), uid_lwp,
1971         CTLFLAG_RD | CTLFLAG_NOLOCK,
1972         sysctl_kern_proc, "Process table");
1973
1974 SYSCTL_NODE(_kern_proc, (KERN_PROC_RUID | KERN_PROC_FLAG_LWP), ruid_lwp,
1975         CTLFLAG_RD | CTLFLAG_NOLOCK,
1976         sysctl_kern_proc, "Process table");
1977
1978 SYSCTL_NODE(_kern_proc, (KERN_PROC_PID | KERN_PROC_FLAG_LWP), pid_lwp,
1979         CTLFLAG_RD | CTLFLAG_NOLOCK,
1980         sysctl_kern_proc, "Process table");
1981
1982 SYSCTL_NODE(_kern_proc, KERN_PROC_ARGS, args,
1983         CTLFLAG_RW | CTLFLAG_ANYBODY | CTLFLAG_NOLOCK,
1984         sysctl_kern_proc_args, "Process argument list");
1985
1986 SYSCTL_NODE(_kern_proc, KERN_PROC_CWD, cwd,
1987         CTLFLAG_RD | CTLFLAG_ANYBODY | CTLFLAG_NOLOCK,
1988         sysctl_kern_proc_cwd, "Process argument list");
1989
1990 static SYSCTL_NODE(_kern_proc, KERN_PROC_PATHNAME, pathname,
1991         CTLFLAG_RD | CTLFLAG_NOLOCK,
1992         sysctl_kern_proc_pathname, "Process executable path");
1993
1994 SYSCTL_PROC(_kern_proc, KERN_PROC_SIGTRAMP, sigtramp,
1995         CTLFLAG_RD | CTLTYPE_STRUCT | CTLFLAG_NOLOCK,
1996         0, 0, sysctl_kern_proc_sigtramp, "S,sigtramp",
1997         "Return sigtramp address range");