Return with the process locked, caller expects p still locked after

the call.

Reported and tested by:	bapt
Sponsored by:	The FreeBSD Foundation
MFC after:	3 days
This commit is contained in:
kib 2015-02-15 08:43:19 +00:00
parent 03988df8a2
commit 105218e4a7

View File

@ -239,13 +239,13 @@ reap_kill(struct thread *td, struct proc *p, struct procctl_reaper_kill *rk)
int error, error1;
sx_assert(&proctree_lock, SX_LOCKED);
PROC_UNLOCK(p);
if (IN_CAPABILITY_MODE(td))
return (ECAPMODE);
if (rk->rk_sig <= 0 || rk->rk_sig > _SIG_MAXSIG)
return (EINVAL);
if ((rk->rk_flags & ~REAPER_KILL_CHILDREN) != 0)
return (EINVAL);
PROC_UNLOCK(p);
reap = (p->p_treeflag & P_TREE_REAPER) == 0 ? p->p_reaper : p;
ksiginfo_init(&ksi);
ksi.ksi_signo = rk->rk_sig;