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 * 4. 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 * @(#)kern_proc.c 8.7 (Berkeley) 2/14/95 30 */ 31 32 #include <sys/cdefs.h> 33 __FBSDID("$FreeBSD$"); 34 35 #include "opt_compat.h" 36 #include "opt_ddb.h" 37 #include "opt_kdtrace.h" 38 #include "opt_ktrace.h" 39 #include "opt_kstack_pages.h" 40 #include "opt_stack.h" 41 42 #include <sys/param.h> 43 #include <sys/systm.h> 44 #include <sys/elf.h> 45 #include <sys/exec.h> 46 #include <sys/kernel.h> 47 #include <sys/limits.h> 48 #include <sys/lock.h> 49 #include <sys/loginclass.h> 50 #include <sys/malloc.h> 51 #include <sys/mman.h> 52 #include <sys/mount.h> 53 #include <sys/mutex.h> 54 #include <sys/proc.h> 55 #include <sys/ptrace.h> 56 #include <sys/refcount.h> 57 #include <sys/resourcevar.h> 58 #include <sys/sbuf.h> 59 #include <sys/sysent.h> 60 #include <sys/sched.h> 61 #include <sys/smp.h> 62 #include <sys/stack.h> 63 #include <sys/stat.h> 64 #include <sys/sysctl.h> 65 #include <sys/filedesc.h> 66 #include <sys/tty.h> 67 #include <sys/signalvar.h> 68 #include <sys/sdt.h> 69 #include <sys/sx.h> 70 #include <sys/user.h> 71 #include <sys/jail.h> 72 #include <sys/vnode.h> 73 #include <sys/eventhandler.h> 74 75 #ifdef DDB 76 #include <ddb/ddb.h> 77 #endif 78 79 #include <vm/vm.h> 80 #include <vm/vm_param.h> 81 #include <vm/vm_extern.h> 82 #include <vm/pmap.h> 83 #include <vm/vm_map.h> 84 #include <vm/vm_object.h> 85 #include <vm/vm_page.h> 86 #include <vm/uma.h> 87 88 #ifdef COMPAT_FREEBSD32 89 #include <compat/freebsd32/freebsd32.h> 90 #include <compat/freebsd32/freebsd32_util.h> 91 #endif 92 93 SDT_PROVIDER_DEFINE(proc); 94 SDT_PROBE_DEFINE(proc, kernel, ctor, entry, entry); 95 SDT_PROBE_ARGTYPE(proc, kernel, ctor, entry, 0, "struct proc *"); 96 SDT_PROBE_ARGTYPE(proc, kernel, ctor, entry, 1, "int"); 97 SDT_PROBE_ARGTYPE(proc, kernel, ctor, entry, 2, "void *"); 98 SDT_PROBE_ARGTYPE(proc, kernel, ctor, entry, 3, "int"); 99 SDT_PROBE_DEFINE(proc, kernel, ctor, return, return); 100 SDT_PROBE_ARGTYPE(proc, kernel, ctor, return, 0, "struct proc *"); 101 SDT_PROBE_ARGTYPE(proc, kernel, ctor, return, 1, "int"); 102 SDT_PROBE_ARGTYPE(proc, kernel, ctor, return, 2, "void *"); 103 SDT_PROBE_ARGTYPE(proc, kernel, ctor, return, 3, "int"); 104 SDT_PROBE_DEFINE(proc, kernel, dtor, entry, entry); 105 SDT_PROBE_ARGTYPE(proc, kernel, dtor, entry, 0, "struct proc *"); 106 SDT_PROBE_ARGTYPE(proc, kernel, dtor, entry, 1, "int"); 107 SDT_PROBE_ARGTYPE(proc, kernel, dtor, entry, 2, "void *"); 108 SDT_PROBE_ARGTYPE(proc, kernel, dtor, entry, 3, "struct thread *"); 109 SDT_PROBE_DEFINE(proc, kernel, dtor, return, return); 110 SDT_PROBE_ARGTYPE(proc, kernel, dtor, return, 0, "struct proc *"); 111 SDT_PROBE_ARGTYPE(proc, kernel, dtor, return, 1, "int"); 112 SDT_PROBE_ARGTYPE(proc, kernel, dtor, return, 2, "void *"); 113 SDT_PROBE_DEFINE(proc, kernel, init, entry, entry); 114 SDT_PROBE_ARGTYPE(proc, kernel, init, entry, 0, "struct proc *"); 115 SDT_PROBE_ARGTYPE(proc, kernel, init, entry, 1, "int"); 116 SDT_PROBE_ARGTYPE(proc, kernel, init, entry, 2, "int"); 117 SDT_PROBE_DEFINE(proc, kernel, init, return, return); 118 SDT_PROBE_ARGTYPE(proc, kernel, init, return, 0, "struct proc *"); 119 SDT_PROBE_ARGTYPE(proc, kernel, init, return, 1, "int"); 120 SDT_PROBE_ARGTYPE(proc, kernel, init, return, 2, "int"); 121 122 MALLOC_DEFINE(M_PGRP, "pgrp", "process group header"); 123 MALLOC_DEFINE(M_SESSION, "session", "session header"); 124 static MALLOC_DEFINE(M_PROC, "proc", "Proc structures"); 125 MALLOC_DEFINE(M_SUBPROC, "subproc", "Proc sub-structures"); 126 127 static void doenterpgrp(struct proc *, struct pgrp *); 128 static void orphanpg(struct pgrp *pg); 129 static void fill_kinfo_aggregate(struct proc *p, struct kinfo_proc *kp); 130 static void fill_kinfo_proc_only(struct proc *p, struct kinfo_proc *kp); 131 static void fill_kinfo_thread(struct thread *td, struct kinfo_proc *kp, 132 int preferthread); 133 static void pgadjustjobc(struct pgrp *pgrp, int entering); 134 static void pgdelete(struct pgrp *); 135 static int proc_ctor(void *mem, int size, void *arg, int flags); 136 static void proc_dtor(void *mem, int size, void *arg); 137 static int proc_init(void *mem, int size, int flags); 138 static void proc_fini(void *mem, int size); 139 static void pargs_free(struct pargs *pa); 140 static struct proc *zpfind_locked(pid_t pid); 141 142 /* 143 * Other process lists 144 */ 145 struct pidhashhead *pidhashtbl; 146 u_long pidhash; 147 struct pgrphashhead *pgrphashtbl; 148 u_long pgrphash; 149 struct proclist allproc; 150 struct proclist zombproc; 151 struct sx allproc_lock; 152 struct sx proctree_lock; 153 struct mtx ppeers_lock; 154 uma_zone_t proc_zone; 155 156 int kstack_pages = KSTACK_PAGES; 157 SYSCTL_INT(_kern, OID_AUTO, kstack_pages, CTLFLAG_RD, &kstack_pages, 0, 158 "Kernel stack size in pages"); 159 160 CTASSERT(sizeof(struct kinfo_proc) == KINFO_PROC_SIZE); 161 #ifdef COMPAT_FREEBSD32 162 CTASSERT(sizeof(struct kinfo_proc32) == KINFO_PROC32_SIZE); 163 #endif 164 165 /* 166 * Initialize global process hashing structures. 167 */ 168 void 169 procinit() 170 { 171 172 sx_init(&allproc_lock, "allproc"); 173 sx_init(&proctree_lock, "proctree"); 174 mtx_init(&ppeers_lock, "p_peers", NULL, MTX_DEF); 175 LIST_INIT(&allproc); 176 LIST_INIT(&zombproc); 177 pidhashtbl = hashinit(maxproc / 4, M_PROC, &pidhash); 178 pgrphashtbl = hashinit(maxproc / 4, M_PROC, &pgrphash); 179 proc_zone = uma_zcreate("PROC", sched_sizeof_proc(), 180 proc_ctor, proc_dtor, proc_init, proc_fini, 181 UMA_ALIGN_PTR, UMA_ZONE_NOFREE); 182 uihashinit(); 183 } 184 185 /* 186 * Prepare a proc for use. 187 */ 188 static int 189 proc_ctor(void *mem, int size, void *arg, int flags) 190 { 191 struct proc *p; 192 193 p = (struct proc *)mem; 194 SDT_PROBE(proc, kernel, ctor , entry, p, size, arg, flags, 0); 195 EVENTHANDLER_INVOKE(process_ctor, p); 196 SDT_PROBE(proc, kernel, ctor , return, p, size, arg, flags, 0); 197 return (0); 198 } 199 200 /* 201 * Reclaim a proc after use. 202 */ 203 static void 204 proc_dtor(void *mem, int size, void *arg) 205 { 206 struct proc *p; 207 struct thread *td; 208 209 /* INVARIANTS checks go here */ 210 p = (struct proc *)mem; 211 td = FIRST_THREAD_IN_PROC(p); 212 SDT_PROBE(proc, kernel, dtor, entry, p, size, arg, td, 0); 213 if (td != NULL) { 214 #ifdef INVARIANTS 215 KASSERT((p->p_numthreads == 1), 216 ("bad number of threads in exiting process")); 217 KASSERT(STAILQ_EMPTY(&p->p_ktr), ("proc_dtor: non-empty p_ktr")); 218 #endif 219 /* Free all OSD associated to this thread. */ 220 osd_thread_exit(td); 221 } 222 EVENTHANDLER_INVOKE(process_dtor, p); 223 if (p->p_ksi != NULL) 224 KASSERT(! KSI_ONQ(p->p_ksi), ("SIGCHLD queue")); 225 SDT_PROBE(proc, kernel, dtor, return, p, size, arg, 0, 0); 226 } 227 228 /* 229 * Initialize type-stable parts of a proc (when newly created). 230 */ 231 static int 232 proc_init(void *mem, int size, int flags) 233 { 234 struct proc *p; 235 236 p = (struct proc *)mem; 237 SDT_PROBE(proc, kernel, init, entry, p, size, flags, 0, 0); 238 p->p_sched = (struct p_sched *)&p[1]; 239 bzero(&p->p_mtx, sizeof(struct mtx)); 240 mtx_init(&p->p_mtx, "process lock", NULL, MTX_DEF | MTX_DUPOK); 241 mtx_init(&p->p_slock, "process slock", NULL, MTX_SPIN | MTX_RECURSE); 242 cv_init(&p->p_pwait, "ppwait"); 243 cv_init(&p->p_dbgwait, "dbgwait"); 244 TAILQ_INIT(&p->p_threads); /* all threads in proc */ 245 EVENTHANDLER_INVOKE(process_init, p); 246 p->p_stats = pstats_alloc(); 247 SDT_PROBE(proc, kernel, init, return, p, size, flags, 0, 0); 248 return (0); 249 } 250 251 /* 252 * UMA should ensure that this function is never called. 253 * Freeing a proc structure would violate type stability. 254 */ 255 static void 256 proc_fini(void *mem, int size) 257 { 258 #ifdef notnow 259 struct proc *p; 260 261 p = (struct proc *)mem; 262 EVENTHANDLER_INVOKE(process_fini, p); 263 pstats_free(p->p_stats); 264 thread_free(FIRST_THREAD_IN_PROC(p)); 265 mtx_destroy(&p->p_mtx); 266 if (p->p_ksi != NULL) 267 ksiginfo_free(p->p_ksi); 268 #else 269 panic("proc reclaimed"); 270 #endif 271 } 272 273 /* 274 * Is p an inferior of the current process? 275 */ 276 int 277 inferior(p) 278 register struct proc *p; 279 { 280 281 sx_assert(&proctree_lock, SX_LOCKED); 282 for (; p != curproc; p = p->p_pptr) 283 if (p->p_pid == 0) 284 return (0); 285 return (1); 286 } 287 288 struct proc * 289 pfind_locked(pid_t pid) 290 { 291 struct proc *p; 292 293 sx_assert(&allproc_lock, SX_LOCKED); 294 LIST_FOREACH(p, PIDHASH(pid), p_hash) { 295 if (p->p_pid == pid) { 296 PROC_LOCK(p); 297 if (p->p_state == PRS_NEW) { 298 PROC_UNLOCK(p); 299 p = NULL; 300 } 301 break; 302 } 303 } 304 return (p); 305 } 306 307 /* 308 * Locate a process by number; return only "live" processes -- i.e., neither 309 * zombies nor newly born but incompletely initialized processes. By not 310 * returning processes in the PRS_NEW state, we allow callers to avoid 311 * testing for that condition to avoid dereferencing p_ucred, et al. 312 */ 313 struct proc * 314 pfind(pid_t pid) 315 { 316 struct proc *p; 317 318 sx_slock(&allproc_lock); 319 p = pfind_locked(pid); 320 sx_sunlock(&allproc_lock); 321 return (p); 322 } 323 324 static struct proc * 325 pfind_tid_locked(pid_t tid) 326 { 327 struct proc *p; 328 struct thread *td; 329 330 sx_assert(&allproc_lock, SX_LOCKED); 331 FOREACH_PROC_IN_SYSTEM(p) { 332 PROC_LOCK(p); 333 if (p->p_state == PRS_NEW) { 334 PROC_UNLOCK(p); 335 continue; 336 } 337 FOREACH_THREAD_IN_PROC(p, td) { 338 if (td->td_tid == tid) 339 goto found; 340 } 341 PROC_UNLOCK(p); 342 } 343 found: 344 return (p); 345 } 346 347 /* 348 * Locate a process group by number. 349 * The caller must hold proctree_lock. 350 */ 351 struct pgrp * 352 pgfind(pgid) 353 register pid_t pgid; 354 { 355 register struct pgrp *pgrp; 356 357 sx_assert(&proctree_lock, SX_LOCKED); 358 359 LIST_FOREACH(pgrp, PGRPHASH(pgid), pg_hash) { 360 if (pgrp->pg_id == pgid) { 361 PGRP_LOCK(pgrp); 362 return (pgrp); 363 } 364 } 365 return (NULL); 366 } 367 368 /* 369 * Locate process and do additional manipulations, depending on flags. 370 */ 371 int 372 pget(pid_t pid, int flags, struct proc **pp) 373 { 374 struct proc *p; 375 int error; 376 377 sx_slock(&allproc_lock); 378 if (pid <= PID_MAX) 379 p = pfind_locked(pid); 380 else if ((flags & PGET_NOTID) == 0) 381 p = pfind_tid_locked(pid); 382 else 383 p = NULL; 384 if (p == NULL && (flags & PGET_NOTWEXIT) == 0) 385 p = zpfind_locked(pid); 386 sx_sunlock(&allproc_lock); 387 if (p == NULL) 388 return (ESRCH); 389 if ((flags & PGET_CANSEE) != 0) { 390 error = p_cansee(curthread, p); 391 if (error != 0) 392 goto errout; 393 } 394 if ((flags & PGET_CANDEBUG) != 0) { 395 error = p_candebug(curthread, p); 396 if (error != 0) 397 goto errout; 398 } 399 if ((flags & PGET_ISCURRENT) != 0 && curproc != p) { 400 error = EPERM; 401 goto errout; 402 } 403 if ((flags & PGET_NOTWEXIT) != 0 && (p->p_flag & P_WEXIT) != 0) { 404 error = ESRCH; 405 goto errout; 406 } 407 if ((flags & PGET_NOTINEXEC) != 0 && (p->p_flag & P_INEXEC) != 0) { 408 /* 409 * XXXRW: Not clear ESRCH is the right error during proc 410 * execve(). 411 */ 412 error = ESRCH; 413 goto errout; 414 } 415 if ((flags & PGET_HOLD) != 0) { 416 _PHOLD(p); 417 PROC_UNLOCK(p); 418 } 419 *pp = p; 420 return (0); 421 errout: 422 PROC_UNLOCK(p); 423 return (error); 424 } 425 426 /* 427 * Create a new process group. 428 * pgid must be equal to the pid of p. 429 * Begin a new session if required. 430 */ 431 int 432 enterpgrp(p, pgid, pgrp, sess) 433 register struct proc *p; 434 pid_t pgid; 435 struct pgrp *pgrp; 436 struct session *sess; 437 { 438 439 sx_assert(&proctree_lock, SX_XLOCKED); 440 441 KASSERT(pgrp != NULL, ("enterpgrp: pgrp == NULL")); 442 KASSERT(p->p_pid == pgid, 443 ("enterpgrp: new pgrp and pid != pgid")); 444 KASSERT(pgfind(pgid) == NULL, 445 ("enterpgrp: pgrp with pgid exists")); 446 KASSERT(!SESS_LEADER(p), 447 ("enterpgrp: session leader attempted setpgrp")); 448 449 mtx_init(&pgrp->pg_mtx, "process group", NULL, MTX_DEF | MTX_DUPOK); 450 451 if (sess != NULL) { 452 /* 453 * new session 454 */ 455 mtx_init(&sess->s_mtx, "session", NULL, MTX_DEF); 456 PROC_LOCK(p); 457 p->p_flag &= ~P_CONTROLT; 458 PROC_UNLOCK(p); 459 PGRP_LOCK(pgrp); 460 sess->s_leader = p; 461 sess->s_sid = p->p_pid; 462 refcount_init(&sess->s_count, 1); 463 sess->s_ttyvp = NULL; 464 sess->s_ttydp = NULL; 465 sess->s_ttyp = NULL; 466 bcopy(p->p_session->s_login, sess->s_login, 467 sizeof(sess->s_login)); 468 pgrp->pg_session = sess; 469 KASSERT(p == curproc, 470 ("enterpgrp: mksession and p != curproc")); 471 } else { 472 pgrp->pg_session = p->p_session; 473 sess_hold(pgrp->pg_session); 474 PGRP_LOCK(pgrp); 475 } 476 pgrp->pg_id = pgid; 477 LIST_INIT(&pgrp->pg_members); 478 479 /* 480 * As we have an exclusive lock of proctree_lock, 481 * this should not deadlock. 482 */ 483 LIST_INSERT_HEAD(PGRPHASH(pgid), pgrp, pg_hash); 484 pgrp->pg_jobc = 0; 485 SLIST_INIT(&pgrp->pg_sigiolst); 486 PGRP_UNLOCK(pgrp); 487 488 doenterpgrp(p, pgrp); 489 490 return (0); 491 } 492 493 /* 494 * Move p to an existing process group 495 */ 496 int 497 enterthispgrp(p, pgrp) 498 register struct proc *p; 499 struct pgrp *pgrp; 500 { 501 502 sx_assert(&proctree_lock, SX_XLOCKED); 503 PROC_LOCK_ASSERT(p, MA_NOTOWNED); 504 PGRP_LOCK_ASSERT(pgrp, MA_NOTOWNED); 505 PGRP_LOCK_ASSERT(p->p_pgrp, MA_NOTOWNED); 506 SESS_LOCK_ASSERT(p->p_session, MA_NOTOWNED); 507 KASSERT(pgrp->pg_session == p->p_session, 508 ("%s: pgrp's session %p, p->p_session %p.\n", 509 __func__, 510 pgrp->pg_session, 511 p->p_session)); 512 KASSERT(pgrp != p->p_pgrp, 513 ("%s: p belongs to pgrp.", __func__)); 514 515 doenterpgrp(p, pgrp); 516 517 return (0); 518 } 519 520 /* 521 * Move p to a process group 522 */ 523 static void 524 doenterpgrp(p, pgrp) 525 struct proc *p; 526 struct pgrp *pgrp; 527 { 528 struct pgrp *savepgrp; 529 530 sx_assert(&proctree_lock, SX_XLOCKED); 531 PROC_LOCK_ASSERT(p, MA_NOTOWNED); 532 PGRP_LOCK_ASSERT(pgrp, MA_NOTOWNED); 533 PGRP_LOCK_ASSERT(p->p_pgrp, MA_NOTOWNED); 534 SESS_LOCK_ASSERT(p->p_session, MA_NOTOWNED); 535 536 savepgrp = p->p_pgrp; 537 538 /* 539 * Adjust eligibility of affected pgrps to participate in job control. 540 * Increment eligibility counts before decrementing, otherwise we 541 * could reach 0 spuriously during the first call. 542 */ 543 fixjobc(p, pgrp, 1); 544 fixjobc(p, p->p_pgrp, 0); 545 546 PGRP_LOCK(pgrp); 547 PGRP_LOCK(savepgrp); 548 PROC_LOCK(p); 549 LIST_REMOVE(p, p_pglist); 550 p->p_pgrp = pgrp; 551 PROC_UNLOCK(p); 552 LIST_INSERT_HEAD(&pgrp->pg_members, p, p_pglist); 553 PGRP_UNLOCK(savepgrp); 554 PGRP_UNLOCK(pgrp); 555 if (LIST_EMPTY(&savepgrp->pg_members)) 556 pgdelete(savepgrp); 557 } 558 559 /* 560 * remove process from process group 561 */ 562 int 563 leavepgrp(p) 564 register struct proc *p; 565 { 566 struct pgrp *savepgrp; 567 568 sx_assert(&proctree_lock, SX_XLOCKED); 569 savepgrp = p->p_pgrp; 570 PGRP_LOCK(savepgrp); 571 PROC_LOCK(p); 572 LIST_REMOVE(p, p_pglist); 573 p->p_pgrp = NULL; 574 PROC_UNLOCK(p); 575 PGRP_UNLOCK(savepgrp); 576 if (LIST_EMPTY(&savepgrp->pg_members)) 577 pgdelete(savepgrp); 578 return (0); 579 } 580 581 /* 582 * delete a process group 583 */ 584 static void 585 pgdelete(pgrp) 586 register struct pgrp *pgrp; 587 { 588 struct session *savesess; 589 struct tty *tp; 590 591 sx_assert(&proctree_lock, SX_XLOCKED); 592 PGRP_LOCK_ASSERT(pgrp, MA_NOTOWNED); 593 SESS_LOCK_ASSERT(pgrp->pg_session, MA_NOTOWNED); 594 595 /* 596 * Reset any sigio structures pointing to us as a result of 597 * F_SETOWN with our pgid. 598 */ 599 funsetownlst(&pgrp->pg_sigiolst); 600 601 PGRP_LOCK(pgrp); 602 tp = pgrp->pg_session->s_ttyp; 603 LIST_REMOVE(pgrp, pg_hash); 604 savesess = pgrp->pg_session; 605 PGRP_UNLOCK(pgrp); 606 607 /* Remove the reference to the pgrp before deallocating it. */ 608 if (tp != NULL) { 609 tty_lock(tp); 610 tty_rel_pgrp(tp, pgrp); 611 } 612 613 mtx_destroy(&pgrp->pg_mtx); 614 free(pgrp, M_PGRP); 615 sess_release(savesess); 616 } 617 618 static void 619 pgadjustjobc(pgrp, entering) 620 struct pgrp *pgrp; 621 int entering; 622 { 623 624 PGRP_LOCK(pgrp); 625 if (entering) 626 pgrp->pg_jobc++; 627 else { 628 --pgrp->pg_jobc; 629 if (pgrp->pg_jobc == 0) 630 orphanpg(pgrp); 631 } 632 PGRP_UNLOCK(pgrp); 633 } 634 635 /* 636 * Adjust pgrp jobc counters when specified process changes process group. 637 * We count the number of processes in each process group that "qualify" 638 * the group for terminal job control (those with a parent in a different 639 * process group of the same session). If that count reaches zero, the 640 * process group becomes orphaned. Check both the specified process' 641 * process group and that of its children. 642 * entering == 0 => p is leaving specified group. 643 * entering == 1 => p is entering specified group. 644 */ 645 void 646 fixjobc(p, pgrp, entering) 647 register struct proc *p; 648 register struct pgrp *pgrp; 649 int entering; 650 { 651 register struct pgrp *hispgrp; 652 register struct session *mysession; 653 654 sx_assert(&proctree_lock, SX_LOCKED); 655 PROC_LOCK_ASSERT(p, MA_NOTOWNED); 656 PGRP_LOCK_ASSERT(pgrp, MA_NOTOWNED); 657 SESS_LOCK_ASSERT(pgrp->pg_session, MA_NOTOWNED); 658 659 /* 660 * Check p's parent to see whether p qualifies its own process 661 * group; if so, adjust count for p's process group. 662 */ 663 mysession = pgrp->pg_session; 664 if ((hispgrp = p->p_pptr->p_pgrp) != pgrp && 665 hispgrp->pg_session == mysession) 666 pgadjustjobc(pgrp, entering); 667 668 /* 669 * Check this process' children to see whether they qualify 670 * their process groups; if so, adjust counts for children's 671 * process groups. 672 */ 673 LIST_FOREACH(p, &p->p_children, p_sibling) { 674 hispgrp = p->p_pgrp; 675 if (hispgrp == pgrp || 676 hispgrp->pg_session != mysession) 677 continue; 678 PROC_LOCK(p); 679 if (p->p_state == PRS_ZOMBIE) { 680 PROC_UNLOCK(p); 681 continue; 682 } 683 PROC_UNLOCK(p); 684 pgadjustjobc(hispgrp, entering); 685 } 686 } 687 688 /* 689 * A process group has become orphaned; 690 * if there are any stopped processes in the group, 691 * hang-up all process in that group. 692 */ 693 static void 694 orphanpg(pg) 695 struct pgrp *pg; 696 { 697 register struct proc *p; 698 699 PGRP_LOCK_ASSERT(pg, MA_OWNED); 700 701 LIST_FOREACH(p, &pg->pg_members, p_pglist) { 702 PROC_LOCK(p); 703 if (P_SHOULDSTOP(p)) { 704 PROC_UNLOCK(p); 705 LIST_FOREACH(p, &pg->pg_members, p_pglist) { 706 PROC_LOCK(p); 707 kern_psignal(p, SIGHUP); 708 kern_psignal(p, SIGCONT); 709 PROC_UNLOCK(p); 710 } 711 return; 712 } 713 PROC_UNLOCK(p); 714 } 715 } 716 717 void 718 sess_hold(struct session *s) 719 { 720 721 refcount_acquire(&s->s_count); 722 } 723 724 void 725 sess_release(struct session *s) 726 { 727 728 if (refcount_release(&s->s_count)) { 729 if (s->s_ttyp != NULL) { 730 tty_lock(s->s_ttyp); 731 tty_rel_sess(s->s_ttyp, s); 732 } 733 mtx_destroy(&s->s_mtx); 734 free(s, M_SESSION); 735 } 736 } 737 738 #ifdef DDB 739 740 DB_SHOW_COMMAND(pgrpdump, pgrpdump) 741 { 742 register struct pgrp *pgrp; 743 register struct proc *p; 744 register int i; 745 746 for (i = 0; i <= pgrphash; i++) { 747 if (!LIST_EMPTY(&pgrphashtbl[i])) { 748 printf("\tindx %d\n", i); 749 LIST_FOREACH(pgrp, &pgrphashtbl[i], pg_hash) { 750 printf( 751 "\tpgrp %p, pgid %ld, sess %p, sesscnt %d, mem %p\n", 752 (void *)pgrp, (long)pgrp->pg_id, 753 (void *)pgrp->pg_session, 754 pgrp->pg_session->s_count, 755 (void *)LIST_FIRST(&pgrp->pg_members)); 756 LIST_FOREACH(p, &pgrp->pg_members, p_pglist) { 757 printf("\t\tpid %ld addr %p pgrp %p\n", 758 (long)p->p_pid, (void *)p, 759 (void *)p->p_pgrp); 760 } 761 } 762 } 763 } 764 } 765 #endif /* DDB */ 766 767 /* 768 * Calculate the kinfo_proc members which contain process-wide 769 * informations. 770 * Must be called with the target process locked. 771 */ 772 static void 773 fill_kinfo_aggregate(struct proc *p, struct kinfo_proc *kp) 774 { 775 struct thread *td; 776 777 PROC_LOCK_ASSERT(p, MA_OWNED); 778 779 kp->ki_estcpu = 0; 780 kp->ki_pctcpu = 0; 781 FOREACH_THREAD_IN_PROC(p, td) { 782 thread_lock(td); 783 kp->ki_pctcpu += sched_pctcpu(td); 784 kp->ki_estcpu += td->td_estcpu; 785 thread_unlock(td); 786 } 787 } 788 789 /* 790 * Clear kinfo_proc and fill in any information that is common 791 * to all threads in the process. 792 * Must be called with the target process locked. 793 */ 794 static void 795 fill_kinfo_proc_only(struct proc *p, struct kinfo_proc *kp) 796 { 797 struct thread *td0; 798 struct tty *tp; 799 struct session *sp; 800 struct ucred *cred; 801 struct sigacts *ps; 802 803 PROC_LOCK_ASSERT(p, MA_OWNED); 804 bzero(kp, sizeof(*kp)); 805 806 kp->ki_structsize = sizeof(*kp); 807 kp->ki_paddr = p; 808 kp->ki_addr =/* p->p_addr; */0; /* XXX */ 809 kp->ki_args = p->p_args; 810 kp->ki_textvp = p->p_textvp; 811 #ifdef KTRACE 812 kp->ki_tracep = p->p_tracevp; 813 kp->ki_traceflag = p->p_traceflag; 814 #endif 815 kp->ki_fd = p->p_fd; 816 kp->ki_vmspace = p->p_vmspace; 817 kp->ki_flag = p->p_flag; 818 cred = p->p_ucred; 819 if (cred) { 820 kp->ki_uid = cred->cr_uid; 821 kp->ki_ruid = cred->cr_ruid; 822 kp->ki_svuid = cred->cr_svuid; 823 kp->ki_cr_flags = 0; 824 if (cred->cr_flags & CRED_FLAG_CAPMODE) 825 kp->ki_cr_flags |= KI_CRF_CAPABILITY_MODE; 826 /* XXX bde doesn't like KI_NGROUPS */ 827 if (cred->cr_ngroups > KI_NGROUPS) { 828 kp->ki_ngroups = KI_NGROUPS; 829 kp->ki_cr_flags |= KI_CRF_GRP_OVERFLOW; 830 } else 831 kp->ki_ngroups = cred->cr_ngroups; 832 bcopy(cred->cr_groups, kp->ki_groups, 833 kp->ki_ngroups * sizeof(gid_t)); 834 kp->ki_rgid = cred->cr_rgid; 835 kp->ki_svgid = cred->cr_svgid; 836 /* If jailed(cred), emulate the old P_JAILED flag. */ 837 if (jailed(cred)) { 838 kp->ki_flag |= P_JAILED; 839 /* If inside the jail, use 0 as a jail ID. */ 840 if (cred->cr_prison != curthread->td_ucred->cr_prison) 841 kp->ki_jid = cred->cr_prison->pr_id; 842 } 843 strlcpy(kp->ki_loginclass, cred->cr_loginclass->lc_name, 844 sizeof(kp->ki_loginclass)); 845 } 846 ps = p->p_sigacts; 847 if (ps) { 848 mtx_lock(&ps->ps_mtx); 849 kp->ki_sigignore = ps->ps_sigignore; 850 kp->ki_sigcatch = ps->ps_sigcatch; 851 mtx_unlock(&ps->ps_mtx); 852 } 853 if (p->p_state != PRS_NEW && 854 p->p_state != PRS_ZOMBIE && 855 p->p_vmspace != NULL) { 856 struct vmspace *vm = p->p_vmspace; 857 858 kp->ki_size = vm->vm_map.size; 859 kp->ki_rssize = vmspace_resident_count(vm); /*XXX*/ 860 FOREACH_THREAD_IN_PROC(p, td0) { 861 if (!TD_IS_SWAPPED(td0)) 862 kp->ki_rssize += td0->td_kstack_pages; 863 } 864 kp->ki_swrss = vm->vm_swrss; 865 kp->ki_tsize = vm->vm_tsize; 866 kp->ki_dsize = vm->vm_dsize; 867 kp->ki_ssize = vm->vm_ssize; 868 } else if (p->p_state == PRS_ZOMBIE) 869 kp->ki_stat = SZOMB; 870 if (kp->ki_flag & P_INMEM) 871 kp->ki_sflag = PS_INMEM; 872 else 873 kp->ki_sflag = 0; 874 /* Calculate legacy swtime as seconds since 'swtick'. */ 875 kp->ki_swtime = (ticks - p->p_swtick) / hz; 876 kp->ki_pid = p->p_pid; 877 kp->ki_nice = p->p_nice; 878 kp->ki_start = p->p_stats->p_start; 879 timevaladd(&kp->ki_start, &boottime); 880 PROC_SLOCK(p); 881 rufetch(p, &kp->ki_rusage); 882 kp->ki_runtime = cputick2usec(p->p_rux.rux_runtime); 883 calcru(p, &kp->ki_rusage.ru_utime, &kp->ki_rusage.ru_stime); 884 PROC_SUNLOCK(p); 885 calccru(p, &kp->ki_childutime, &kp->ki_childstime); 886 /* Some callers want child times in a single value. */ 887 kp->ki_childtime = kp->ki_childstime; 888 timevaladd(&kp->ki_childtime, &kp->ki_childutime); 889 890 FOREACH_THREAD_IN_PROC(p, td0) 891 kp->ki_cow += td0->td_cow; 892 893 tp = NULL; 894 if (p->p_pgrp) { 895 kp->ki_pgid = p->p_pgrp->pg_id; 896 kp->ki_jobc = p->p_pgrp->pg_jobc; 897 sp = p->p_pgrp->pg_session; 898 899 if (sp != NULL) { 900 kp->ki_sid = sp->s_sid; 901 SESS_LOCK(sp); 902 strlcpy(kp->ki_login, sp->s_login, 903 sizeof(kp->ki_login)); 904 if (sp->s_ttyvp) 905 kp->ki_kiflag |= KI_CTTY; 906 if (SESS_LEADER(p)) 907 kp->ki_kiflag |= KI_SLEADER; 908 /* XXX proctree_lock */ 909 tp = sp->s_ttyp; 910 SESS_UNLOCK(sp); 911 } 912 } 913 if ((p->p_flag & P_CONTROLT) && tp != NULL) { 914 kp->ki_tdev = tty_udev(tp); 915 kp->ki_tpgid = tp->t_pgrp ? tp->t_pgrp->pg_id : NO_PID; 916 if (tp->t_session) 917 kp->ki_tsid = tp->t_session->s_sid; 918 } else 919 kp->ki_tdev = NODEV; 920 if (p->p_comm[0] != '\0') 921 strlcpy(kp->ki_comm, p->p_comm, sizeof(kp->ki_comm)); 922 if (p->p_sysent && p->p_sysent->sv_name != NULL && 923 p->p_sysent->sv_name[0] != '\0') 924 strlcpy(kp->ki_emul, p->p_sysent->sv_name, sizeof(kp->ki_emul)); 925 kp->ki_siglist = p->p_siglist; 926 kp->ki_xstat = p->p_xstat; 927 kp->ki_acflag = p->p_acflag; 928 kp->ki_lock = p->p_lock; 929 if (p->p_pptr) 930 kp->ki_ppid = p->p_pptr->p_pid; 931 } 932 933 /* 934 * Fill in information that is thread specific. Must be called with 935 * target process locked. If 'preferthread' is set, overwrite certain 936 * process-related fields that are maintained for both threads and 937 * processes. 938 */ 939 static void 940 fill_kinfo_thread(struct thread *td, struct kinfo_proc *kp, int preferthread) 941 { 942 struct proc *p; 943 944 p = td->td_proc; 945 kp->ki_tdaddr = td; 946 PROC_LOCK_ASSERT(p, MA_OWNED); 947 948 if (preferthread) 949 PROC_SLOCK(p); 950 thread_lock(td); 951 if (td->td_wmesg != NULL) 952 strlcpy(kp->ki_wmesg, td->td_wmesg, sizeof(kp->ki_wmesg)); 953 else 954 bzero(kp->ki_wmesg, sizeof(kp->ki_wmesg)); 955 strlcpy(kp->ki_tdname, td->td_name, sizeof(kp->ki_tdname)); 956 if (TD_ON_LOCK(td)) { 957 kp->ki_kiflag |= KI_LOCKBLOCK; 958 strlcpy(kp->ki_lockname, td->td_lockname, 959 sizeof(kp->ki_lockname)); 960 } else { 961 kp->ki_kiflag &= ~KI_LOCKBLOCK; 962 bzero(kp->ki_lockname, sizeof(kp->ki_lockname)); 963 } 964 965 if (p->p_state == PRS_NORMAL) { /* approximate. */ 966 if (TD_ON_RUNQ(td) || 967 TD_CAN_RUN(td) || 968 TD_IS_RUNNING(td)) { 969 kp->ki_stat = SRUN; 970 } else if (P_SHOULDSTOP(p)) { 971 kp->ki_stat = SSTOP; 972 } else if (TD_IS_SLEEPING(td)) { 973 kp->ki_stat = SSLEEP; 974 } else if (TD_ON_LOCK(td)) { 975 kp->ki_stat = SLOCK; 976 } else { 977 kp->ki_stat = SWAIT; 978 } 979 } else if (p->p_state == PRS_ZOMBIE) { 980 kp->ki_stat = SZOMB; 981 } else { 982 kp->ki_stat = SIDL; 983 } 984 985 /* Things in the thread */ 986 kp->ki_wchan = td->td_wchan; 987 kp->ki_pri.pri_level = td->td_priority; 988 kp->ki_pri.pri_native = td->td_base_pri; 989 kp->ki_lastcpu = td->td_lastcpu; 990 kp->ki_oncpu = td->td_oncpu; 991 kp->ki_tdflags = td->td_flags; 992 kp->ki_tid = td->td_tid; 993 kp->ki_numthreads = p->p_numthreads; 994 kp->ki_pcb = td->td_pcb; 995 kp->ki_kstack = (void *)td->td_kstack; 996 kp->ki_slptime = (ticks - td->td_slptick) / hz; 997 kp->ki_pri.pri_class = td->td_pri_class; 998 kp->ki_pri.pri_user = td->td_user_pri; 999 1000 if (preferthread) { 1001 rufetchtd(td, &kp->ki_rusage); 1002 kp->ki_runtime = cputick2usec(td->td_rux.rux_runtime); 1003 kp->ki_pctcpu = sched_pctcpu(td); 1004 kp->ki_estcpu = td->td_estcpu; 1005 kp->ki_cow = td->td_cow; 1006 } 1007 1008 /* We can't get this anymore but ps etc never used it anyway. */ 1009 kp->ki_rqindex = 0; 1010 1011 if (preferthread) 1012 kp->ki_siglist = td->td_siglist; 1013 kp->ki_sigmask = td->td_sigmask; 1014 thread_unlock(td); 1015 if (preferthread) 1016 PROC_SUNLOCK(p); 1017 } 1018 1019 /* 1020 * Fill in a kinfo_proc structure for the specified process. 1021 * Must be called with the target process locked. 1022 */ 1023 void 1024 fill_kinfo_proc(struct proc *p, struct kinfo_proc *kp) 1025 { 1026 1027 MPASS(FIRST_THREAD_IN_PROC(p) != NULL); 1028 1029 fill_kinfo_proc_only(p, kp); 1030 fill_kinfo_thread(FIRST_THREAD_IN_PROC(p), kp, 0); 1031 fill_kinfo_aggregate(p, kp); 1032 } 1033 1034 struct pstats * 1035 pstats_alloc(void) 1036 { 1037 1038 return (malloc(sizeof(struct pstats), M_SUBPROC, M_ZERO|M_WAITOK)); 1039 } 1040 1041 /* 1042 * Copy parts of p_stats; zero the rest of p_stats (statistics). 1043 */ 1044 void 1045 pstats_fork(struct pstats *src, struct pstats *dst) 1046 { 1047 1048 bzero(&dst->pstat_startzero, 1049 __rangeof(struct pstats, pstat_startzero, pstat_endzero)); 1050 bcopy(&src->pstat_startcopy, &dst->pstat_startcopy, 1051 __rangeof(struct pstats, pstat_startcopy, pstat_endcopy)); 1052 } 1053 1054 void 1055 pstats_free(struct pstats *ps) 1056 { 1057 1058 free(ps, M_SUBPROC); 1059 } 1060 1061 static struct proc * 1062 zpfind_locked(pid_t pid) 1063 { 1064 struct proc *p; 1065 1066 sx_assert(&allproc_lock, SX_LOCKED); 1067 LIST_FOREACH(p, &zombproc, p_list) { 1068 if (p->p_pid == pid) { 1069 PROC_LOCK(p); 1070 break; 1071 } 1072 } 1073 return (p); 1074 } 1075 1076 /* 1077 * Locate a zombie process by number 1078 */ 1079 struct proc * 1080 zpfind(pid_t pid) 1081 { 1082 struct proc *p; 1083 1084 sx_slock(&allproc_lock); 1085 p = zpfind_locked(pid); 1086 sx_sunlock(&allproc_lock); 1087 return (p); 1088 } 1089 1090 #define KERN_PROC_ZOMBMASK 0x3 1091 #define KERN_PROC_NOTHREADS 0x4 1092 1093 #ifdef COMPAT_FREEBSD32 1094 1095 /* 1096 * This function is typically used to copy out the kernel address, so 1097 * it can be replaced by assignment of zero. 1098 */ 1099 static inline uint32_t 1100 ptr32_trim(void *ptr) 1101 { 1102 uintptr_t uptr; 1103 1104 uptr = (uintptr_t)ptr; 1105 return ((uptr > UINT_MAX) ? 0 : uptr); 1106 } 1107 1108 #define PTRTRIM_CP(src,dst,fld) \ 1109 do { (dst).fld = ptr32_trim((src).fld); } while (0) 1110 1111 static void 1112 freebsd32_kinfo_proc_out(const struct kinfo_proc *ki, struct kinfo_proc32 *ki32) 1113 { 1114 int i; 1115 1116 bzero(ki32, sizeof(struct kinfo_proc32)); 1117 ki32->ki_structsize = sizeof(struct kinfo_proc32); 1118 CP(*ki, *ki32, ki_layout); 1119 PTRTRIM_CP(*ki, *ki32, ki_args); 1120 PTRTRIM_CP(*ki, *ki32, ki_paddr); 1121 PTRTRIM_CP(*ki, *ki32, ki_addr); 1122 PTRTRIM_CP(*ki, *ki32, ki_tracep); 1123 PTRTRIM_CP(*ki, *ki32, ki_textvp); 1124 PTRTRIM_CP(*ki, *ki32, ki_fd); 1125 PTRTRIM_CP(*ki, *ki32, ki_vmspace); 1126 PTRTRIM_CP(*ki, *ki32, ki_wchan); 1127 CP(*ki, *ki32, ki_pid); 1128 CP(*ki, *ki32, ki_ppid); 1129 CP(*ki, *ki32, ki_pgid); 1130 CP(*ki, *ki32, ki_tpgid); 1131 CP(*ki, *ki32, ki_sid); 1132 CP(*ki, *ki32, ki_tsid); 1133 CP(*ki, *ki32, ki_jobc); 1134 CP(*ki, *ki32, ki_tdev); 1135 CP(*ki, *ki32, ki_siglist); 1136 CP(*ki, *ki32, ki_sigmask); 1137 CP(*ki, *ki32, ki_sigignore); 1138 CP(*ki, *ki32, ki_sigcatch); 1139 CP(*ki, *ki32, ki_uid); 1140 CP(*ki, *ki32, ki_ruid); 1141 CP(*ki, *ki32, ki_svuid); 1142 CP(*ki, *ki32, ki_rgid); 1143 CP(*ki, *ki32, ki_svgid); 1144 CP(*ki, *ki32, ki_ngroups); 1145 for (i = 0; i < KI_NGROUPS; i++) 1146 CP(*ki, *ki32, ki_groups[i]); 1147 CP(*ki, *ki32, ki_size); 1148 CP(*ki, *ki32, ki_rssize); 1149 CP(*ki, *ki32, ki_swrss); 1150 CP(*ki, *ki32, ki_tsize); 1151 CP(*ki, *ki32, ki_dsize); 1152 CP(*ki, *ki32, ki_ssize); 1153 CP(*ki, *ki32, ki_xstat); 1154 CP(*ki, *ki32, ki_acflag); 1155 CP(*ki, *ki32, ki_pctcpu); 1156 CP(*ki, *ki32, ki_estcpu); 1157 CP(*ki, *ki32, ki_slptime); 1158 CP(*ki, *ki32, ki_swtime); 1159 CP(*ki, *ki32, ki_cow); 1160 CP(*ki, *ki32, ki_runtime); 1161 TV_CP(*ki, *ki32, ki_start); 1162 TV_CP(*ki, *ki32, ki_childtime); 1163 CP(*ki, *ki32, ki_flag); 1164 CP(*ki, *ki32, ki_kiflag); 1165 CP(*ki, *ki32, ki_traceflag); 1166 CP(*ki, *ki32, ki_stat); 1167 CP(*ki, *ki32, ki_nice); 1168 CP(*ki, *ki32, ki_lock); 1169 CP(*ki, *ki32, ki_rqindex); 1170 CP(*ki, *ki32, ki_oncpu); 1171 CP(*ki, *ki32, ki_lastcpu); 1172 bcopy(ki->ki_tdname, ki32->ki_tdname, TDNAMLEN + 1); 1173 bcopy(ki->ki_wmesg, ki32->ki_wmesg, WMESGLEN + 1); 1174 bcopy(ki->ki_login, ki32->ki_login, LOGNAMELEN + 1); 1175 bcopy(ki->ki_lockname, ki32->ki_lockname, LOCKNAMELEN + 1); 1176 bcopy(ki->ki_comm, ki32->ki_comm, COMMLEN + 1); 1177 bcopy(ki->ki_emul, ki32->ki_emul, KI_EMULNAMELEN + 1); 1178 bcopy(ki->ki_loginclass, ki32->ki_loginclass, LOGINCLASSLEN + 1); 1179 CP(*ki, *ki32, ki_cr_flags); 1180 CP(*ki, *ki32, ki_jid); 1181 CP(*ki, *ki32, ki_numthreads); 1182 CP(*ki, *ki32, ki_tid); 1183 CP(*ki, *ki32, ki_pri); 1184 freebsd32_rusage_out(&ki->ki_rusage, &ki32->ki_rusage); 1185 freebsd32_rusage_out(&ki->ki_rusage_ch, &ki32->ki_rusage_ch); 1186 PTRTRIM_CP(*ki, *ki32, ki_pcb); 1187 PTRTRIM_CP(*ki, *ki32, ki_kstack); 1188 PTRTRIM_CP(*ki, *ki32, ki_udata); 1189 CP(*ki, *ki32, ki_sflag); 1190 CP(*ki, *ki32, ki_tdflags); 1191 } 1192 1193 static int 1194 sysctl_out_proc_copyout(struct kinfo_proc *ki, struct sysctl_req *req) 1195 { 1196 struct kinfo_proc32 ki32; 1197 int error; 1198 1199 if (req->flags & SCTL_MASK32) { 1200 freebsd32_kinfo_proc_out(ki, &ki32); 1201 error = SYSCTL_OUT(req, &ki32, sizeof(struct kinfo_proc32)); 1202 } else 1203 error = SYSCTL_OUT(req, ki, sizeof(struct kinfo_proc)); 1204 return (error); 1205 } 1206 #else 1207 static int 1208 sysctl_out_proc_copyout(struct kinfo_proc *ki, struct sysctl_req *req) 1209 { 1210 1211 return (SYSCTL_OUT(req, ki, sizeof(struct kinfo_proc))); 1212 } 1213 #endif 1214 1215 /* 1216 * Must be called with the process locked and will return with it unlocked. 1217 */ 1218 static int 1219 sysctl_out_proc(struct proc *p, struct sysctl_req *req, int flags) 1220 { 1221 struct thread *td; 1222 struct kinfo_proc kinfo_proc; 1223 int error = 0; 1224 struct proc *np; 1225 pid_t pid = p->p_pid; 1226 1227 PROC_LOCK_ASSERT(p, MA_OWNED); 1228 MPASS(FIRST_THREAD_IN_PROC(p) != NULL); 1229 1230 fill_kinfo_proc(p, &kinfo_proc); 1231 if (flags & KERN_PROC_NOTHREADS) 1232 error = sysctl_out_proc_copyout(&kinfo_proc, req); 1233 else { 1234 FOREACH_THREAD_IN_PROC(p, td) { 1235 fill_kinfo_thread(td, &kinfo_proc, 1); 1236 error = sysctl_out_proc_copyout(&kinfo_proc, req); 1237 if (error) 1238 break; 1239 } 1240 } 1241 PROC_UNLOCK(p); 1242 if (error) 1243 return (error); 1244 if (flags & KERN_PROC_ZOMBMASK) 1245 np = zpfind(pid); 1246 else { 1247 if (pid == 0) 1248 return (0); 1249 np = pfind(pid); 1250 } 1251 if (np == NULL) 1252 return (ESRCH); 1253 if (np != p) { 1254 PROC_UNLOCK(np); 1255 return (ESRCH); 1256 } 1257 PROC_UNLOCK(np); 1258 return (0); 1259 } 1260 1261 static int 1262 sysctl_kern_proc(SYSCTL_HANDLER_ARGS) 1263 { 1264 int *name = (int *)arg1; 1265 u_int namelen = arg2; 1266 struct proc *p; 1267 int flags, doingzomb, oid_number; 1268 int error = 0; 1269 1270 oid_number = oidp->oid_number; 1271 if (oid_number != KERN_PROC_ALL && 1272 (oid_number & KERN_PROC_INC_THREAD) == 0) 1273 flags = KERN_PROC_NOTHREADS; 1274 else { 1275 flags = 0; 1276 oid_number &= ~KERN_PROC_INC_THREAD; 1277 } 1278 if (oid_number == KERN_PROC_PID) { 1279 if (namelen != 1) 1280 return (EINVAL); 1281 error = sysctl_wire_old_buffer(req, 0); 1282 if (error) 1283 return (error); 1284 error = pget((pid_t)name[0], PGET_CANSEE, &p); 1285 if (error != 0) 1286 return (error); 1287 error = sysctl_out_proc(p, req, flags); 1288 return (error); 1289 } 1290 1291 switch (oid_number) { 1292 case KERN_PROC_ALL: 1293 if (namelen != 0) 1294 return (EINVAL); 1295 break; 1296 case KERN_PROC_PROC: 1297 if (namelen != 0 && namelen != 1) 1298 return (EINVAL); 1299 break; 1300 default: 1301 if (namelen != 1) 1302 return (EINVAL); 1303 break; 1304 } 1305 1306 if (!req->oldptr) { 1307 /* overestimate by 5 procs */ 1308 error = SYSCTL_OUT(req, 0, sizeof (struct kinfo_proc) * 5); 1309 if (error) 1310 return (error); 1311 } 1312 error = sysctl_wire_old_buffer(req, 0); 1313 if (error != 0) 1314 return (error); 1315 sx_slock(&allproc_lock); 1316 for (doingzomb=0 ; doingzomb < 2 ; doingzomb++) { 1317 if (!doingzomb) 1318 p = LIST_FIRST(&allproc); 1319 else 1320 p = LIST_FIRST(&zombproc); 1321 for (; p != 0; p = LIST_NEXT(p, p_list)) { 1322 /* 1323 * Skip embryonic processes. 1324 */ 1325 PROC_LOCK(p); 1326 if (p->p_state == PRS_NEW) { 1327 PROC_UNLOCK(p); 1328 continue; 1329 } 1330 KASSERT(p->p_ucred != NULL, 1331 ("process credential is NULL for non-NEW proc")); 1332 /* 1333 * Show a user only appropriate processes. 1334 */ 1335 if (p_cansee(curthread, p)) { 1336 PROC_UNLOCK(p); 1337 continue; 1338 } 1339 /* 1340 * TODO - make more efficient (see notes below). 1341 * do by session. 1342 */ 1343 switch (oid_number) { 1344 1345 case KERN_PROC_GID: 1346 if (p->p_ucred->cr_gid != (gid_t)name[0]) { 1347 PROC_UNLOCK(p); 1348 continue; 1349 } 1350 break; 1351 1352 case KERN_PROC_PGRP: 1353 /* could do this by traversing pgrp */ 1354 if (p->p_pgrp == NULL || 1355 p->p_pgrp->pg_id != (pid_t)name[0]) { 1356 PROC_UNLOCK(p); 1357 continue; 1358 } 1359 break; 1360 1361 case KERN_PROC_RGID: 1362 if (p->p_ucred->cr_rgid != (gid_t)name[0]) { 1363 PROC_UNLOCK(p); 1364 continue; 1365 } 1366 break; 1367 1368 case KERN_PROC_SESSION: 1369 if (p->p_session == NULL || 1370 p->p_session->s_sid != (pid_t)name[0]) { 1371 PROC_UNLOCK(p); 1372 continue; 1373 } 1374 break; 1375 1376 case KERN_PROC_TTY: 1377 if ((p->p_flag & P_CONTROLT) == 0 || 1378 p->p_session == NULL) { 1379 PROC_UNLOCK(p); 1380 continue; 1381 } 1382 /* XXX proctree_lock */ 1383 SESS_LOCK(p->p_session); 1384 if (p->p_session->s_ttyp == NULL || 1385 tty_udev(p->p_session->s_ttyp) != 1386 (dev_t)name[0]) { 1387 SESS_UNLOCK(p->p_session); 1388 PROC_UNLOCK(p); 1389 continue; 1390 } 1391 SESS_UNLOCK(p->p_session); 1392 break; 1393 1394 case KERN_PROC_UID: 1395 if (p->p_ucred->cr_uid != (uid_t)name[0]) { 1396 PROC_UNLOCK(p); 1397 continue; 1398 } 1399 break; 1400 1401 case KERN_PROC_RUID: 1402 if (p->p_ucred->cr_ruid != (uid_t)name[0]) { 1403 PROC_UNLOCK(p); 1404 continue; 1405 } 1406 break; 1407 1408 case KERN_PROC_PROC: 1409 break; 1410 1411 default: 1412 break; 1413 1414 } 1415 1416 error = sysctl_out_proc(p, req, flags | doingzomb); 1417 if (error) { 1418 sx_sunlock(&allproc_lock); 1419 return (error); 1420 } 1421 } 1422 } 1423 sx_sunlock(&allproc_lock); 1424 return (0); 1425 } 1426 1427 struct pargs * 1428 pargs_alloc(int len) 1429 { 1430 struct pargs *pa; 1431 1432 pa = malloc(sizeof(struct pargs) + len, M_PARGS, 1433 M_WAITOK); 1434 refcount_init(&pa->ar_ref, 1); 1435 pa->ar_length = len; 1436 return (pa); 1437 } 1438 1439 static void 1440 pargs_free(struct pargs *pa) 1441 { 1442 1443 free(pa, M_PARGS); 1444 } 1445 1446 void 1447 pargs_hold(struct pargs *pa) 1448 { 1449 1450 if (pa == NULL) 1451 return; 1452 refcount_acquire(&pa->ar_ref); 1453 } 1454 1455 void 1456 pargs_drop(struct pargs *pa) 1457 { 1458 1459 if (pa == NULL) 1460 return; 1461 if (refcount_release(&pa->ar_ref)) 1462 pargs_free(pa); 1463 } 1464 1465 static int 1466 proc_read_mem(struct thread *td, struct proc *p, vm_offset_t offset, void* buf, 1467 size_t len) 1468 { 1469 struct iovec iov; 1470 struct uio uio; 1471 1472 iov.iov_base = (caddr_t)buf; 1473 iov.iov_len = len; 1474 uio.uio_iov = &iov; 1475 uio.uio_iovcnt = 1; 1476 uio.uio_offset = offset; 1477 uio.uio_resid = (ssize_t)len; 1478 uio.uio_segflg = UIO_SYSSPACE; 1479 uio.uio_rw = UIO_READ; 1480 uio.uio_td = td; 1481 1482 return (proc_rwmem(p, &uio)); 1483 } 1484 1485 static int 1486 proc_read_string(struct thread *td, struct proc *p, const char *sptr, char *buf, 1487 size_t len) 1488 { 1489 size_t i; 1490 int error; 1491 1492 error = proc_read_mem(td, p, (vm_offset_t)sptr, buf, len); 1493 /* 1494 * Reading the chunk may validly return EFAULT if the string is shorter 1495 * than the chunk and is aligned at the end of the page, assuming the 1496 * next page is not mapped. So if EFAULT is returned do a fallback to 1497 * one byte read loop. 1498 */ 1499 if (error == EFAULT) { 1500 for (i = 0; i < len; i++, buf++, sptr++) { 1501 error = proc_read_mem(td, p, (vm_offset_t)sptr, buf, 1); 1502 if (error != 0) 1503 return (error); 1504 if (*buf == '\0') 1505 break; 1506 } 1507 error = 0; 1508 } 1509 return (error); 1510 } 1511 1512 #define PROC_AUXV_MAX 256 /* Safety limit on auxv size. */ 1513 1514 enum proc_vector_type { 1515 PROC_ARG, 1516 PROC_ENV, 1517 PROC_AUX, 1518 }; 1519 1520 #ifdef COMPAT_FREEBSD32 1521 static int 1522 get_proc_vector32(struct thread *td, struct proc *p, char ***proc_vectorp, 1523 size_t *vsizep, enum proc_vector_type type) 1524 { 1525 struct freebsd32_ps_strings pss; 1526 Elf32_Auxinfo aux; 1527 vm_offset_t vptr, ptr; 1528 uint32_t *proc_vector32; 1529 char **proc_vector; 1530 size_t vsize, size; 1531 int i, error; 1532 1533 error = proc_read_mem(td, p, (vm_offset_t)(p->p_sysent->sv_psstrings), 1534 &pss, sizeof(pss)); 1535 if (error != 0) 1536 return (error); 1537 switch (type) { 1538 case PROC_ARG: 1539 vptr = (vm_offset_t)PTRIN(pss.ps_argvstr); 1540 vsize = pss.ps_nargvstr; 1541 if (vsize > ARG_MAX) 1542 return (ENOEXEC); 1543 size = vsize * sizeof(int32_t); 1544 break; 1545 case PROC_ENV: 1546 vptr = (vm_offset_t)PTRIN(pss.ps_envstr); 1547 vsize = pss.ps_nenvstr; 1548 if (vsize > ARG_MAX) 1549 return (ENOEXEC); 1550 size = vsize * sizeof(int32_t); 1551 break; 1552 case PROC_AUX: 1553 vptr = (vm_offset_t)PTRIN(pss.ps_envstr) + 1554 (pss.ps_nenvstr + 1) * sizeof(int32_t); 1555 if (vptr % 4 != 0) 1556 return (ENOEXEC); 1557 for (ptr = vptr, i = 0; i < PROC_AUXV_MAX; i++) { 1558 error = proc_read_mem(td, p, ptr, &aux, sizeof(aux)); 1559 if (error != 0) 1560 return (error); 1561 if (aux.a_type == AT_NULL) 1562 break; 1563 ptr += sizeof(aux); 1564 } 1565 if (aux.a_type != AT_NULL) 1566 return (ENOEXEC); 1567 vsize = i + 1; 1568 size = vsize * sizeof(aux); 1569 break; 1570 default: 1571 KASSERT(0, ("Wrong proc vector type: %d", type)); 1572 return (EINVAL); 1573 } 1574 proc_vector32 = malloc(size, M_TEMP, M_WAITOK); 1575 error = proc_read_mem(td, p, vptr, proc_vector32, size); 1576 if (error != 0) 1577 goto done; 1578 if (type == PROC_AUX) { 1579 *proc_vectorp = (char **)proc_vector32; 1580 *vsizep = vsize; 1581 return (0); 1582 } 1583 proc_vector = malloc(vsize * sizeof(char *), M_TEMP, M_WAITOK); 1584 for (i = 0; i < (int)vsize; i++) 1585 proc_vector[i] = PTRIN(proc_vector32[i]); 1586 *proc_vectorp = proc_vector; 1587 *vsizep = vsize; 1588 done: 1589 free(proc_vector32, M_TEMP); 1590 return (error); 1591 } 1592 #endif 1593 1594 static int 1595 get_proc_vector(struct thread *td, struct proc *p, char ***proc_vectorp, 1596 size_t *vsizep, enum proc_vector_type type) 1597 { 1598 struct ps_strings pss; 1599 Elf_Auxinfo aux; 1600 vm_offset_t vptr, ptr; 1601 char **proc_vector; 1602 size_t vsize, size; 1603 int error, i; 1604 1605 #ifdef COMPAT_FREEBSD32 1606 if (SV_PROC_FLAG(p, SV_ILP32) != 0) 1607 return (get_proc_vector32(td, p, proc_vectorp, vsizep, type)); 1608 #endif 1609 error = proc_read_mem(td, p, (vm_offset_t)(p->p_sysent->sv_psstrings), 1610 &pss, sizeof(pss)); 1611 if (error != 0) 1612 return (error); 1613 switch (type) { 1614 case PROC_ARG: 1615 vptr = (vm_offset_t)pss.ps_argvstr; 1616 vsize = pss.ps_nargvstr; 1617 if (vsize > ARG_MAX) 1618 return (ENOEXEC); 1619 size = vsize * sizeof(char *); 1620 break; 1621 case PROC_ENV: 1622 vptr = (vm_offset_t)pss.ps_envstr; 1623 vsize = pss.ps_nenvstr; 1624 if (vsize > ARG_MAX) 1625 return (ENOEXEC); 1626 size = vsize * sizeof(char *); 1627 break; 1628 case PROC_AUX: 1629 /* 1630 * The aux array is just above env array on the stack. Check 1631 * that the address is naturally aligned. 1632 */ 1633 vptr = (vm_offset_t)pss.ps_envstr + (pss.ps_nenvstr + 1) 1634 * sizeof(char *); 1635 #if __ELF_WORD_SIZE == 64 1636 if (vptr % sizeof(uint64_t) != 0) 1637 #else 1638 if (vptr % sizeof(uint32_t) != 0) 1639 #endif 1640 return (ENOEXEC); 1641 /* 1642 * We count the array size reading the aux vectors from the 1643 * stack until AT_NULL vector is returned. So (to keep the code 1644 * simple) we read the process stack twice: the first time here 1645 * to find the size and the second time when copying the vectors 1646 * to the allocated proc_vector. 1647 */ 1648 for (ptr = vptr, i = 0; i < PROC_AUXV_MAX; i++) { 1649 error = proc_read_mem(td, p, ptr, &aux, sizeof(aux)); 1650 if (error != 0) 1651 return (error); 1652 if (aux.a_type == AT_NULL) 1653 break; 1654 ptr += sizeof(aux); 1655 } 1656 /* 1657 * If the PROC_AUXV_MAX entries are iterated over, and we have 1658 * not reached AT_NULL, it is most likely we are reading wrong 1659 * data: either the process doesn't have auxv array or data has 1660 * been modified. Return the error in this case. 1661 */ 1662 if (aux.a_type != AT_NULL) 1663 return (ENOEXEC); 1664 vsize = i + 1; 1665 size = vsize * sizeof(aux); 1666 break; 1667 default: 1668 KASSERT(0, ("Wrong proc vector type: %d", type)); 1669 return (EINVAL); /* In case we are built without INVARIANTS. */ 1670 } 1671 proc_vector = malloc(size, M_TEMP, M_WAITOK); 1672 if (proc_vector == NULL) 1673 return (ENOMEM); 1674 error = proc_read_mem(td, p, vptr, proc_vector, size); 1675 if (error != 0) { 1676 free(proc_vector, M_TEMP); 1677 return (error); 1678 } 1679 *proc_vectorp = proc_vector; 1680 *vsizep = vsize; 1681 1682 return (0); 1683 } 1684 1685 #define GET_PS_STRINGS_CHUNK_SZ 256 /* Chunk size (bytes) for ps_strings operations. */ 1686 1687 static int 1688 get_ps_strings(struct thread *td, struct proc *p, struct sbuf *sb, 1689 enum proc_vector_type type) 1690 { 1691 size_t done, len, nchr, vsize; 1692 int error, i; 1693 char **proc_vector, *sptr; 1694 char pss_string[GET_PS_STRINGS_CHUNK_SZ]; 1695 1696 PROC_ASSERT_HELD(p); 1697 1698 /* 1699 * We are not going to read more than 2 * (PATH_MAX + ARG_MAX) bytes. 1700 */ 1701 nchr = 2 * (PATH_MAX + ARG_MAX); 1702 1703 error = get_proc_vector(td, p, &proc_vector, &vsize, type); 1704 if (error != 0) 1705 return (error); 1706 for (done = 0, i = 0; i < (int)vsize && done < nchr; i++) { 1707 /* 1708 * The program may have scribbled into its argv array, e.g. to 1709 * remove some arguments. If that has happened, break out 1710 * before trying to read from NULL. 1711 */ 1712 if (proc_vector[i] == NULL) 1713 break; 1714 for (sptr = proc_vector[i]; ; sptr += GET_PS_STRINGS_CHUNK_SZ) { 1715 error = proc_read_string(td, p, sptr, pss_string, 1716 sizeof(pss_string)); 1717 if (error != 0) 1718 goto done; 1719 len = strnlen(pss_string, GET_PS_STRINGS_CHUNK_SZ); 1720 if (done + len >= nchr) 1721 len = nchr - done - 1; 1722 sbuf_bcat(sb, pss_string, len); 1723 if (len != GET_PS_STRINGS_CHUNK_SZ) 1724 break; 1725 done += GET_PS_STRINGS_CHUNK_SZ; 1726 } 1727 sbuf_bcat(sb, "", 1); 1728 done += len + 1; 1729 } 1730 done: 1731 free(proc_vector, M_TEMP); 1732 return (error); 1733 } 1734 1735 int 1736 proc_getargv(struct thread *td, struct proc *p, struct sbuf *sb) 1737 { 1738 1739 return (get_ps_strings(curthread, p, sb, PROC_ARG)); 1740 } 1741 1742 int 1743 proc_getenvv(struct thread *td, struct proc *p, struct sbuf *sb) 1744 { 1745 1746 return (get_ps_strings(curthread, p, sb, PROC_ENV)); 1747 } 1748 1749 /* 1750 * This sysctl allows a process to retrieve the argument list or process 1751 * title for another process without groping around in the address space 1752 * of the other process. It also allow a process to set its own "process 1753 * title to a string of its own choice. 1754 */ 1755 static int 1756 sysctl_kern_proc_args(SYSCTL_HANDLER_ARGS) 1757 { 1758 int *name = (int *)arg1; 1759 u_int namelen = arg2; 1760 struct pargs *newpa, *pa; 1761 struct proc *p; 1762 struct sbuf sb; 1763 int flags, error = 0, error2; 1764 1765 if (namelen != 1) 1766 return (EINVAL); 1767 1768 flags = PGET_CANSEE; 1769 if (req->newptr != NULL) 1770 flags |= PGET_ISCURRENT; 1771 error = pget((pid_t)name[0], flags, &p); 1772 if (error) 1773 return (error); 1774 1775 pa = p->p_args; 1776 if (pa != NULL) { 1777 pargs_hold(pa); 1778 PROC_UNLOCK(p); 1779 error = SYSCTL_OUT(req, pa->ar_args, pa->ar_length); 1780 pargs_drop(pa); 1781 } else if ((p->p_flag & (P_WEXIT | P_SYSTEM)) == 0) { 1782 _PHOLD(p); 1783 PROC_UNLOCK(p); 1784 sbuf_new_for_sysctl(&sb, NULL, GET_PS_STRINGS_CHUNK_SZ, req); 1785 error = proc_getargv(curthread, p, &sb); 1786 error2 = sbuf_finish(&sb); 1787 PRELE(p); 1788 sbuf_delete(&sb); 1789 if (error == 0 && error2 != 0) 1790 error = error2; 1791 } else { 1792 PROC_UNLOCK(p); 1793 } 1794 if (error != 0 || req->newptr == NULL) 1795 return (error); 1796 1797 if (req->newlen + sizeof(struct pargs) > ps_arg_cache_limit) 1798 return (ENOMEM); 1799 newpa = pargs_alloc(req->newlen); 1800 error = SYSCTL_IN(req, newpa->ar_args, req->newlen); 1801 if (error != 0) { 1802 pargs_free(newpa); 1803 return (error); 1804 } 1805 PROC_LOCK(p); 1806 pa = p->p_args; 1807 p->p_args = newpa; 1808 PROC_UNLOCK(p); 1809 pargs_drop(pa); 1810 return (0); 1811 } 1812 1813 /* 1814 * This sysctl allows a process to retrieve environment of another process. 1815 */ 1816 static int 1817 sysctl_kern_proc_env(SYSCTL_HANDLER_ARGS) 1818 { 1819 int *name = (int *)arg1; 1820 u_int namelen = arg2; 1821 struct proc *p; 1822 struct sbuf sb; 1823 int error, error2; 1824 1825 if (namelen != 1) 1826 return (EINVAL); 1827 1828 error = pget((pid_t)name[0], PGET_WANTREAD, &p); 1829 if (error != 0) 1830 return (error); 1831 if ((p->p_flag & P_SYSTEM) != 0) { 1832 PRELE(p); 1833 return (0); 1834 } 1835 1836 sbuf_new_for_sysctl(&sb, NULL, GET_PS_STRINGS_CHUNK_SZ, req); 1837 error = proc_getenvv(curthread, p, &sb); 1838 error2 = sbuf_finish(&sb); 1839 PRELE(p); 1840 sbuf_delete(&sb); 1841 return (error != 0 ? error : error2); 1842 } 1843 1844 /* 1845 * This sysctl allows a process to retrieve ELF auxiliary vector of 1846 * another process. 1847 */ 1848 static int 1849 sysctl_kern_proc_auxv(SYSCTL_HANDLER_ARGS) 1850 { 1851 int *name = (int *)arg1; 1852 u_int namelen = arg2; 1853 struct proc *p; 1854 size_t vsize, size; 1855 char **auxv; 1856 int error; 1857 1858 if (namelen != 1) 1859 return (EINVAL); 1860 1861 error = pget((pid_t)name[0], PGET_WANTREAD, &p); 1862 if (error != 0) 1863 return (error); 1864 if ((p->p_flag & P_SYSTEM) != 0) { 1865 PRELE(p); 1866 return (0); 1867 } 1868 error = get_proc_vector(curthread, p, &auxv, &vsize, PROC_AUX); 1869 if (error == 0) { 1870 #ifdef COMPAT_FREEBSD32 1871 if (SV_PROC_FLAG(p, SV_ILP32) != 0) 1872 size = vsize * sizeof(Elf32_Auxinfo); 1873 else 1874 #endif 1875 size = vsize * sizeof(Elf_Auxinfo); 1876 PRELE(p); 1877 error = SYSCTL_OUT(req, auxv, size); 1878 free(auxv, M_TEMP); 1879 } else { 1880 PRELE(p); 1881 } 1882 return (error); 1883 } 1884 1885 /* 1886 * This sysctl allows a process to retrieve the path of the executable for 1887 * itself or another process. 1888 */ 1889 static int 1890 sysctl_kern_proc_pathname(SYSCTL_HANDLER_ARGS) 1891 { 1892 pid_t *pidp = (pid_t *)arg1; 1893 unsigned int arglen = arg2; 1894 struct proc *p; 1895 struct vnode *vp; 1896 char *retbuf, *freebuf; 1897 int error; 1898 1899 if (arglen != 1) 1900 return (EINVAL); 1901 if (*pidp == -1) { /* -1 means this process */ 1902 p = req->td->td_proc; 1903 } else { 1904 error = pget(*pidp, PGET_CANSEE, &p); 1905 if (error != 0) 1906 return (error); 1907 } 1908 1909 vp = p->p_textvp; 1910 if (vp == NULL) { 1911 if (*pidp != -1) 1912 PROC_UNLOCK(p); 1913 return (0); 1914 } 1915 vref(vp); 1916 if (*pidp != -1) 1917 PROC_UNLOCK(p); 1918 error = vn_fullpath(req->td, vp, &retbuf, &freebuf); 1919 vrele(vp); 1920 if (error) 1921 return (error); 1922 error = SYSCTL_OUT(req, retbuf, strlen(retbuf) + 1); 1923 free(freebuf, M_TEMP); 1924 return (error); 1925 } 1926 1927 static int 1928 sysctl_kern_proc_sv_name(SYSCTL_HANDLER_ARGS) 1929 { 1930 struct proc *p; 1931 char *sv_name; 1932 int *name; 1933 int namelen; 1934 int error; 1935 1936 namelen = arg2; 1937 if (namelen != 1) 1938 return (EINVAL); 1939 1940 name = (int *)arg1; 1941 error = pget((pid_t)name[0], PGET_CANSEE, &p); 1942 if (error != 0) 1943 return (error); 1944 sv_name = p->p_sysent->sv_name; 1945 PROC_UNLOCK(p); 1946 return (sysctl_handle_string(oidp, sv_name, 0, req)); 1947 } 1948 1949 #ifdef KINFO_OVMENTRY_SIZE 1950 CTASSERT(sizeof(struct kinfo_ovmentry) == KINFO_OVMENTRY_SIZE); 1951 #endif 1952 1953 #ifdef COMPAT_FREEBSD7 1954 static int 1955 sysctl_kern_proc_ovmmap(SYSCTL_HANDLER_ARGS) 1956 { 1957 vm_map_entry_t entry, tmp_entry; 1958 unsigned int last_timestamp; 1959 char *fullpath, *freepath; 1960 struct kinfo_ovmentry *kve; 1961 struct vattr va; 1962 struct ucred *cred; 1963 int error, *name; 1964 struct vnode *vp; 1965 struct proc *p; 1966 vm_map_t map; 1967 struct vmspace *vm; 1968 1969 name = (int *)arg1; 1970 error = pget((pid_t)name[0], PGET_WANTREAD, &p); 1971 if (error != 0) 1972 return (error); 1973 vm = vmspace_acquire_ref(p); 1974 if (vm == NULL) { 1975 PRELE(p); 1976 return (ESRCH); 1977 } 1978 kve = malloc(sizeof(*kve), M_TEMP, M_WAITOK); 1979 1980 map = &vm->vm_map; 1981 vm_map_lock_read(map); 1982 for (entry = map->header.next; entry != &map->header; 1983 entry = entry->next) { 1984 vm_object_t obj, tobj, lobj; 1985 vm_offset_t addr; 1986 1987 if (entry->eflags & MAP_ENTRY_IS_SUB_MAP) 1988 continue; 1989 1990 bzero(kve, sizeof(*kve)); 1991 kve->kve_structsize = sizeof(*kve); 1992 1993 kve->kve_private_resident = 0; 1994 obj = entry->object.vm_object; 1995 if (obj != NULL) { 1996 VM_OBJECT_LOCK(obj); 1997 if (obj->shadow_count == 1) 1998 kve->kve_private_resident = 1999 obj->resident_page_count; 2000 } 2001 kve->kve_resident = 0; 2002 addr = entry->start; 2003 while (addr < entry->end) { 2004 if (pmap_extract(map->pmap, addr)) 2005 kve->kve_resident++; 2006 addr += PAGE_SIZE; 2007 } 2008 2009 for (lobj = tobj = obj; tobj; tobj = tobj->backing_object) { 2010 if (tobj != obj) 2011 VM_OBJECT_LOCK(tobj); 2012 if (lobj != obj) 2013 VM_OBJECT_UNLOCK(lobj); 2014 lobj = tobj; 2015 } 2016 2017 kve->kve_start = (void*)entry->start; 2018 kve->kve_end = (void*)entry->end; 2019 kve->kve_offset = (off_t)entry->offset; 2020 2021 if (entry->protection & VM_PROT_READ) 2022 kve->kve_protection |= KVME_PROT_READ; 2023 if (entry->protection & VM_PROT_WRITE) 2024 kve->kve_protection |= KVME_PROT_WRITE; 2025 if (entry->protection & VM_PROT_EXECUTE) 2026 kve->kve_protection |= KVME_PROT_EXEC; 2027 2028 if (entry->eflags & MAP_ENTRY_COW) 2029 kve->kve_flags |= KVME_FLAG_COW; 2030 if (entry->eflags & MAP_ENTRY_NEEDS_COPY) 2031 kve->kve_flags |= KVME_FLAG_NEEDS_COPY; 2032 if (entry->eflags & MAP_ENTRY_NOCOREDUMP) 2033 kve->kve_flags |= KVME_FLAG_NOCOREDUMP; 2034 2035 last_timestamp = map->timestamp; 2036 vm_map_unlock_read(map); 2037 2038 kve->kve_fileid = 0; 2039 kve->kve_fsid = 0; 2040 freepath = NULL; 2041 fullpath = ""; 2042 if (lobj) { 2043 vp = NULL; 2044 switch (lobj->type) { 2045 case OBJT_DEFAULT: 2046 kve->kve_type = KVME_TYPE_DEFAULT; 2047 break; 2048 case OBJT_VNODE: 2049 kve->kve_type = KVME_TYPE_VNODE; 2050 vp = lobj->handle; 2051 vref(vp); 2052 break; 2053 case OBJT_SWAP: 2054 kve->kve_type = KVME_TYPE_SWAP; 2055 break; 2056 case OBJT_DEVICE: 2057 kve->kve_type = KVME_TYPE_DEVICE; 2058 break; 2059 case OBJT_PHYS: 2060 kve->kve_type = KVME_TYPE_PHYS; 2061 break; 2062 case OBJT_DEAD: 2063 kve->kve_type = KVME_TYPE_DEAD; 2064 break; 2065 case OBJT_SG: 2066 kve->kve_type = KVME_TYPE_SG; 2067 break; 2068 default: 2069 kve->kve_type = KVME_TYPE_UNKNOWN; 2070 break; 2071 } 2072 if (lobj != obj) 2073 VM_OBJECT_UNLOCK(lobj); 2074 2075 kve->kve_ref_count = obj->ref_count; 2076 kve->kve_shadow_count = obj->shadow_count; 2077 VM_OBJECT_UNLOCK(obj); 2078 if (vp != NULL) { 2079 vn_fullpath(curthread, vp, &fullpath, 2080 &freepath); 2081 cred = curthread->td_ucred; 2082 vn_lock(vp, LK_SHARED | LK_RETRY); 2083 if (VOP_GETATTR(vp, &va, cred) == 0) { 2084 kve->kve_fileid = va.va_fileid; 2085 kve->kve_fsid = va.va_fsid; 2086 } 2087 vput(vp); 2088 } 2089 } else { 2090 kve->kve_type = KVME_TYPE_NONE; 2091 kve->kve_ref_count = 0; 2092 kve->kve_shadow_count = 0; 2093 } 2094 2095 strlcpy(kve->kve_path, fullpath, sizeof(kve->kve_path)); 2096 if (freepath != NULL) 2097 free(freepath, M_TEMP); 2098 2099 error = SYSCTL_OUT(req, kve, sizeof(*kve)); 2100 vm_map_lock_read(map); 2101 if (error) 2102 break; 2103 if (last_timestamp != map->timestamp) { 2104 vm_map_lookup_entry(map, addr - 1, &tmp_entry); 2105 entry = tmp_entry; 2106 } 2107 } 2108 vm_map_unlock_read(map); 2109 vmspace_free(vm); 2110 PRELE(p); 2111 free(kve, M_TEMP); 2112 return (error); 2113 } 2114 #endif /* COMPAT_FREEBSD7 */ 2115 2116 #ifdef KINFO_VMENTRY_SIZE 2117 CTASSERT(sizeof(struct kinfo_vmentry) == KINFO_VMENTRY_SIZE); 2118 #endif 2119 2120 static int 2121 sysctl_kern_proc_vmmap(SYSCTL_HANDLER_ARGS) 2122 { 2123 vm_map_entry_t entry, tmp_entry; 2124 unsigned int last_timestamp; 2125 char *fullpath, *freepath; 2126 struct kinfo_vmentry *kve; 2127 struct vattr va; 2128 struct ucred *cred; 2129 int error, *name; 2130 struct vnode *vp; 2131 struct proc *p; 2132 struct vmspace *vm; 2133 vm_map_t map; 2134 2135 name = (int *)arg1; 2136 error = pget((pid_t)name[0], PGET_WANTREAD, &p); 2137 if (error != 0) 2138 return (error); 2139 vm = vmspace_acquire_ref(p); 2140 if (vm == NULL) { 2141 PRELE(p); 2142 return (ESRCH); 2143 } 2144 kve = malloc(sizeof(*kve), M_TEMP, M_WAITOK); 2145 2146 map = &vm->vm_map; 2147 vm_map_lock_read(map); 2148 for (entry = map->header.next; entry != &map->header; 2149 entry = entry->next) { 2150 vm_object_t obj, tobj, lobj; 2151 vm_offset_t addr; 2152 vm_paddr_t locked_pa; 2153 int mincoreinfo; 2154 2155 if (entry->eflags & MAP_ENTRY_IS_SUB_MAP) 2156 continue; 2157 2158 bzero(kve, sizeof(*kve)); 2159 2160 kve->kve_private_resident = 0; 2161 obj = entry->object.vm_object; 2162 if (obj != NULL) { 2163 VM_OBJECT_LOCK(obj); 2164 if (obj->shadow_count == 1) 2165 kve->kve_private_resident = 2166 obj->resident_page_count; 2167 } 2168 kve->kve_resident = 0; 2169 addr = entry->start; 2170 while (addr < entry->end) { 2171 locked_pa = 0; 2172 mincoreinfo = pmap_mincore(map->pmap, addr, &locked_pa); 2173 if (locked_pa != 0) 2174 vm_page_unlock(PHYS_TO_VM_PAGE(locked_pa)); 2175 if (mincoreinfo & MINCORE_INCORE) 2176 kve->kve_resident++; 2177 if (mincoreinfo & MINCORE_SUPER) 2178 kve->kve_flags |= KVME_FLAG_SUPER; 2179 addr += PAGE_SIZE; 2180 } 2181 2182 for (lobj = tobj = obj; tobj; tobj = tobj->backing_object) { 2183 if (tobj != obj) 2184 VM_OBJECT_LOCK(tobj); 2185 if (lobj != obj) 2186 VM_OBJECT_UNLOCK(lobj); 2187 lobj = tobj; 2188 } 2189 2190 kve->kve_start = entry->start; 2191 kve->kve_end = entry->end; 2192 kve->kve_offset = entry->offset; 2193 2194 if (entry->protection & VM_PROT_READ) 2195 kve->kve_protection |= KVME_PROT_READ; 2196 if (entry->protection & VM_PROT_WRITE) 2197 kve->kve_protection |= KVME_PROT_WRITE; 2198 if (entry->protection & VM_PROT_EXECUTE) 2199 kve->kve_protection |= KVME_PROT_EXEC; 2200 2201 if (entry->eflags & MAP_ENTRY_COW) 2202 kve->kve_flags |= KVME_FLAG_COW; 2203 if (entry->eflags & MAP_ENTRY_NEEDS_COPY) 2204 kve->kve_flags |= KVME_FLAG_NEEDS_COPY; 2205 if (entry->eflags & MAP_ENTRY_NOCOREDUMP) 2206 kve->kve_flags |= KVME_FLAG_NOCOREDUMP; 2207 if (entry->eflags & MAP_ENTRY_GROWS_UP) 2208 kve->kve_flags |= KVME_FLAG_GROWS_UP; 2209 if (entry->eflags & MAP_ENTRY_GROWS_DOWN) 2210 kve->kve_flags |= KVME_FLAG_GROWS_DOWN; 2211 2212 last_timestamp = map->timestamp; 2213 vm_map_unlock_read(map); 2214 2215 freepath = NULL; 2216 fullpath = ""; 2217 if (lobj) { 2218 vp = NULL; 2219 switch (lobj->type) { 2220 case OBJT_DEFAULT: 2221 kve->kve_type = KVME_TYPE_DEFAULT; 2222 break; 2223 case OBJT_VNODE: 2224 kve->kve_type = KVME_TYPE_VNODE; 2225 vp = lobj->handle; 2226 vref(vp); 2227 break; 2228 case OBJT_SWAP: 2229 kve->kve_type = KVME_TYPE_SWAP; 2230 break; 2231 case OBJT_DEVICE: 2232 kve->kve_type = KVME_TYPE_DEVICE; 2233 break; 2234 case OBJT_PHYS: 2235 kve->kve_type = KVME_TYPE_PHYS; 2236 break; 2237 case OBJT_DEAD: 2238 kve->kve_type = KVME_TYPE_DEAD; 2239 break; 2240 case OBJT_SG: 2241 kve->kve_type = KVME_TYPE_SG; 2242 break; 2243 default: 2244 kve->kve_type = KVME_TYPE_UNKNOWN; 2245 break; 2246 } 2247 if (lobj != obj) 2248 VM_OBJECT_UNLOCK(lobj); 2249 2250 kve->kve_ref_count = obj->ref_count; 2251 kve->kve_shadow_count = obj->shadow_count; 2252 VM_OBJECT_UNLOCK(obj); 2253 if (vp != NULL) { 2254 vn_fullpath(curthread, vp, &fullpath, 2255 &freepath); 2256 kve->kve_vn_type = vntype_to_kinfo(vp->v_type); 2257 cred = curthread->td_ucred; 2258 vn_lock(vp, LK_SHARED | LK_RETRY); 2259 if (VOP_GETATTR(vp, &va, cred) == 0) { 2260 kve->kve_vn_fileid = va.va_fileid; 2261 kve->kve_vn_fsid = va.va_fsid; 2262 kve->kve_vn_mode = 2263 MAKEIMODE(va.va_type, va.va_mode); 2264 kve->kve_vn_size = va.va_size; 2265 kve->kve_vn_rdev = va.va_rdev; 2266 kve->kve_status = KF_ATTR_VALID; 2267 } 2268 vput(vp); 2269 } 2270 } else { 2271 kve->kve_type = KVME_TYPE_NONE; 2272 kve->kve_ref_count = 0; 2273 kve->kve_shadow_count = 0; 2274 } 2275 2276 strlcpy(kve->kve_path, fullpath, sizeof(kve->kve_path)); 2277 if (freepath != NULL) 2278 free(freepath, M_TEMP); 2279 2280 /* Pack record size down */ 2281 kve->kve_structsize = offsetof(struct kinfo_vmentry, kve_path) + 2282 strlen(kve->kve_path) + 1; 2283 kve->kve_structsize = roundup(kve->kve_structsize, 2284 sizeof(uint64_t)); 2285 error = SYSCTL_OUT(req, kve, kve->kve_structsize); 2286 vm_map_lock_read(map); 2287 if (error) 2288 break; 2289 if (last_timestamp != map->timestamp) { 2290 vm_map_lookup_entry(map, addr - 1, &tmp_entry); 2291 entry = tmp_entry; 2292 } 2293 } 2294 vm_map_unlock_read(map); 2295 vmspace_free(vm); 2296 PRELE(p); 2297 free(kve, M_TEMP); 2298 return (error); 2299 } 2300 2301 #if defined(STACK) || defined(DDB) 2302 static int 2303 sysctl_kern_proc_kstack(SYSCTL_HANDLER_ARGS) 2304 { 2305 struct kinfo_kstack *kkstp; 2306 int error, i, *name, numthreads; 2307 lwpid_t *lwpidarray; 2308 struct thread *td; 2309 struct stack *st; 2310 struct sbuf sb; 2311 struct proc *p; 2312 2313 name = (int *)arg1; 2314 error = pget((pid_t)name[0], PGET_NOTINEXEC | PGET_WANTREAD, &p); 2315 if (error != 0) 2316 return (error); 2317 2318 kkstp = malloc(sizeof(*kkstp), M_TEMP, M_WAITOK); 2319 st = stack_create(); 2320 2321 lwpidarray = NULL; 2322 numthreads = 0; 2323 PROC_LOCK(p); 2324 repeat: 2325 if (numthreads < p->p_numthreads) { 2326 if (lwpidarray != NULL) { 2327 free(lwpidarray, M_TEMP); 2328 lwpidarray = NULL; 2329 } 2330 numthreads = p->p_numthreads; 2331 PROC_UNLOCK(p); 2332 lwpidarray = malloc(sizeof(*lwpidarray) * numthreads, M_TEMP, 2333 M_WAITOK | M_ZERO); 2334 PROC_LOCK(p); 2335 goto repeat; 2336 } 2337 i = 0; 2338 2339 /* 2340 * XXXRW: During the below loop, execve(2) and countless other sorts 2341 * of changes could have taken place. Should we check to see if the 2342 * vmspace has been replaced, or the like, in order to prevent 2343 * giving a snapshot that spans, say, execve(2), with some threads 2344 * before and some after? Among other things, the credentials could 2345 * have changed, in which case the right to extract debug info might 2346 * no longer be assured. 2347 */ 2348 FOREACH_THREAD_IN_PROC(p, td) { 2349 KASSERT(i < numthreads, 2350 ("sysctl_kern_proc_kstack: numthreads")); 2351 lwpidarray[i] = td->td_tid; 2352 i++; 2353 } 2354 numthreads = i; 2355 for (i = 0; i < numthreads; i++) { 2356 td = thread_find(p, lwpidarray[i]); 2357 if (td == NULL) { 2358 continue; 2359 } 2360 bzero(kkstp, sizeof(*kkstp)); 2361 (void)sbuf_new(&sb, kkstp->kkst_trace, 2362 sizeof(kkstp->kkst_trace), SBUF_FIXEDLEN); 2363 thread_lock(td); 2364 kkstp->kkst_tid = td->td_tid; 2365 if (TD_IS_SWAPPED(td)) 2366 kkstp->kkst_state = KKST_STATE_SWAPPED; 2367 else if (TD_IS_RUNNING(td)) 2368 kkstp->kkst_state = KKST_STATE_RUNNING; 2369 else { 2370 kkstp->kkst_state = KKST_STATE_STACKOK; 2371 stack_save_td(st, td); 2372 } 2373 thread_unlock(td); 2374 PROC_UNLOCK(p); 2375 stack_sbuf_print(&sb, st); 2376 sbuf_finish(&sb); 2377 sbuf_delete(&sb); 2378 error = SYSCTL_OUT(req, kkstp, sizeof(*kkstp)); 2379 PROC_LOCK(p); 2380 if (error) 2381 break; 2382 } 2383 _PRELE(p); 2384 PROC_UNLOCK(p); 2385 if (lwpidarray != NULL) 2386 free(lwpidarray, M_TEMP); 2387 stack_destroy(st); 2388 free(kkstp, M_TEMP); 2389 return (error); 2390 } 2391 #endif 2392 2393 /* 2394 * This sysctl allows a process to retrieve the full list of groups from 2395 * itself or another process. 2396 */ 2397 static int 2398 sysctl_kern_proc_groups(SYSCTL_HANDLER_ARGS) 2399 { 2400 pid_t *pidp = (pid_t *)arg1; 2401 unsigned int arglen = arg2; 2402 struct proc *p; 2403 struct ucred *cred; 2404 int error; 2405 2406 if (arglen != 1) 2407 return (EINVAL); 2408 if (*pidp == -1) { /* -1 means this process */ 2409 p = req->td->td_proc; 2410 } else { 2411 error = pget(*pidp, PGET_CANSEE, &p); 2412 if (error != 0) 2413 return (error); 2414 } 2415 2416 cred = crhold(p->p_ucred); 2417 if (*pidp != -1) 2418 PROC_UNLOCK(p); 2419 2420 error = SYSCTL_OUT(req, cred->cr_groups, 2421 cred->cr_ngroups * sizeof(gid_t)); 2422 crfree(cred); 2423 return (error); 2424 } 2425 2426 /* 2427 * This sysctl allows a process to retrieve or/and set the resource limit for 2428 * another process. 2429 */ 2430 static int 2431 sysctl_kern_proc_rlimit(SYSCTL_HANDLER_ARGS) 2432 { 2433 int *name = (int *)arg1; 2434 u_int namelen = arg2; 2435 struct rlimit rlim; 2436 struct proc *p; 2437 u_int which; 2438 int flags, error; 2439 2440 if (namelen != 2) 2441 return (EINVAL); 2442 2443 which = (u_int)name[1]; 2444 if (which >= RLIM_NLIMITS) 2445 return (EINVAL); 2446 2447 if (req->newptr != NULL && req->newlen != sizeof(rlim)) 2448 return (EINVAL); 2449 2450 flags = PGET_HOLD | PGET_NOTWEXIT; 2451 if (req->newptr != NULL) 2452 flags |= PGET_CANDEBUG; 2453 else 2454 flags |= PGET_CANSEE; 2455 error = pget((pid_t)name[0], flags, &p); 2456 if (error != 0) 2457 return (error); 2458 2459 /* 2460 * Retrieve limit. 2461 */ 2462 if (req->oldptr != NULL) { 2463 PROC_LOCK(p); 2464 lim_rlimit(p, which, &rlim); 2465 PROC_UNLOCK(p); 2466 } 2467 error = SYSCTL_OUT(req, &rlim, sizeof(rlim)); 2468 if (error != 0) 2469 goto errout; 2470 2471 /* 2472 * Set limit. 2473 */ 2474 if (req->newptr != NULL) { 2475 error = SYSCTL_IN(req, &rlim, sizeof(rlim)); 2476 if (error == 0) 2477 error = kern_proc_setrlimit(curthread, p, which, &rlim); 2478 } 2479 2480 errout: 2481 PRELE(p); 2482 return (error); 2483 } 2484 2485 /* 2486 * This sysctl allows a process to retrieve ps_strings structure location of 2487 * another process. 2488 */ 2489 static int 2490 sysctl_kern_proc_ps_strings(SYSCTL_HANDLER_ARGS) 2491 { 2492 int *name = (int *)arg1; 2493 u_int namelen = arg2; 2494 struct proc *p; 2495 vm_offset_t ps_strings; 2496 int error; 2497 #ifdef COMPAT_FREEBSD32 2498 uint32_t ps_strings32; 2499 #endif 2500 2501 if (namelen != 1) 2502 return (EINVAL); 2503 2504 error = pget((pid_t)name[0], PGET_CANDEBUG, &p); 2505 if (error != 0) 2506 return (error); 2507 #ifdef COMPAT_FREEBSD32 2508 if ((req->flags & SCTL_MASK32) != 0) { 2509 /* 2510 * We return 0 if the 32 bit emulation request is for a 64 bit 2511 * process. 2512 */ 2513 ps_strings32 = SV_PROC_FLAG(p, SV_ILP32) != 0 ? 2514 PTROUT(p->p_sysent->sv_psstrings) : 0; 2515 PROC_UNLOCK(p); 2516 error = SYSCTL_OUT(req, &ps_strings32, sizeof(ps_strings32)); 2517 return (error); 2518 } 2519 #endif 2520 ps_strings = p->p_sysent->sv_psstrings; 2521 PROC_UNLOCK(p); 2522 error = SYSCTL_OUT(req, &ps_strings, sizeof(ps_strings)); 2523 return (error); 2524 } 2525 2526 /* 2527 * This sysctl allows a process to retrieve umask of another process. 2528 */ 2529 static int 2530 sysctl_kern_proc_umask(SYSCTL_HANDLER_ARGS) 2531 { 2532 int *name = (int *)arg1; 2533 u_int namelen = arg2; 2534 struct proc *p; 2535 int error; 2536 u_short fd_cmask; 2537 2538 if (namelen != 1) 2539 return (EINVAL); 2540 2541 error = pget((pid_t)name[0], PGET_WANTREAD, &p); 2542 if (error != 0) 2543 return (error); 2544 2545 FILEDESC_SLOCK(p->p_fd); 2546 fd_cmask = p->p_fd->fd_cmask; 2547 FILEDESC_SUNLOCK(p->p_fd); 2548 PRELE(p); 2549 error = SYSCTL_OUT(req, &fd_cmask, sizeof(fd_cmask)); 2550 return (error); 2551 } 2552 2553 /* 2554 * This sysctl allows a process to set and retrieve binary osreldate of 2555 * another process. 2556 */ 2557 static int 2558 sysctl_kern_proc_osrel(SYSCTL_HANDLER_ARGS) 2559 { 2560 int *name = (int *)arg1; 2561 u_int namelen = arg2; 2562 struct proc *p; 2563 int flags, error, osrel; 2564 2565 if (namelen != 1) 2566 return (EINVAL); 2567 2568 if (req->newptr != NULL && req->newlen != sizeof(osrel)) 2569 return (EINVAL); 2570 2571 flags = PGET_HOLD | PGET_NOTWEXIT; 2572 if (req->newptr != NULL) 2573 flags |= PGET_CANDEBUG; 2574 else 2575 flags |= PGET_CANSEE; 2576 error = pget((pid_t)name[0], flags, &p); 2577 if (error != 0) 2578 return (error); 2579 2580 error = SYSCTL_OUT(req, &p->p_osrel, sizeof(p->p_osrel)); 2581 if (error != 0) 2582 goto errout; 2583 2584 if (req->newptr != NULL) { 2585 error = SYSCTL_IN(req, &osrel, sizeof(osrel)); 2586 if (error != 0) 2587 goto errout; 2588 if (osrel < 0) { 2589 error = EINVAL; 2590 goto errout; 2591 } 2592 p->p_osrel = osrel; 2593 } 2594 errout: 2595 PRELE(p); 2596 return (error); 2597 } 2598 2599 SYSCTL_NODE(_kern, KERN_PROC, proc, CTLFLAG_RD, 0, "Process table"); 2600 2601 SYSCTL_PROC(_kern_proc, KERN_PROC_ALL, all, CTLFLAG_RD|CTLTYPE_STRUCT| 2602 CTLFLAG_MPSAFE, 0, 0, sysctl_kern_proc, "S,proc", 2603 "Return entire process table"); 2604 2605 static SYSCTL_NODE(_kern_proc, KERN_PROC_GID, gid, CTLFLAG_RD | CTLFLAG_MPSAFE, 2606 sysctl_kern_proc, "Process table"); 2607 2608 static SYSCTL_NODE(_kern_proc, KERN_PROC_PGRP, pgrp, CTLFLAG_RD | CTLFLAG_MPSAFE, 2609 sysctl_kern_proc, "Process table"); 2610 2611 static SYSCTL_NODE(_kern_proc, KERN_PROC_RGID, rgid, CTLFLAG_RD | CTLFLAG_MPSAFE, 2612 sysctl_kern_proc, "Process table"); 2613 2614 static SYSCTL_NODE(_kern_proc, KERN_PROC_SESSION, sid, CTLFLAG_RD | 2615 CTLFLAG_MPSAFE, sysctl_kern_proc, "Process table"); 2616 2617 static SYSCTL_NODE(_kern_proc, KERN_PROC_TTY, tty, CTLFLAG_RD | CTLFLAG_MPSAFE, 2618 sysctl_kern_proc, "Process table"); 2619 2620 static SYSCTL_NODE(_kern_proc, KERN_PROC_UID, uid, CTLFLAG_RD | CTLFLAG_MPSAFE, 2621 sysctl_kern_proc, "Process table"); 2622 2623 static SYSCTL_NODE(_kern_proc, KERN_PROC_RUID, ruid, CTLFLAG_RD | CTLFLAG_MPSAFE, 2624 sysctl_kern_proc, "Process table"); 2625 2626 static SYSCTL_NODE(_kern_proc, KERN_PROC_PID, pid, CTLFLAG_RD | CTLFLAG_MPSAFE, 2627 sysctl_kern_proc, "Process table"); 2628 2629 static SYSCTL_NODE(_kern_proc, KERN_PROC_PROC, proc, CTLFLAG_RD | CTLFLAG_MPSAFE, 2630 sysctl_kern_proc, "Return process table, no threads"); 2631 2632 static SYSCTL_NODE(_kern_proc, KERN_PROC_ARGS, args, 2633 CTLFLAG_RW | CTLFLAG_ANYBODY | CTLFLAG_MPSAFE, 2634 sysctl_kern_proc_args, "Process argument list"); 2635 2636 static SYSCTL_NODE(_kern_proc, KERN_PROC_ENV, env, CTLFLAG_RD | CTLFLAG_MPSAFE, 2637 sysctl_kern_proc_env, "Process environment"); 2638 2639 static SYSCTL_NODE(_kern_proc, KERN_PROC_AUXV, auxv, CTLFLAG_RD | 2640 CTLFLAG_MPSAFE, sysctl_kern_proc_auxv, "Process ELF auxiliary vector"); 2641 2642 static SYSCTL_NODE(_kern_proc, KERN_PROC_PATHNAME, pathname, CTLFLAG_RD | 2643 CTLFLAG_MPSAFE, sysctl_kern_proc_pathname, "Process executable path"); 2644 2645 static SYSCTL_NODE(_kern_proc, KERN_PROC_SV_NAME, sv_name, CTLFLAG_RD | 2646 CTLFLAG_MPSAFE, sysctl_kern_proc_sv_name, 2647 "Process syscall vector name (ABI type)"); 2648 2649 static SYSCTL_NODE(_kern_proc, (KERN_PROC_GID | KERN_PROC_INC_THREAD), gid_td, 2650 CTLFLAG_RD | CTLFLAG_MPSAFE, sysctl_kern_proc, "Process table"); 2651 2652 static SYSCTL_NODE(_kern_proc, (KERN_PROC_PGRP | KERN_PROC_INC_THREAD), pgrp_td, 2653 CTLFLAG_RD | CTLFLAG_MPSAFE, sysctl_kern_proc, "Process table"); 2654 2655 static SYSCTL_NODE(_kern_proc, (KERN_PROC_RGID | KERN_PROC_INC_THREAD), rgid_td, 2656 CTLFLAG_RD | CTLFLAG_MPSAFE, sysctl_kern_proc, "Process table"); 2657 2658 static SYSCTL_NODE(_kern_proc, (KERN_PROC_SESSION | KERN_PROC_INC_THREAD), 2659 sid_td, CTLFLAG_RD | CTLFLAG_MPSAFE, sysctl_kern_proc, "Process table"); 2660 2661 static SYSCTL_NODE(_kern_proc, (KERN_PROC_TTY | KERN_PROC_INC_THREAD), tty_td, 2662 CTLFLAG_RD | CTLFLAG_MPSAFE, sysctl_kern_proc, "Process table"); 2663 2664 static SYSCTL_NODE(_kern_proc, (KERN_PROC_UID | KERN_PROC_INC_THREAD), uid_td, 2665 CTLFLAG_RD | CTLFLAG_MPSAFE, sysctl_kern_proc, "Process table"); 2666 2667 static SYSCTL_NODE(_kern_proc, (KERN_PROC_RUID | KERN_PROC_INC_THREAD), ruid_td, 2668 CTLFLAG_RD | CTLFLAG_MPSAFE, sysctl_kern_proc, "Process table"); 2669 2670 static SYSCTL_NODE(_kern_proc, (KERN_PROC_PID | KERN_PROC_INC_THREAD), pid_td, 2671 CTLFLAG_RD | CTLFLAG_MPSAFE, sysctl_kern_proc, "Process table"); 2672 2673 static SYSCTL_NODE(_kern_proc, (KERN_PROC_PROC | KERN_PROC_INC_THREAD), proc_td, 2674 CTLFLAG_RD | CTLFLAG_MPSAFE, sysctl_kern_proc, 2675 "Return process table, no threads"); 2676 2677 #ifdef COMPAT_FREEBSD7 2678 static SYSCTL_NODE(_kern_proc, KERN_PROC_OVMMAP, ovmmap, CTLFLAG_RD | 2679 CTLFLAG_MPSAFE, sysctl_kern_proc_ovmmap, "Old Process vm map entries"); 2680 #endif 2681 2682 static SYSCTL_NODE(_kern_proc, KERN_PROC_VMMAP, vmmap, CTLFLAG_RD | 2683 CTLFLAG_MPSAFE, sysctl_kern_proc_vmmap, "Process vm map entries"); 2684 2685 #if defined(STACK) || defined(DDB) 2686 static SYSCTL_NODE(_kern_proc, KERN_PROC_KSTACK, kstack, CTLFLAG_RD | 2687 CTLFLAG_MPSAFE, sysctl_kern_proc_kstack, "Process kernel stacks"); 2688 #endif 2689 2690 static SYSCTL_NODE(_kern_proc, KERN_PROC_GROUPS, groups, CTLFLAG_RD | 2691 CTLFLAG_MPSAFE, sysctl_kern_proc_groups, "Process groups"); 2692 2693 static SYSCTL_NODE(_kern_proc, KERN_PROC_RLIMIT, rlimit, CTLFLAG_RW | 2694 CTLFLAG_ANYBODY | CTLFLAG_MPSAFE, sysctl_kern_proc_rlimit, 2695 "Process resource limits"); 2696 2697 static SYSCTL_NODE(_kern_proc, KERN_PROC_PS_STRINGS, ps_strings, CTLFLAG_RD | 2698 CTLFLAG_MPSAFE, sysctl_kern_proc_ps_strings, 2699 "Process ps_strings location"); 2700 2701 static SYSCTL_NODE(_kern_proc, KERN_PROC_UMASK, umask, CTLFLAG_RD | 2702 CTLFLAG_MPSAFE, sysctl_kern_proc_umask, "Process umask"); 2703 2704 static SYSCTL_NODE(_kern_proc, KERN_PROC_OSREL, osrel, CTLFLAG_RW | 2705 CTLFLAG_ANYBODY | CTLFLAG_MPSAFE, sysctl_kern_proc_osrel, 2706 "Process binary osreldate"); 2707