summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_jail.c
diff options
context:
space:
mode:
authorjamie <jamie@FreeBSD.org>2009-08-27 16:15:51 +0000
committerjamie <jamie@FreeBSD.org>2009-08-27 16:15:51 +0000
commitc78efa488e95f358d89be10944703ba80f8990c5 (patch)
tree66a46e67c8da22f52160f26aa4c03f4fef9d87f1 /sys/kern/kern_jail.c
parent4d9083590fff80b5ac8fbf72d7a2b7ffee9fd744 (diff)
downloadFreeBSD-src-c78efa488e95f358d89be10944703ba80f8990c5.zip
FreeBSD-src-c78efa488e95f358d89be10944703ba80f8990c5.tar.gz
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: bz (mentor) MFC after: 3 days
Diffstat (limited to 'sys/kern/kern_jail.c')
-rw-r--r--sys/kern/kern_jail.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/sys/kern/kern_jail.c b/sys/kern/kern_jail.c
index 892d211..47201d2 100644
--- a/sys/kern/kern_jail.c
+++ b/sys/kern/kern_jail.c
@@ -2453,7 +2453,7 @@ prison_deref(struct prison *pr, int flags)
ppr = pr->pr_parent;
for (tpr = ppr; tpr != NULL; tpr = tpr->pr_parent)
tpr->pr_childcount--;
- sx_downgrade(&allprison_lock);
+ sx_xunlock(&allprison_lock);
#ifdef VIMAGE
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. */
pr = ppr;
mtx_lock(&pr->pr_mtx);
- flags = PD_DEREF | PD_LIST_SLOCKED;
+ flags = PD_DEREF;
}
}
OpenPOWER on IntegriCloud