aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/init_main.c
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2020-09-23 18:03:07 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2020-09-23 18:03:07 +0000
commitaaf78c16f5087b0fd998f97696ab492ee30e30f4 (patch)
tree94955284fbfa0381156514df07f448014317ed09 /sys/kern/init_main.c
parenteb7e125e5880dc8c115cc4283ae6b86d9e7a4a55 (diff)
downloadsrc-aaf78c16f5087b0fd998f97696ab492ee30e30f4.tar.gz
src-aaf78c16f5087b0fd998f97696ab492ee30e30f4.zip
Do not leak oldvmspace if image activation failed
and current address space is already destroyed, so kern_execve() terminates the process. While there, clean up some internals of post_execve() inlined in init_main. Reported by: Peter <pmc@citylink.dinoex.sub.org> Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D26525
Notes
Notes: svn path=/head/; revision=366085
Diffstat (limited to 'sys/kern/init_main.c')
-rw-r--r--sys/kern/init_main.c9
1 files changed, 2 insertions, 7 deletions
diff --git a/sys/kern/init_main.c b/sys/kern/init_main.c
index f3531c061e8c..045e2797a2f4 100644
--- a/sys/kern/init_main.c
+++ b/sys/kern/init_main.c
@@ -752,16 +752,11 @@ start_init(void *dummy)
KASSERT((td->td_pflags & TDP_EXECVMSPC) == 0,
("nested execve"));
oldvmspace = td->td_proc->p_vmspace;
- error = kern_execve(td, &args, NULL);
+ error = kern_execve(td, &args, NULL, oldvmspace);
KASSERT(error != 0,
("kern_execve returned success, not EJUSTRETURN"));
if (error == EJUSTRETURN) {
- if ((td->td_pflags & TDP_EXECVMSPC) != 0) {
- KASSERT(p->p_vmspace != oldvmspace,
- ("oldvmspace still used"));
- vmspace_free(oldvmspace);
- td->td_pflags &= ~TDP_EXECVMSPC;
- }
+ exec_cleanup(td, oldvmspace);
free(free_init_path, M_TEMP);
TSEXIT();
return;