Path: blob/main/website/static/security/patches/EN-14:06/exec-8.patch
18096 views
Index: sys/kern/kern_exec.c1===================================================================2--- sys/kern/kern_exec.c (revision 266582)3+++ sys/kern/kern_exec.c (revision 266583)4@@ -278,6 +278,7 @@ kern_execve(td, args, mac_p)5struct mac *mac_p;6{7struct proc *p = td->td_proc;8+ struct vmspace *oldvmspace;9int error;1011AUDIT_ARG_ARGV(args->begin_argv, args->argc,12@@ -294,6 +295,8 @@ kern_execve(td, args, mac_p)13PROC_UNLOCK(p);14}1516+ KASSERT((td->td_pflags & TDP_EXECVMSPC) == 0, ("nested execve"));17+ oldvmspace = td->td_proc->p_vmspace;18error = do_execve(td, args, mac_p);1920if (p->p_flag & P_HADTHREADS) {21@@ -308,6 +311,12 @@ kern_execve(td, args, mac_p)22thread_single_end();23PROC_UNLOCK(p);24}25+ if ((td->td_pflags & TDP_EXECVMSPC) != 0) {26+ KASSERT(td->td_proc->p_vmspace != oldvmspace,27+ ("oldvmspace still used"));28+ vmspace_free(oldvmspace);29+ td->td_pflags &= ~TDP_EXECVMSPC;30+ }3132return (error);33}34Index: sys/kern35===================================================================36--- sys/kern (revision 266582)37+++ sys/kern (revision 266583)3839Property changes on: sys/kern40___________________________________________________________________41Modified: svn:mergeinfo42Merged /head/sys/kern:r26646443Index: sys/vm/vm_map.c44===================================================================45--- sys/vm/vm_map.c (revision 266582)46+++ sys/vm/vm_map.c (revision 266583)47@@ -3521,6 +3521,8 @@ vmspace_exec(struct proc *p, vm_offset_t minuser,48struct vmspace *oldvmspace = p->p_vmspace;49struct vmspace *newvmspace;5051+ KASSERT((curthread->td_pflags & TDP_EXECVMSPC) == 0,52+ ("vmspace_exec recursed"));53newvmspace = vmspace_alloc(minuser, maxuser);54if (newvmspace == NULL)55return (ENOMEM);56@@ -3537,7 +3539,7 @@ vmspace_exec(struct proc *p, vm_offset_t minuser,57PROC_VMSPACE_UNLOCK(p);58if (p == curthread->td_proc)59pmap_activate(curthread);60- vmspace_free(oldvmspace);61+ curthread->td_pflags |= TDP_EXECVMSPC;62return (0);63}6465Index: sys/vm66===================================================================67--- sys/vm (revision 266582)68+++ sys/vm (revision 266583)6970Property changes on: sys/vm71___________________________________________________________________72Modified: svn:mergeinfo73Merged /head/sys/vm:r26646474Index: sys/sys/proc.h75===================================================================76--- sys/sys/proc.h (revision 266582)77+++ sys/sys/proc.h (revision 266583)78@@ -414,6 +414,7 @@ do { \79#define TDP_AUDITREC 0x01000000 /* Audit record pending on thread */80#define TDP_RESETSPUR 0x04000000 /* Reset spurious page fault history. */81#define TDP_NERRNO 0x08000000 /* Last errno is already in td_errno */82+#define TDP_EXECVMSPC 0x40000000 /* Execve destroyed old vmspace */8384/*85* Reasons that the current thread can not be run yet.86Index: sys/sys87===================================================================88--- sys/sys (revision 266582)89+++ sys/sys (revision 266583)9091Property changes on: sys/sys92___________________________________________________________________93Modified: svn:mergeinfo94Merged /head/sys/sys:r26646495Index: sys96===================================================================97--- sys (revision 266582)98+++ sys (revision 266583)99100Property changes on: sys101___________________________________________________________________102Modified: svn:mergeinfo103Merged /head/sys:r266464104105106