Move setugidsafety() call outside of process lock. This prevents a lock

recursion when closef() calls pfind() which also wants the proc lock.
This case only occurred when setugidsafety() needed to close unsafe files.

Reviewed by:	truckman
This commit is contained in:
Nate Lawson 2002-09-14 18:55:11 +00:00
parent e47c217844
commit c1e2d3866f
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=103326

View File

@ -435,15 +435,17 @@ execve(td, uap)
mtx_unlock(&ktrace_mtx);
}
#endif
/* Close any file descriptors 0..2 that reference procfs */
setugidsafety(td);
/*
* Make sure file descriptors 0..2 are in use.
* Close any file descriptors 0..2 that reference procfs,
* then make sure file descriptors 0..2 are in use.
*
* setugidsafety() may call closef() and then pfind()
* which may grab the process lock.
* fdcheckstd() may call falloc() which may block to
* allocate memory, so temporarily drop the process lock.
*/
PROC_UNLOCK(p);
setugidsafety(td);
error = fdcheckstd(td);
PROC_LOCK(p);
if (error != 0)