o Call the functions registered with at_exec() from exec_new_vmspace()

instead of execve().  Otherwise, the possibility still exists
   for a pending AIO to modify the new address space.

Reviewed by:	alfred
This commit is contained in:
Alan Cox 2002-01-13 19:36:35 +00:00
parent 4c6aff87c8
commit 6f5dafea75
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=89314

View File

@ -128,7 +128,6 @@ execve(td, uap)
struct vattr attr;
int (*img_first) __P((struct image_params *));
struct pargs *pa;
struct execlist *ep;
imgp = &image_params;
@ -258,9 +257,6 @@ execve(td, uap)
goto interpret;
}
TAILQ_FOREACH(ep, &exec_list, next)
(*ep->function)(p);
/*
* Copy out strings (args and env) and initialize stack base
*/
@ -584,6 +580,7 @@ exec_new_vmspace(imgp)
struct image_params *imgp;
{
int error;
struct execlist *ep;
struct vmspace *vmspace = imgp->proc->p_vmspace;
vm_offset_t stack_addr = USRSTACK - maxssiz;
vm_map_t map = &vmspace->vm_map;
@ -592,6 +589,12 @@ exec_new_vmspace(imgp)
imgp->vmspace_destroyed = 1;
/*
* Perform functions registered with at_exec().
*/
TAILQ_FOREACH(ep, &exec_list, next)
(*ep->function)(imgp->proc);
/*
* Blow away entire process VM, if address space not shared,
* otherwise, create a new VM space so that other threads are