MFC r196592:
Fix a LOR between allprison_lock and vnode locks by releasing allprison_lock before releasing a prison's root vnode. PR: kern/138004 Reviewed by: kib Approved by: re (rwatson), bz (mentor)
This commit is contained in:
parent
ee1db5ae45
commit
f37b0a3db5
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/stable/8/; revision=196699
@ -2453,7 +2453,7 @@ prison_deref(struct prison *pr, int flags)
|
|||||||
ppr = pr->pr_parent;
|
ppr = pr->pr_parent;
|
||||||
for (tpr = ppr; tpr != NULL; tpr = tpr->pr_parent)
|
for (tpr = ppr; tpr != NULL; tpr = tpr->pr_parent)
|
||||||
tpr->pr_childcount--;
|
tpr->pr_childcount--;
|
||||||
sx_downgrade(&allprison_lock);
|
sx_xunlock(&allprison_lock);
|
||||||
|
|
||||||
#ifdef VIMAGE
|
#ifdef VIMAGE
|
||||||
if (pr->pr_vnet != ppr->pr_vnet)
|
if (pr->pr_vnet != ppr->pr_vnet)
|
||||||
@ -2479,7 +2479,7 @@ prison_deref(struct prison *pr, int flags)
|
|||||||
/* Removing a prison frees a reference on its parent. */
|
/* Removing a prison frees a reference on its parent. */
|
||||||
pr = ppr;
|
pr = ppr;
|
||||||
mtx_lock(&pr->pr_mtx);
|
mtx_lock(&pr->pr_mtx);
|
||||||
flags = PD_DEREF | PD_LIST_SLOCKED;
|
flags = PD_DEREF;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user