summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_exec.c
diff options
context:
space:
mode:
authorjeff <jeff@FreeBSD.org>2006-02-02 08:39:39 +0000
committerjeff <jeff@FreeBSD.org>2006-02-02 08:39:39 +0000
commit01caaf4329dd320db9f84f7662214a8afc9a5747 (patch)
treea6f435349e4521126d3eeb86888b63c3e30d9ef4 /sys/kern/kern_exec.c
parentc19e41cb59a3877efa4fb9aec3d403238c8649db (diff)
downloadFreeBSD-src-01caaf4329dd320db9f84f7662214a8afc9a5747.zip
FreeBSD-src-01caaf4329dd320db9f84f7662214a8afc9a5747.tar.gz
- textvp may have been from a different mountpoint than ndp->ni_vp and
we may need to acquire giant to vrele it. Found by: mjacob MFC After: 3 days
Diffstat (limited to 'sys/kern/kern_exec.c')
-rw-r--r--sys/kern/kern_exec.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/sys/kern/kern_exec.c b/sys/kern/kern_exec.c
index 6522236..f55e196 100644
--- a/sys/kern/kern_exec.c
+++ b/sys/kern/kern_exec.c
@@ -723,8 +723,13 @@ done1:
/*
* Handle deferred decrement of ref counts.
*/
- if (textvp != NULL)
+ if (textvp != NULL) {
+ int tvfslocked;
+
+ tvfslocked = VFS_LOCK_GIANT(textvp->v_mount);
vrele(textvp);
+ VFS_UNLOCK_GIANT(tvfslocked);
+ }
if (ndp->ni_vp && error != 0)
vrele(ndp->ni_vp);
#ifdef KTRACE
OpenPOWER on IntegriCloud