Path: blob/main/website/static/security/patches/EN-14:06/exec-10.patch
18096 views
Index: sys/sys/proc.h1===================================================================2--- sys/sys/proc.h (revision 266581)3+++ sys/sys/proc.h (revision 266582)4@@ -425,6 +425,7 @@ do { \5#define TDP_NERRNO 0x08000000 /* Last errno is already in td_errno */6#define TDP_UIOHELD 0x10000000 /* Current uio has pages held in td_ma */7#define TDP_DEVMEMIO 0x20000000 /* Accessing memory for /dev/mem */8+#define TDP_EXECVMSPC 0x40000000 /* Execve destroyed old vmspace */910/*11* Reasons that the current thread can not be run yet.12Index: sys/kern/kern_exec.c13===================================================================14--- sys/kern/kern_exec.c (revision 266581)15+++ sys/kern/kern_exec.c (revision 266582)16@@ -283,6 +283,7 @@ kern_execve(td, args, mac_p)17struct mac *mac_p;18{19struct proc *p = td->td_proc;20+ struct vmspace *oldvmspace;21int error;2223AUDIT_ARG_ARGV(args->begin_argv, args->argc,24@@ -299,6 +300,8 @@ kern_execve(td, args, mac_p)25PROC_UNLOCK(p);26}2728+ KASSERT((td->td_pflags & TDP_EXECVMSPC) == 0, ("nested execve"));29+ oldvmspace = td->td_proc->p_vmspace;30error = do_execve(td, args, mac_p);3132if (p->p_flag & P_HADTHREADS) {33@@ -313,6 +316,12 @@ kern_execve(td, args, mac_p)34thread_single_end();35PROC_UNLOCK(p);36}37+ if ((td->td_pflags & TDP_EXECVMSPC) != 0) {38+ KASSERT(td->td_proc->p_vmspace != oldvmspace,39+ ("oldvmspace still used"));40+ vmspace_free(oldvmspace);41+ td->td_pflags &= ~TDP_EXECVMSPC;42+ }4344return (error);45}46Index: sys/vm/vm_map.c47===================================================================48--- sys/vm/vm_map.c (revision 266581)49+++ sys/vm/vm_map.c (revision 266582)50@@ -3751,6 +3751,8 @@ vmspace_exec(struct proc *p, vm_offset_t minuser,51struct vmspace *oldvmspace = p->p_vmspace;52struct vmspace *newvmspace;5354+ KASSERT((curthread->td_pflags & TDP_EXECVMSPC) == 0,55+ ("vmspace_exec recursed"));56newvmspace = vmspace_alloc(minuser, maxuser, NULL);57if (newvmspace == NULL)58return (ENOMEM);59@@ -3767,7 +3769,7 @@ vmspace_exec(struct proc *p, vm_offset_t minuser,60PROC_VMSPACE_UNLOCK(p);61if (p == curthread->td_proc)62pmap_activate(curthread);63- vmspace_free(oldvmspace);64+ curthread->td_pflags |= TDP_EXECVMSPC;65return (0);66}6768Index: .69===================================================================70--- . (revision 266581)71+++ . (revision 266582)7273Property changes on: .74___________________________________________________________________75Modified: svn:mergeinfo76Merged /head:r266464777879