diff options
Diffstat (limited to 'sys/kern/kern_fork.c')
| -rw-r--r-- | sys/kern/kern_fork.c | 13 | 
1 files changed, 9 insertions, 4 deletions
diff --git a/sys/kern/kern_fork.c b/sys/kern/kern_fork.c index da7ca7dad1a8..9fbf60217457 100644 --- a/sys/kern/kern_fork.c +++ b/sys/kern/kern_fork.c @@ -118,7 +118,7 @@ fork(td, uap)  	struct proc *p2;  	mtx_lock(&Giant); -	error = fork1(td, RFFDG | RFPROC, &p2); +	error = fork1(td, RFFDG | RFPROC, 0, &p2);  	if (error == 0) {  		td->td_retval[0] = p2->p_pid;  		td->td_retval[1] = 0; @@ -140,7 +140,7 @@ vfork(td, uap)  	struct proc *p2;  	mtx_lock(&Giant); -	error = fork1(td, RFFDG | RFPROC | RFPPWAIT | RFMEM, &p2); +	error = fork1(td, RFFDG | RFPROC | RFPPWAIT | RFMEM, 0, &p2);  	if (error == 0) {  		td->td_retval[0] = p2->p_pid;  		td->td_retval[1] = 0; @@ -164,7 +164,7 @@ rfork(td, uap)  	if ((uap->flags & RFKERNELONLY) != 0)  		return (EINVAL);  	mtx_lock(&Giant); -	error = fork1(td, uap->flags, &p2); +	error = fork1(td, uap->flags, 0, &p2);  	if (error == 0) {  		td->td_retval[0] = p2 ? p2->p_pid : 0;  		td->td_retval[1] = 0; @@ -215,9 +215,10 @@ SYSCTL_PROC(_kern, OID_AUTO, randompid, CTLTYPE_INT|CTLFLAG_RW,      0, 0, sysctl_kern_randompid, "I", "Random PID modulus");  int -fork1(td, flags, procp) +fork1(td, flags, pages, procp)  	struct thread *td;			/* parent proc */  	int flags; +	int pages;  	struct proc **procp;			/* child proc */  {  	struct proc *p2, *pptr; @@ -471,6 +472,10 @@ again:  	kg2 = FIRST_KSEGRP_IN_PROC(p2);  	ke2 = FIRST_KSE_IN_KSEGRP(kg2); +	/* Allocate and switch to an alternate kstack if specified */ +	if (pages != 0) +		pmap_new_altkstack(td2, pages); +  #define RANGEOF(type, start, end) (offsetof(type, end) - offsetof(type, start))  	bzero(&p2->p_startzero,  | 
