The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System, Second Edition

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/kern/kern_fork.c

Version: -  FREEBSD  -  FREEBSD10  -  FREEBSD9  -  FREEBSD92  -  FREEBSD91  -  FREEBSD90  -  FREEBSD8  -  FREEBSD82  -  FREEBSD81  -  FREEBSD80  -  FREEBSD7  -  FREEBSD74  -  FREEBSD73  -  FREEBSD72  -  FREEBSD71  -  FREEBSD70  -  FREEBSD6  -  FREEBSD64  -  FREEBSD63  -  FREEBSD62  -  FREEBSD61  -  FREEBSD60  -  FREEBSD5  -  FREEBSD55  -  FREEBSD54  -  FREEBSD53  -  FREEBSD52  -  FREEBSD51  -  FREEBSD50  -  FREEBSD4  -  FREEBSD3  -  FREEBSD22  -  linux-2.6  -  linux-2.4.22  -  MK83  -  MK84  -  PLAN9  -  DFBSD  -  NETBSD  -  NETBSD5  -  NETBSD4  -  NETBSD3  -  NETBSD20  -  OPENBSD  -  xnu-517  -  xnu-792  -  xnu-792.6.70  -  xnu-1228  -  xnu-1456.1.26  -  xnu-1699.24.8  -  xnu-2050.18.24  -  OPENSOLARIS  -  minix-3-1-1 
SearchContext: -  none  -  3  -  10 

    1 /*-
    2  * Copyright (c) 1982, 1986, 1989, 1991, 1993
    3  *      The Regents of the University of California.  All rights reserved.
    4  * (c) UNIX System Laboratories, Inc.
    5  * All or some portions of this file are derived from material licensed
    6  * to the University of California by American Telephone and Telegraph
    7  * Co. or Unix System Laboratories, Inc. and are reproduced herein with
    8  * the permission of UNIX System Laboratories, Inc.
    9  *
   10  * Redistribution and use in source and binary forms, with or without
   11  * modification, are permitted provided that the following conditions
   12  * are met:
   13  * 1. Redistributions of source code must retain the above copyright
   14  *    notice, this list of conditions and the following disclaimer.
   15  * 2. Redistributions in binary form must reproduce the above copyright
   16  *    notice, this list of conditions and the following disclaimer in the
   17  *    documentation and/or other materials provided with the distribution.
   18  * 4. Neither the name of the University nor the names of its contributors
   19  *    may be used to endorse or promote products derived from this software
   20  *    without specific prior written permission.
   21  *
   22  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   23  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   24  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   25  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   26  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   27  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   28  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   29  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   31  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   32  * SUCH DAMAGE.
   33  *
   34  *      @(#)kern_fork.c 8.6 (Berkeley) 4/8/94
   35  */
   36 
   37 #include <sys/cdefs.h>
   38 __FBSDID("$FreeBSD: stable/8/sys/kern/kern_fork.c 244809 2012-12-29 02:36:08Z kib $");
   39 
   40 #include "opt_kdtrace.h"
   41 #include "opt_ktrace.h"
   42 #include "opt_kstack_pages.h"
   43 
   44 #include <sys/param.h>
   45 #include <sys/systm.h>
   46 #include <sys/sysproto.h>
   47 #include <sys/eventhandler.h>
   48 #include <sys/filedesc.h>
   49 #include <sys/jail.h>
   50 #include <sys/kernel.h>
   51 #include <sys/kthread.h>
   52 #include <sys/sysctl.h>
   53 #include <sys/lock.h>
   54 #include <sys/malloc.h>
   55 #include <sys/mutex.h>
   56 #include <sys/priv.h>
   57 #include <sys/proc.h>
   58 #include <sys/pioctl.h>
   59 #include <sys/resourcevar.h>
   60 #include <sys/sched.h>
   61 #include <sys/syscall.h>
   62 #include <sys/vmmeter.h>
   63 #include <sys/vnode.h>
   64 #include <sys/acct.h>
   65 #include <sys/ktr.h>
   66 #include <sys/ktrace.h>
   67 #include <sys/unistd.h> 
   68 #include <sys/sdt.h>
   69 #include <sys/sx.h>
   70 #include <sys/sysent.h>
   71 #include <sys/signalvar.h>
   72 
   73 #include <security/audit/audit.h>
   74 #include <security/mac/mac_framework.h>
   75 
   76 #include <vm/vm.h>
   77 #include <vm/pmap.h>
   78 #include <vm/vm_map.h>
   79 #include <vm/vm_extern.h>
   80 #include <vm/uma.h>
   81 
   82 #ifdef KDTRACE_HOOKS
   83 #include <sys/dtrace_bsd.h>
   84 dtrace_fork_func_t      dtrace_fasttrap_fork;
   85 #endif
   86 
   87 SDT_PROVIDER_DECLARE(proc);
   88 SDT_PROBE_DEFINE(proc, kernel, , create, create);
   89 SDT_PROBE_ARGTYPE(proc, kernel, , create, 0, "struct proc *");
   90 SDT_PROBE_ARGTYPE(proc, kernel, , create, 1, "struct proc *");
   91 SDT_PROBE_ARGTYPE(proc, kernel, , create, 2, "int");
   92 
   93 #ifndef _SYS_SYSPROTO_H_
   94 struct fork_args {
   95         int     dummy;
   96 };
   97 #endif
   98 
   99 /* ARGSUSED */
  100 int
  101 fork(td, uap)
  102         struct thread *td;
  103         struct fork_args *uap;
  104 {
  105         int error;
  106         struct proc *p2;
  107 
  108         error = fork1(td, RFFDG | RFPROC, 0, &p2);
  109         if (error == 0) {
  110                 td->td_retval[0] = p2->p_pid;
  111                 td->td_retval[1] = 0;
  112         }
  113         return (error);
  114 }
  115 
  116 /* ARGSUSED */
  117 int
  118 vfork(td, uap)
  119         struct thread *td;
  120         struct vfork_args *uap;
  121 {
  122         int error, flags;
  123         struct proc *p2;
  124 
  125         flags = RFFDG | RFPROC | RFPPWAIT | RFMEM;
  126         error = fork1(td, flags, 0, &p2);
  127         if (error == 0) {
  128                 td->td_retval[0] = p2->p_pid;
  129                 td->td_retval[1] = 0;
  130         }
  131         return (error);
  132 }
  133 
  134 int
  135 rfork(td, uap)
  136         struct thread *td;
  137         struct rfork_args *uap;
  138 {
  139         struct proc *p2;
  140         int error;
  141 
  142         /* Don't allow kernel-only flags. */
  143         if ((uap->flags & RFKERNELONLY) != 0)
  144                 return (EINVAL);
  145 
  146         AUDIT_ARG_FFLAGS(uap->flags);
  147         error = fork1(td, uap->flags, 0, &p2);
  148         if (error == 0) {
  149                 td->td_retval[0] = p2 ? p2->p_pid : 0;
  150                 td->td_retval[1] = 0;
  151         }
  152         return (error);
  153 }
  154 
  155 int     nprocs = 1;             /* process 0 */
  156 int     lastpid = 0;
  157 SYSCTL_INT(_kern, OID_AUTO, lastpid, CTLFLAG_RD, &lastpid, 0, 
  158     "Last used PID");
  159 
  160 /*
  161  * Random component to lastpid generation.  We mix in a random factor to make
  162  * it a little harder to predict.  We sanity check the modulus value to avoid
  163  * doing it in critical paths.  Don't let it be too small or we pointlessly
  164  * waste randomness entropy, and don't let it be impossibly large.  Using a
  165  * modulus that is too big causes a LOT more process table scans and slows
  166  * down fork processing as the pidchecked caching is defeated.
  167  */
  168 static int randompid = 0;
  169 
  170 static int
  171 sysctl_kern_randompid(SYSCTL_HANDLER_ARGS)
  172 {
  173         int error, pid;
  174 
  175         error = sysctl_wire_old_buffer(req, sizeof(int));
  176         if (error != 0)
  177                 return(error);
  178         sx_xlock(&allproc_lock);
  179         pid = randompid;
  180         error = sysctl_handle_int(oidp, &pid, 0, req);
  181         if (error == 0 && req->newptr != NULL) {
  182                 if (pid < 0 || pid > PID_MAX - 100)     /* out of range */
  183                         pid = PID_MAX - 100;
  184                 else if (pid < 2)                       /* NOP */
  185                         pid = 0;
  186                 else if (pid < 100)                     /* Make it reasonable */
  187                         pid = 100;
  188                 randompid = pid;
  189         }
  190         sx_xunlock(&allproc_lock);
  191         return (error);
  192 }
  193 
  194 SYSCTL_PROC(_kern, OID_AUTO, randompid, CTLTYPE_INT|CTLFLAG_RW,
  195     0, 0, sysctl_kern_randompid, "I", "Random PID modulus");
  196 
  197 int
  198 fork1(td, flags, pages, procp)
  199         struct thread *td;
  200         int flags;
  201         int pages;
  202         struct proc **procp;
  203 {
  204         struct proc *p1, *p2, *pptr;
  205         struct proc *newproc;
  206         int ok, p2_held, trypid;
  207         static int curfail, pidchecked = 0;
  208         static struct timeval lastfail;
  209         struct filedesc *fd;
  210         struct filedesc_to_leader *fdtol;
  211         struct thread *td2;
  212         struct sigacts *newsigacts;
  213         struct vmspace *vm2;
  214         vm_ooffset_t mem_charged;
  215         int error;
  216 
  217         /* Check for the undefined or unimplemented flags. */
  218         if ((flags & ~(RFFLAGS | RFTSIGFLAGS(RFTSIGMASK))) != 0)
  219                 return (EINVAL);
  220 
  221         /* Signal value requires RFTSIGZMB. */
  222         if ((flags & RFTSIGFLAGS(RFTSIGMASK)) != 0 && (flags & RFTSIGZMB) == 0)
  223                 return (EINVAL);
  224 
  225         /* Can't copy and clear. */
  226         if ((flags & (RFFDG|RFCFDG)) == (RFFDG|RFCFDG))
  227                 return (EINVAL);
  228 
  229         /* Check the validity of the signal number. */
  230         if ((flags & RFTSIGZMB) != 0 && (u_int)RFTSIGNUM(flags) > _SIG_MAXSIG)
  231                 return (EINVAL);
  232 
  233         p2_held = 0;
  234         p1 = td->td_proc;
  235 
  236         /*
  237          * Here we don't create a new process, but we divorce
  238          * certain parts of a process from itself.
  239          */
  240         if ((flags & RFPROC) == 0) {
  241                 if (((p1->p_flag & (P_HADTHREADS|P_SYSTEM)) == P_HADTHREADS) &&
  242                     (flags & (RFCFDG | RFFDG))) {
  243                         PROC_LOCK(p1);
  244                         if (thread_single(SINGLE_BOUNDARY)) {
  245                                 PROC_UNLOCK(p1);
  246                                 return (ERESTART);
  247                         }
  248                         PROC_UNLOCK(p1);
  249                 }
  250 
  251                 error = vm_forkproc(td, NULL, NULL, NULL, flags);
  252                 if (error)
  253                         goto norfproc_fail;
  254 
  255                 /*
  256                  * Close all file descriptors.
  257                  */
  258                 if (flags & RFCFDG) {
  259                         struct filedesc *fdtmp;
  260                         fdtmp = fdinit(td->td_proc->p_fd);
  261                         fdfree(td);
  262                         p1->p_fd = fdtmp;
  263                 }
  264 
  265                 /*
  266                  * Unshare file descriptors (from parent).
  267                  */
  268                 if (flags & RFFDG) 
  269                         fdunshare(p1, td);
  270 
  271 norfproc_fail:
  272                 if (((p1->p_flag & (P_HADTHREADS|P_SYSTEM)) == P_HADTHREADS) &&
  273                     (flags & (RFCFDG | RFFDG))) {
  274                         PROC_LOCK(p1);
  275                         thread_single_end();
  276                         PROC_UNLOCK(p1);
  277                 }
  278                 *procp = NULL;
  279                 return (error);
  280         }
  281 
  282         /*
  283          * XXX
  284          * We did have single-threading code here
  285          * however it proved un-needed and caused problems
  286          */
  287 
  288         mem_charged = 0;
  289         vm2 = NULL;
  290         if (pages == 0)
  291                 pages = KSTACK_PAGES;
  292         /* Allocate new proc. */
  293         newproc = uma_zalloc(proc_zone, M_WAITOK);
  294         td2 = FIRST_THREAD_IN_PROC(newproc);
  295         if (td2 == NULL) {
  296                 td2 = thread_alloc(pages);
  297                 if (td2 == NULL) {
  298                         error = ENOMEM;
  299                         goto fail1;
  300                 }
  301                 proc_linkup(newproc, td2);
  302         } else {
  303                 if (td2->td_kstack == 0 || td2->td_kstack_pages != pages) {
  304                         if (td2->td_kstack != 0)
  305                                 vm_thread_dispose(td2);
  306                         if (!thread_alloc_stack(td2, pages)) {
  307                                 error = ENOMEM;
  308                                 goto fail1;
  309                         }
  310                 }
  311         }
  312 
  313         if ((flags & RFMEM) == 0) {
  314                 vm2 = vmspace_fork(p1->p_vmspace, &mem_charged);
  315                 if (vm2 == NULL) {
  316                         error = ENOMEM;
  317                         goto fail1;
  318                 }
  319                 if (!swap_reserve(mem_charged)) {
  320                         /*
  321                          * The swap reservation failed. The accounting
  322                          * from the entries of the copied vm2 will be
  323                          * substracted in vmspace_free(), so force the
  324                          * reservation there.
  325                          */
  326                         swap_reserve_force(mem_charged);
  327                         error = ENOMEM;
  328                         goto fail1;
  329                 }
  330         } else
  331                 vm2 = NULL;
  332 #ifdef MAC
  333         mac_proc_init(newproc);
  334 #endif
  335         knlist_init_mtx(&newproc->p_klist, &newproc->p_mtx);
  336         STAILQ_INIT(&newproc->p_ktr);
  337 
  338         /* We have to lock the process tree while we look for a pid. */
  339         sx_slock(&proctree_lock);
  340 
  341         /*
  342          * Although process entries are dynamically created, we still keep
  343          * a global limit on the maximum number we will create.  Don't allow
  344          * a nonprivileged user to use the last ten processes; don't let root
  345          * exceed the limit. The variable nprocs is the current number of
  346          * processes, maxproc is the limit.
  347          */
  348         sx_xlock(&allproc_lock);
  349         if ((nprocs >= maxproc - 10 && priv_check_cred(td->td_ucred,
  350             PRIV_MAXPROC, 0) != 0) || nprocs >= maxproc) {
  351                 error = EAGAIN;
  352                 goto fail;
  353         }
  354 
  355         /*
  356          * Increment the count of procs running with this uid. Don't allow
  357          * a nonprivileged user to exceed their current limit.
  358          *
  359          * XXXRW: Can we avoid privilege here if it's not needed?
  360          */
  361         error = priv_check_cred(td->td_ucred, PRIV_PROC_LIMIT, 0);
  362         if (error == 0)
  363                 ok = chgproccnt(td->td_ucred->cr_ruidinfo, 1, 0);
  364         else {
  365                 PROC_LOCK(p1);
  366                 ok = chgproccnt(td->td_ucred->cr_ruidinfo, 1,
  367                     lim_cur(p1, RLIMIT_NPROC));
  368                 PROC_UNLOCK(p1);
  369         }
  370         if (!ok) {
  371                 error = EAGAIN;
  372                 goto fail;
  373         }
  374 
  375         /*
  376          * Increment the nprocs resource before blocking can occur.  There
  377          * are hard-limits as to the number of processes that can run.
  378          */
  379         nprocs++;
  380 
  381         /*
  382          * Find an unused process ID.  We remember a range of unused IDs
  383          * ready to use (from lastpid+1 through pidchecked-1).
  384          *
  385          * If RFHIGHPID is set (used during system boot), do not allocate
  386          * low-numbered pids.
  387          */
  388         trypid = lastpid + 1;
  389         if (flags & RFHIGHPID) {
  390                 if (trypid < 10)
  391                         trypid = 10;
  392         } else {
  393                 if (randompid)
  394                         trypid += arc4random() % randompid;
  395         }
  396 retry:
  397         /*
  398          * If the process ID prototype has wrapped around,
  399          * restart somewhat above 0, as the low-numbered procs
  400          * tend to include daemons that don't exit.
  401          */
  402         if (trypid >= PID_MAX) {
  403                 trypid = trypid % PID_MAX;
  404                 if (trypid < 100)
  405                         trypid += 100;
  406                 pidchecked = 0;
  407         }
  408         if (trypid >= pidchecked) {
  409                 int doingzomb = 0;
  410 
  411                 pidchecked = PID_MAX;
  412                 /*
  413                  * Scan the active and zombie procs to check whether this pid
  414                  * is in use.  Remember the lowest pid that's greater
  415                  * than trypid, so we can avoid checking for a while.
  416                  */
  417                 p2 = LIST_FIRST(&allproc);
  418 again:
  419                 for (; p2 != NULL; p2 = LIST_NEXT(p2, p_list)) {
  420                         while (p2->p_pid == trypid ||
  421                             (p2->p_pgrp != NULL &&
  422                             (p2->p_pgrp->pg_id == trypid ||
  423                             (p2->p_session != NULL &&
  424                             p2->p_session->s_sid == trypid)))) {
  425                                 trypid++;
  426                                 if (trypid >= pidchecked)
  427                                         goto retry;
  428                         }
  429                         if (p2->p_pid > trypid && pidchecked > p2->p_pid)
  430                                 pidchecked = p2->p_pid;
  431                         if (p2->p_pgrp != NULL) {
  432                                 if (p2->p_pgrp->pg_id > trypid &&
  433                                     pidchecked > p2->p_pgrp->pg_id)
  434                                         pidchecked = p2->p_pgrp->pg_id;
  435                                 if (p2->p_session != NULL &&
  436                                     p2->p_session->s_sid > trypid &&
  437                                     pidchecked > p2->p_session->s_sid)
  438                                         pidchecked = p2->p_session->s_sid;
  439                         }
  440                 }
  441                 if (!doingzomb) {
  442                         doingzomb = 1;
  443                         p2 = LIST_FIRST(&zombproc);
  444                         goto again;
  445                 }
  446         }
  447         sx_sunlock(&proctree_lock);
  448 
  449         /*
  450          * RFHIGHPID does not mess with the lastpid counter during boot.
  451          */
  452         if (flags & RFHIGHPID)
  453                 pidchecked = 0;
  454         else
  455                 lastpid = trypid;
  456 
  457         p2 = newproc;
  458         p2->p_state = PRS_NEW;          /* protect against others */
  459         p2->p_pid = trypid;
  460         AUDIT_ARG_PID(p2->p_pid);
  461         LIST_INSERT_HEAD(&allproc, p2, p_list);
  462         LIST_INSERT_HEAD(PIDHASH(p2->p_pid), p2, p_hash);
  463 
  464         PROC_LOCK(p2);
  465         PROC_LOCK(p1);
  466 
  467         sx_xunlock(&allproc_lock);
  468 
  469         bcopy(&p1->p_startcopy, &p2->p_startcopy,
  470             __rangeof(struct proc, p_startcopy, p_endcopy));
  471         pargs_hold(p2->p_args);
  472         PROC_UNLOCK(p1);
  473 
  474         bzero(&p2->p_startzero,
  475             __rangeof(struct proc, p_startzero, p_endzero));
  476 
  477         p2->p_ucred = crhold(td->td_ucred);
  478 
  479         /* Tell the prison that we exist. */
  480         prison_proc_hold(p2->p_ucred->cr_prison);
  481 
  482         PROC_UNLOCK(p2);
  483 
  484         /*
  485          * Malloc things while we don't hold any locks.
  486          */
  487         if (flags & RFSIGSHARE)
  488                 newsigacts = NULL;
  489         else
  490                 newsigacts = sigacts_alloc();
  491 
  492         /*
  493          * Copy filedesc.
  494          */
  495         if (flags & RFCFDG) {
  496                 fd = fdinit(p1->p_fd);
  497                 fdtol = NULL;
  498         } else if (flags & RFFDG) {
  499                 fd = fdcopy(p1->p_fd);
  500                 fdtol = NULL;
  501         } else {
  502                 fd = fdshare(p1->p_fd);
  503                 if (p1->p_fdtol == NULL)
  504                         p1->p_fdtol =
  505                                 filedesc_to_leader_alloc(NULL,
  506                                                          NULL,
  507                                                          p1->p_leader);
  508                 if ((flags & RFTHREAD) != 0) {
  509                         /*
  510                          * Shared file descriptor table and
  511                          * shared process leaders.
  512                          */
  513                         fdtol = p1->p_fdtol;
  514                         FILEDESC_XLOCK(p1->p_fd);
  515                         fdtol->fdl_refcount++;
  516                         FILEDESC_XUNLOCK(p1->p_fd);
  517                 } else {
  518                         /* 
  519                          * Shared file descriptor table, and
  520                          * different process leaders 
  521                          */
  522                         fdtol = filedesc_to_leader_alloc(p1->p_fdtol,
  523                                                          p1->p_fd,
  524                                                          p2);
  525                 }
  526         }
  527         /*
  528          * Make a proc table entry for the new process.
  529          * Start by zeroing the section of proc that is zero-initialized,
  530          * then copy the section that is copied directly from the parent.
  531          */
  532 
  533         PROC_LOCK(p2);
  534         PROC_LOCK(p1);
  535 
  536         bzero(&td2->td_startzero,
  537             __rangeof(struct thread, td_startzero, td_endzero));
  538         bzero(&td2->td_rux, sizeof(td2->td_rux));
  539         td2->td_map_def_user = NULL;
  540         td2->td_dbg_forked = 0;
  541 
  542         bcopy(&td->td_startcopy, &td2->td_startcopy,
  543             __rangeof(struct thread, td_startcopy, td_endcopy));
  544 
  545         bcopy(&p2->p_comm, &td2->td_name, sizeof(td2->td_name));
  546         td2->td_sigstk = td->td_sigstk;
  547         td2->td_sigmask = td->td_sigmask;
  548         td2->td_flags = TDF_INMEM;
  549 
  550 #ifdef VIMAGE
  551         td2->td_vnet = NULL;
  552         td2->td_vnet_lpush = NULL;
  553 #endif
  554 
  555         /*
  556          * Allow the scheduler to initialize the child.
  557          */
  558         thread_lock(td);
  559         sched_fork(td, td2);
  560         thread_unlock(td);
  561 
  562         /*
  563          * Duplicate sub-structures as needed.
  564          * Increase reference counts on shared objects.
  565          */
  566         p2->p_flag = P_INMEM;
  567         p2->p_swtick = ticks;
  568         if (p1->p_flag & P_PROFIL)
  569                 startprofclock(p2);
  570         td2->td_ucred = crhold(p2->p_ucred);
  571 
  572         if (flags & RFSIGSHARE) {
  573                 p2->p_sigacts = sigacts_hold(p1->p_sigacts);
  574         } else {
  575                 sigacts_copy(newsigacts, p1->p_sigacts);
  576                 p2->p_sigacts = newsigacts;
  577         }
  578 
  579         if (flags & RFTSIGZMB)
  580                 p2->p_sigparent = RFTSIGNUM(flags);
  581         else if (flags & RFLINUXTHPN)
  582                 p2->p_sigparent = SIGUSR1;
  583         else
  584                 p2->p_sigparent = SIGCHLD;
  585 
  586         p2->p_textvp = p1->p_textvp;
  587         p2->p_fd = fd;
  588         p2->p_fdtol = fdtol;
  589 
  590         /*
  591          * p_limit is copy-on-write.  Bump its refcount.
  592          */
  593         lim_fork(p1, p2);
  594 
  595         pstats_fork(p1->p_stats, p2->p_stats);
  596 
  597         PROC_UNLOCK(p1);
  598         PROC_UNLOCK(p2);
  599 
  600         /* Bump references to the text vnode (for procfs) */
  601         if (p2->p_textvp)
  602                 vref(p2->p_textvp);
  603 
  604         /*
  605          * Set up linkage for kernel based threading.
  606          */
  607         if ((flags & RFTHREAD) != 0) {
  608                 mtx_lock(&ppeers_lock);
  609                 p2->p_peers = p1->p_peers;
  610                 p1->p_peers = p2;
  611                 p2->p_leader = p1->p_leader;
  612                 mtx_unlock(&ppeers_lock);
  613                 PROC_LOCK(p1->p_leader);
  614                 if ((p1->p_leader->p_flag & P_WEXIT) != 0) {
  615                         PROC_UNLOCK(p1->p_leader);
  616                         /*
  617                          * The task leader is exiting, so process p1 is
  618                          * going to be killed shortly.  Since p1 obviously
  619                          * isn't dead yet, we know that the leader is either
  620                          * sending SIGKILL's to all the processes in this
  621                          * task or is sleeping waiting for all the peers to
  622                          * exit.  We let p1 complete the fork, but we need
  623                          * to go ahead and kill the new process p2 since
  624                          * the task leader may not get a chance to send
  625                          * SIGKILL to it.  We leave it on the list so that
  626                          * the task leader will wait for this new process
  627                          * to commit suicide.
  628                          */
  629                         PROC_LOCK(p2);
  630                         psignal(p2, SIGKILL);
  631                         PROC_UNLOCK(p2);
  632                 } else
  633                         PROC_UNLOCK(p1->p_leader);
  634         } else {
  635                 p2->p_peers = NULL;
  636                 p2->p_leader = p2;
  637         }
  638 
  639         sx_xlock(&proctree_lock);
  640         PGRP_LOCK(p1->p_pgrp);
  641         PROC_LOCK(p2);
  642         PROC_LOCK(p1);
  643 
  644         /*
  645          * Preserve some more flags in subprocess.  P_PROFIL has already
  646          * been preserved.
  647          */
  648         p2->p_flag |= p1->p_flag & P_SUGID;
  649         td2->td_pflags |= td->td_pflags & TDP_ALTSTACK;
  650         SESS_LOCK(p1->p_session);
  651         if (p1->p_session->s_ttyvp != NULL && p1->p_flag & P_CONTROLT)
  652                 p2->p_flag |= P_CONTROLT;
  653         SESS_UNLOCK(p1->p_session);
  654         if (flags & RFPPWAIT)
  655                 p2->p_flag |= P_PPWAIT;
  656 
  657         p2->p_pgrp = p1->p_pgrp;
  658         LIST_INSERT_AFTER(p1, p2, p_pglist);
  659         PGRP_UNLOCK(p1->p_pgrp);
  660         LIST_INIT(&p2->p_children);
  661 
  662         callout_init(&p2->p_itcallout, CALLOUT_MPSAFE);
  663 
  664         /*
  665          * If PF_FORK is set, the child process inherits the
  666          * procfs ioctl flags from its parent.
  667          */
  668         if (p1->p_pfsflags & PF_FORK) {
  669                 p2->p_stops = p1->p_stops;
  670                 p2->p_pfsflags = p1->p_pfsflags;
  671         }
  672 
  673         /*
  674          * This begins the section where we must prevent the parent
  675          * from being swapped.
  676          */
  677         _PHOLD(p1);
  678         PROC_UNLOCK(p1);
  679 
  680         /*
  681          * Attach the new process to its parent.
  682          *
  683          * If RFNOWAIT is set, the newly created process becomes a child
  684          * of init.  This effectively disassociates the child from the
  685          * parent.
  686          */
  687         if (flags & RFNOWAIT)
  688                 pptr = initproc;
  689         else
  690                 pptr = p1;
  691         p2->p_pptr = pptr;
  692         LIST_INSERT_HEAD(&pptr->p_children, p2, p_sibling);
  693         sx_xunlock(&proctree_lock);
  694 
  695         /* Inform accounting that we have forked. */
  696         p2->p_acflag = AFORK;
  697         PROC_UNLOCK(p2);
  698 
  699 #ifdef KTRACE
  700         ktrprocfork(p1, p2);
  701 #endif
  702 
  703         /*
  704          * Finish creating the child process.  It will return via a different
  705          * execution path later.  (ie: directly into user mode)
  706          */
  707         vm_forkproc(td, p2, td2, vm2, flags);
  708 
  709         if (flags == (RFFDG | RFPROC)) {
  710                 PCPU_INC(cnt.v_forks);
  711                 PCPU_ADD(cnt.v_forkpages, p2->p_vmspace->vm_dsize +
  712                     p2->p_vmspace->vm_ssize);
  713         } else if (flags == (RFFDG | RFPROC | RFPPWAIT | RFMEM)) {
  714                 PCPU_INC(cnt.v_vforks);
  715                 PCPU_ADD(cnt.v_vforkpages, p2->p_vmspace->vm_dsize +
  716                     p2->p_vmspace->vm_ssize);
  717         } else if (p1 == &proc0) {
  718                 PCPU_INC(cnt.v_kthreads);
  719                 PCPU_ADD(cnt.v_kthreadpages, p2->p_vmspace->vm_dsize +
  720                     p2->p_vmspace->vm_ssize);
  721         } else {
  722                 PCPU_INC(cnt.v_rforks);
  723                 PCPU_ADD(cnt.v_rforkpages, p2->p_vmspace->vm_dsize +
  724                     p2->p_vmspace->vm_ssize);
  725         }
  726 
  727         /*
  728          * Both processes are set up, now check if any loadable modules want
  729          * to adjust anything.
  730          *   What if they have an error? XXX
  731          */
  732         EVENTHANDLER_INVOKE(process_fork, p1, p2, flags);
  733 
  734         /*
  735          * Set the child start time and mark the process as being complete.
  736          */
  737         PROC_LOCK(p2);
  738         PROC_LOCK(p1);
  739         microuptime(&p2->p_stats->p_start);
  740         PROC_SLOCK(p2);
  741         p2->p_state = PRS_NORMAL;
  742         PROC_SUNLOCK(p2);
  743 
  744 #ifdef KDTRACE_HOOKS
  745         /*
  746          * Tell the DTrace fasttrap provider about the new process
  747          * if it has registered an interest. We have to do this only after
  748          * p_state is PRS_NORMAL since the fasttrap module will use pfind()
  749          * later on.
  750          */
  751         if (dtrace_fasttrap_fork)
  752                 dtrace_fasttrap_fork(p1, p2);
  753 #endif
  754         if ((p1->p_flag & (P_TRACED | P_FOLLOWFORK)) == (P_TRACED |
  755             P_FOLLOWFORK)) {
  756                 /*
  757                  * Arrange for debugger to receive the fork event.
  758                  *
  759                  * We can report PL_FLAG_FORKED regardless of
  760                  * P_FOLLOWFORK settings, but it does not make a sense
  761                  * for runaway child.
  762                  */
  763                 td->td_dbgflags |= TDB_FORK;
  764                 td->td_dbg_forked = p2->p_pid;
  765                 td2->td_dbgflags |= TDB_STOPATFORK;
  766                 _PHOLD(p2);
  767                 p2_held = 1;
  768         }
  769         PROC_UNLOCK(p2);
  770         if ((flags & RFSTOPPED) == 0) {
  771                 /*
  772                  * If RFSTOPPED not requested, make child runnable and
  773                  * add to run queue.
  774                  */
  775                 thread_lock(td2);
  776                 TD_SET_CAN_RUN(td2);
  777                 sched_add(td2, SRQ_BORING);
  778                 thread_unlock(td2);
  779         }
  780 
  781         /*
  782          * Now can be swapped.
  783          */
  784         _PRELE(p1);
  785         PROC_UNLOCK(p1);
  786 
  787         /*
  788          * Tell any interested parties about the new process.
  789          */
  790         knote_fork(&p1->p_klist, p2->p_pid);
  791         SDT_PROBE(proc, kernel, , create, p2, p1, flags, 0, 0);
  792 
  793         /*
  794          * Wait until debugger is attached to child.
  795          */
  796         PROC_LOCK(p2);
  797         while ((td2->td_dbgflags & TDB_STOPATFORK) != 0)
  798                 cv_wait(&p2->p_dbgwait, &p2->p_mtx);
  799         if (p2_held)
  800                 _PRELE(p2);
  801 
  802         /*
  803          * Preserve synchronization semantics of vfork.  If waiting for
  804          * child to exec or exit, set P_PPWAIT on child, and sleep on our
  805          * proc (in case of exit).
  806          */
  807         while (p2->p_flag & P_PPWAIT)
  808                 cv_wait(&p2->p_pwait, &p2->p_mtx);
  809         PROC_UNLOCK(p2);
  810 
  811         /*
  812          * Return child proc pointer to parent.
  813          */
  814         *procp = p2;
  815         return (0);
  816 fail:
  817         sx_sunlock(&proctree_lock);
  818         if (ppsratecheck(&lastfail, &curfail, 1))
  819                 printf("maxproc limit exceeded by uid %i, please see tuning(7) and login.conf(5).\n",
  820                     td->td_ucred->cr_ruid);
  821         sx_xunlock(&allproc_lock);
  822 #ifdef MAC
  823         mac_proc_destroy(newproc);
  824 #endif
  825 fail1:
  826         if (vm2 != NULL)
  827                 vmspace_free(vm2);
  828         uma_zfree(proc_zone, newproc);
  829         pause("fork", hz / 2);
  830         return (error);
  831 }
  832 
  833 /*
  834  * Handle the return of a child process from fork1().  This function
  835  * is called from the MD fork_trampoline() entry point.
  836  */
  837 void
  838 fork_exit(callout, arg, frame)
  839         void (*callout)(void *, struct trapframe *);
  840         void *arg;
  841         struct trapframe *frame;
  842 {
  843         struct proc *p;
  844         struct thread *td;
  845         struct thread *dtd;
  846 
  847         td = curthread;
  848         p = td->td_proc;
  849         KASSERT(p->p_state == PRS_NORMAL, ("executing process is still new"));
  850 
  851         CTR4(KTR_PROC, "fork_exit: new thread %p (td_sched %p, pid %d, %s)",
  852                 td, td->td_sched, p->p_pid, td->td_name);
  853 
  854         sched_fork_exit(td);
  855         /*
  856         * Processes normally resume in mi_switch() after being
  857         * cpu_switch()'ed to, but when children start up they arrive here
  858         * instead, so we must do much the same things as mi_switch() would.
  859         */
  860         if ((dtd = PCPU_GET(deadthread))) {
  861                 PCPU_SET(deadthread, NULL);
  862                 thread_stash(dtd);
  863         }
  864         thread_unlock(td);
  865 
  866         /*
  867          * cpu_set_fork_handler intercepts this function call to
  868          * have this call a non-return function to stay in kernel mode.
  869          * initproc has its own fork handler, but it does return.
  870          */
  871         KASSERT(callout != NULL, ("NULL callout in fork_exit"));
  872         callout(arg, frame);
  873 
  874         /*
  875          * Check if a kernel thread misbehaved and returned from its main
  876          * function.
  877          */
  878         if (p->p_flag & P_KTHREAD) {
  879                 printf("Kernel thread \"%s\" (pid %d) exited prematurely.\n",
  880                     td->td_name, p->p_pid);
  881                 kproc_exit(0);
  882         }
  883         mtx_assert(&Giant, MA_NOTOWNED);
  884 
  885         if (p->p_sysent->sv_schedtail != NULL)
  886                 (p->p_sysent->sv_schedtail)(td);
  887 }
  888 
  889 /*
  890  * Simplified back end of syscall(), used when returning from fork()
  891  * directly into user mode.  Giant is not held on entry, and must not
  892  * be held on return.  This function is passed in to fork_exit() as the
  893  * first parameter and is called when returning to a new userland process.
  894  */
  895 void
  896 fork_return(td, frame)
  897         struct thread *td;
  898         struct trapframe *frame;
  899 {
  900         struct proc *p, *dbg;
  901 
  902         if (td->td_dbgflags & TDB_STOPATFORK) {
  903                 p = td->td_proc;
  904                 sx_xlock(&proctree_lock);
  905                 PROC_LOCK(p);
  906                 if ((p->p_pptr->p_flag & (P_TRACED | P_FOLLOWFORK)) ==
  907                     (P_TRACED | P_FOLLOWFORK)) {
  908                         /*
  909                          * If debugger still wants auto-attach for the
  910                          * parent's children, do it now.
  911                          */
  912                         dbg = p->p_pptr->p_pptr;
  913                         p->p_flag |= P_TRACED;
  914                         p->p_oppid = p->p_pptr->p_pid;
  915                         proc_reparent(p, dbg);
  916                         sx_xunlock(&proctree_lock);
  917                         ptracestop(td, SIGSTOP);
  918                 } else {
  919                         /*
  920                          * ... otherwise clear the request.
  921                          */
  922                         sx_xunlock(&proctree_lock);
  923                         td->td_dbgflags &= ~TDB_STOPATFORK;
  924                         cv_broadcast(&p->p_dbgwait);
  925                 }
  926                 PROC_UNLOCK(p);
  927         }
  928 
  929         userret(td, frame);
  930 
  931 #ifdef KTRACE
  932         if (KTRPOINT(td, KTR_SYSRET))
  933                 ktrsysret(SYS_fork, 0, 0);
  934 #endif
  935         mtx_assert(&Giant, MA_NOTOWNED);
  936 }

Cache object: 4ce0700e9bd6ebb905ce2d3624dda04c


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.