diff options
author | kib <kib@FreeBSD.org> | 2008-03-20 15:24:49 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2008-03-20 15:24:49 +0000 |
commit | 28174d9ffb5ad8d8298c439ab1a15ccf2c48d6ea (patch) | |
tree | f582ce6ed8c98e3544ab6a358402e13e51d89d5e | |
parent | f0a936f08baa3af224589d4dd8639a7e2a25a173 (diff) | |
download | FreeBSD-src-28174d9ffb5ad8d8298c439ab1a15ccf2c48d6ea.zip FreeBSD-src-28174d9ffb5ad8d8298c439ab1a15ccf2c48d6ea.tar.gz |
Fix the leak of the vmspace on the fork when the process limits
are exceeded.
Pointy hat to: me
MFC after: 3 days
-rw-r--r-- | sys/kern/kern_fork.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/kern/kern_fork.c b/sys/kern/kern_fork.c index 93f88f1..7dc42f4 100644 --- a/sys/kern/kern_fork.c +++ b/sys/kern/kern_fork.c @@ -256,6 +256,7 @@ norfproc_fail: * however it proved un-needed and caused problems */ + vm2 = NULL; /* Allocate new proc. */ newproc = uma_zalloc(proc_zone, M_WAITOK); if (TAILQ_EMPTY(&newproc->p_threads)) { @@ -281,8 +282,7 @@ norfproc_fail: error = ENOMEM; goto fail1; } - } else - vm2 = NULL; + } #ifdef MAC mac_proc_init(newproc); #endif @@ -740,6 +740,8 @@ fail: mac_proc_destroy(newproc); #endif fail1: + if (vm2 != NULL) + vmspace_free(vm2); uma_zfree(proc_zone, newproc); pause("fork", hz / 2); return (error); |