diff options
author | jhb <jhb@FreeBSD.org> | 2004-03-05 22:38:26 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2004-03-05 22:38:26 +0000 |
commit | 445ca6326439a96317576913679ff52f926a55da (patch) | |
tree | e6e421d22f070a74c760459813e136943535f482 /sys/kern/kern_exec.c | |
parent | af72c48e5f93796905ca57930c12e3baf951d1c9 (diff) | |
download | FreeBSD-src-445ca6326439a96317576913679ff52f926a55da.zip FreeBSD-src-445ca6326439a96317576913679ff52f926a55da.tar.gz |
Lock Giant around the single threading code in exec() to satisfy an
assertion in the single threading code.
Diffstat (limited to 'sys/kern/kern_exec.c')
-rw-r--r-- | sys/kern/kern_exec.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/sys/kern/kern_exec.c b/sys/kern/kern_exec.c index 4d2a7fe..d4508c6 100644 --- a/sys/kern/kern_exec.c +++ b/sys/kern/kern_exec.c @@ -253,12 +253,14 @@ kern_execve(td, fname, argv, envv, mac_p) * that might allow a local user to illicitly obtain elevated * privileges. */ + mtx_lock(&Giant); PROC_LOCK(p); KASSERT((p->p_flag & P_INEXEC) == 0, ("%s(): process already has P_INEXEC flag", __func__)); if (p->p_flag & P_SA || p->p_numthreads > 1) { if (thread_single(SINGLE_EXIT)) { PROC_UNLOCK(p); + mtx_unlock(&Giant); return (ERESTART); /* Try again later. */ } /* @@ -269,6 +271,7 @@ kern_execve(td, fname, argv, envv, mac_p) td->td_mailbox = NULL; thread_single_end(); } + mtx_unlock(&Giant); p->p_flag |= P_INEXEC; PROC_UNLOCK(p); |