FreeBSD kernel kern code
|
#include <sys/cdefs.h>
#include "opt_ktrace.h"
#include "opt_kstack_pages.h"
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/bitstring.h>
#include <sys/sysproto.h>
#include <sys/eventhandler.h>
#include <sys/fcntl.h>
#include <sys/filedesc.h>
#include <sys/jail.h>
#include <sys/kernel.h>
#include <sys/kthread.h>
#include <sys/sysctl.h>
#include <sys/lock.h>
#include <sys/malloc.h>
#include <sys/msan.h>
#include <sys/mutex.h>
#include <sys/priv.h>
#include <sys/proc.h>
#include <sys/procdesc.h>
#include <sys/ptrace.h>
#include <sys/racct.h>
#include <sys/resourcevar.h>
#include <sys/sched.h>
#include <sys/syscall.h>
#include <sys/vmmeter.h>
#include <sys/vnode.h>
#include <sys/acct.h>
#include <sys/ktr.h>
#include <sys/ktrace.h>
#include <sys/unistd.h>
#include <sys/sdt.h>
#include <sys/sx.h>
#include <sys/sysent.h>
#include <sys/signalvar.h>
#include <security/audit/audit.h>
#include <security/mac/mac_framework.h>
#include <vm/vm.h>
#include <vm/pmap.h>
#include <vm/vm_map.h>
#include <vm/vm_extern.h>
#include <vm/uma.h>
Go to the source code of this file.
Data Structures | |
struct | fork_args |
Functions | |
__FBSDID ("$FreeBSD$") | |
SDT_PROVIDER_DECLARE (proc) | |
SDT_PROBE_DEFINE3 (proc,,, create, "struct proc *", "struct proc *", "int") | |
int | sys_fork (struct thread *td, struct fork_args *uap) |
int | sys_pdfork (struct thread *td, struct pdfork_args *uap) |
int | sys_vfork (struct thread *td, struct vfork_args *uap) |
int | sys_rfork (struct thread *td, struct rfork_args *uap) |
SYSCTL_INT (_kern, OID_AUTO, lastpid, CTLFLAG_RD, &lastpid, 0, "Last used PID") | |
static int | sysctl_kern_randompid (SYSCTL_HANDLER_ARGS) |
SYSCTL_PROC (_kern, OID_AUTO, randompid, CTLTYPE_INT|CTLFLAG_RW|CTLFLAG_MPSAFE, 0, 0, sysctl_kern_randompid, "I", "Random PID modulus. Special values: 0: disable, 1: choose random value") | |
static int | fork_findpid (int flags) |
static int | fork_norfproc (struct thread *td, int flags) |
static void | do_fork (struct thread *td, struct fork_req *fr, struct proc *p2, struct thread *td2, struct vmspace *vm2, struct file *fp_procdesc) |
void | fork_rfppwait (struct thread *td) |
int | fork1 (struct thread *td, struct fork_req *fr) |
void | fork_exit (void(*callout)(void *, struct trapframe *), void *arg, struct trapframe *frame) |
void | fork_return (struct thread *td, struct trapframe *frame) |
Variables | |
int __exclusive_cache_line | nprocs = 1 |
int | lastpid = 0 |
static int | randompid = 0 |
bitstr_t | proc_id_pidmap |
bitstr_t | proc_id_grpidmap |
bitstr_t | proc_id_sessidmap |
bitstr_t | proc_id_reapmap |
__FBSDID | ( | "$FreeBSD$" | ) |
|
static |
Definition at line 369 of file kern_fork.c.
References allproc, allproc_gen, allproc_lock, fd, fdcopy(), fdinit(), fdshare(), filedesc_to_leader_alloc(), fork_findpid(), initproc, kern_psignal(), knote_fork(), lim_fork(), microuptime(), pargs_hold(), pdcopy(), pdinit(), pdshare(), ppeers_lock, prison_proc_hold(), proc0, proc_id_set_cond(), proc_reparent(), proc_set_traced(), procdesc_finit(), procdesc_new(), proctree_lock, pstats_fork(), sched_add(), sched_fork(), sig_drop_caught(), sigacts_alloc(), sigacts_copy(), sigacts_hold(), startprofclock(), thread_cow_get_proc(), ticks, tidhash_add(), and vrefact().
Referenced by fork1().
int fork1 | ( | struct thread * | td, |
struct fork_req * | fr | ||
) |
Definition at line 853 of file kern_fork.c.
References allproc_lock, chgproccnt(), do_fork(), fdclose(), flags, fork_norfproc(), hz, kmsan_thread_alloc(), knlist_alloc(), kstack_pages, lim_cur(), maxproc, nprocs, ppsratecheck(), printf(), priv_check_cred(), proc_linkup(), proc_set_cred_init(), proc_unset_cred(), proc_zone, procdesc_falloc(), thread_alloc(), and thread_alloc_stack().
Referenced by create_init(), kproc_create(), sys_fork(), sys_pdfork(), sys_rfork(), and sys_vfork().
void fork_exit | ( | void(*)(void *, struct trapframe *) | callout, |
void * | arg, | ||
struct trapframe * | frame | ||
) |
Definition at line 1068 of file kern_fork.c.
References Giant, kmsan_mark(), kthread_exit(), printf(), sched_fork_exit(), and thread_stash().
|
static |
Definition at line 257 of file kern_fork.c.
References flags, lastpid, pid_max, proc_id_grpidmap, proc_id_pidmap, proc_id_reapmap, proc_id_sessidmap, procid_lock, randompid, and result.
Referenced by do_fork().
|
static |
Definition at line 308 of file kern_fork.c.
References fdescfree(), fdinit(), fdunshare(), flags, pdescfree(), pdinit(), pdunshare(), thread_single(), and thread_single_end().
Referenced by fork1().
void fork_return | ( | struct thread * | td, |
struct trapframe * | frame | ||
) |
Definition at line 1126 of file kern_fork.c.
References exit1(), prison_isalive(), ptracestop(), and userret().
void fork_rfppwait | ( | struct thread * | td | ) |
Definition at line 808 of file kern_fork.c.
References hz, ptracestop(), thread_suspend_check(), and thread_suspend_check_needed().
Referenced by ast().
SDT_PROBE_DEFINE3 | ( | proc | , |
create | , | ||
"struct proc *" | , | ||
"struct proc *" | , | ||
"int" | |||
) |
SDT_PROVIDER_DECLARE | ( | proc | ) |
int sys_fork | ( | struct thread * | td, |
struct fork_args * | uap | ||
) |
Definition at line 104 of file kern_fork.c.
References fork1().
int sys_pdfork | ( | struct thread * | td, |
struct pdfork_args * | uap | ||
) |
int sys_rfork | ( | struct thread * | td, |
struct rfork_args * | uap | ||
) |
Definition at line 166 of file kern_fork.c.
References fork1().
int sys_vfork | ( | struct thread * | td, |
struct vfork_args * | uap | ||
) |
Definition at line 149 of file kern_fork.c.
References fork1().
SYSCTL_INT | ( | _kern | , |
OID_AUTO | , | ||
lastpid | , | ||
CTLFLAG_RD | , | ||
& | lastpid, | ||
0 | , | ||
"Last used PID" | |||
) |
|
static |
Definition at line 211 of file kern_fork.c.
References allproc_lock, pid_max, randompid, sysctl_handle_int(), and sysctl_wire_old_buffer().
SYSCTL_PROC | ( | _kern | , |
OID_AUTO | , | ||
randompid | , | ||
CTLTYPE_INT|CTLFLAG_RW| | CTLFLAG_MPSAFE, | ||
0 | , | ||
0 | , | ||
sysctl_kern_randompid | , | ||
"I" | , | ||
"Random PID modulus. Special values: 0: | disable, | ||
1:choose random value" | |||
) |
int lastpid = 0 |
Definition at line 196 of file kern_fork.c.
Referenced by fork_findpid().
int __exclusive_cache_line nprocs = 1 |
Definition at line 195 of file kern_fork.c.
Referenced by fork1(), and proc_reap().
|
extern |
Referenced by fork_findpid().
|
extern |
Referenced by fork_findpid().
|
extern |
Referenced by fork_findpid().
|
extern |
Referenced by fork_findpid().
|
static |
Definition at line 208 of file kern_fork.c.
Referenced by fork_findpid(), and sysctl_kern_randompid().