diff options
author | jamie <jamie@FreeBSD.org> | 2009-08-27 16:15:51 +0000 |
---|---|---|
committer | jamie <jamie@FreeBSD.org> | 2009-08-27 16:15:51 +0000 |
commit | c78efa488e95f358d89be10944703ba80f8990c5 (patch) | |
tree | 66a46e67c8da22f52160f26aa4c03f4fef9d87f1 /sys/kern/kern_jail.c | |
parent | 4d9083590fff80b5ac8fbf72d7a2b7ffee9fd744 (diff) | |
download | FreeBSD-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.c | 4 |
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; } } |