mirror of
https://github.com/opnsense/src.git
synced 2026-03-28 13:43:12 -04:00
Revert the last change..
Better to kill all other threads than to panic the system if 2 threads call execve() at the same time. A better fix will be committed later. Note that this only affects the case where the execve fails.
This commit is contained in:
parent
7789933b6a
commit
2e2e32b201
1 changed files with 11 additions and 17 deletions
|
|
@ -254,6 +254,17 @@ kern_execve(td, fname, argv, envv, mac_p)
|
|||
PROC_LOCK(p);
|
||||
KASSERT((p->p_flag & P_INEXEC) == 0,
|
||||
("%s(): process already has P_INEXEC flag", __func__));
|
||||
if (p->p_flag & P_HADTHREADS) {
|
||||
if (thread_single(SINGLE_EXIT)) {
|
||||
PROC_UNLOCK(p);
|
||||
mtx_unlock(&Giant);
|
||||
return (ERESTART); /* Try again later. */
|
||||
}
|
||||
/*
|
||||
* If we get here all other threads are dead,
|
||||
* and threading mode has been turned off
|
||||
*/
|
||||
}
|
||||
p->p_flag |= P_INEXEC;
|
||||
PROC_UNLOCK(p);
|
||||
|
||||
|
|
@ -345,23 +356,6 @@ interpret:
|
|||
if (error)
|
||||
goto exec_fail_dealloc;
|
||||
|
||||
PROC_LOCK(p);
|
||||
if (p->p_flag & P_HADTHREADS) {
|
||||
if (thread_single(SINGLE_EXIT)) {
|
||||
PROC_UNLOCK(p);
|
||||
error = ERESTART;
|
||||
goto exec_fail_dealloc;
|
||||
}
|
||||
/*
|
||||
* If we get here all other threads are dead,
|
||||
* and threading mode has been turned off.
|
||||
* Returning to the user from this point on
|
||||
* may confuse the thread library as some threads
|
||||
* will have just "died".
|
||||
*/
|
||||
}
|
||||
PROC_UNLOCK(p);
|
||||
|
||||
/*
|
||||
* If the current process has a special image activator it
|
||||
* wants to try first, call it. For example, emulating shell
|
||||
|
|
|
|||
Loading…
Reference in a new issue