diff options
author | jeff <jeff@FreeBSD.org> | 2006-02-02 08:39:39 +0000 |
---|---|---|
committer | jeff <jeff@FreeBSD.org> | 2006-02-02 08:39:39 +0000 |
commit | 01caaf4329dd320db9f84f7662214a8afc9a5747 (patch) | |
tree | a6f435349e4521126d3eeb86888b63c3e30d9ef4 /sys/kern/kern_exec.c | |
parent | c19e41cb59a3877efa4fb9aec3d403238c8649db (diff) | |
download | FreeBSD-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.c | 7 |
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 |