From 441ad494bc40701579cf432f2f064660201a32b3 Mon Sep 17 00:00:00 2001 From: art Date: Fri, 22 Feb 2002 01:08:42 +0000 Subject: Fix stack sharing in FORK_VMNOSTACK. Don't assume that the stack is on the top of user address space. And don't assume that the stack grows down. --- sys/kern/kern_fork.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'sys/kern/kern_fork.c') diff --git a/sys/kern/kern_fork.c b/sys/kern/kern_fork.c index 5c5e49446e3..9d9c799de5c 100644 --- a/sys/kern/kern_fork.c +++ b/sys/kern/kern_fork.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kern_fork.c,v 1.52 2002/02/16 00:54:49 nordin Exp $ */ +/* $OpenBSD: kern_fork.c,v 1.53 2002/02/22 01:08:42 art Exp $ */ /* $NetBSD: kern_fork.c,v 1.29 1996/02/09 18:59:34 christos Exp $ */ /* @@ -301,10 +301,20 @@ fork1(p1, exitsig, flags, stack, stacksize, func, arg, retval) PHOLD(p1); if (flags & FORK_VMNOSTACK) { - /* share as much address space as possible */ - (void) uvm_map_inherit(&p1->p_vmspace->vm_map, - VM_MIN_ADDRESS, round_page(VM_MAXUSER_ADDRESS - MAXSSIZ), + /* share everything, but ... */ + uvm_map_inherit(&p1->p_vmspace->vm_map, + VM_MIN_ADDRESS, VM_MAXUSER_ADDRESS, MAP_INHERIT_SHARE); + /* ... don't share stack */ +#ifdef MACHINE_STACK_GROWS_UP + uvm_map_inherit(&p1->p_vmspace->vm_map, + USRSTACK, USRSTACK + MAXSSIZ, + MAP_INHERIT_COPY); +#else + uvm_map_inherit(&p1->p_vmspace->vm_map, + USRSTACK - MAXSSIZ, USRSTACK, + MAP_INHERIT_COPY); +#endif } p2->p_addr = (struct user *)uaddr; -- cgit v1.2.3-59-g8ed1b