summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_exit.c
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2009-10-10 21:17:30 +0000
committerkib <kib@FreeBSD.org>2009-10-10 21:17:30 +0000
commit31d083f28a4a30350e3a9a373bc20d5e44c93d5d (patch)
tree436e0facb5cfcabd993027dada21c5c6e1bc4b4a /sys/kern/kern_exit.c
parentedf781a8157d148cc0bb8786425a0a55a751abcc (diff)
downloadFreeBSD-src-31d083f28a4a30350e3a9a373bc20d5e44c93d5d.zip
FreeBSD-src-31d083f28a4a30350e3a9a373bc20d5e44c93d5d.tar.gz
Refine r195509, instead of checking that vnode type is VBAD, that is
set quite late in the revocation path, properly verify that vnode is not doomed before calling VOP. Reported and tested by: Harald Schmalzbauer <h.schmalzbauer omnilan de> MFC after: 3 days
Diffstat (limited to 'sys/kern/kern_exit.c')
-rw-r--r--sys/kern/kern_exit.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/sys/kern/kern_exit.c b/sys/kern/kern_exit.c
index 39b48e0..b96cdbf 100644
--- a/sys/kern/kern_exit.c
+++ b/sys/kern/kern_exit.c
@@ -340,10 +340,10 @@ exit1(struct thread *td, int rv)
if (ttyvp != NULL) {
sx_xunlock(&proctree_lock);
- vn_lock(ttyvp, LK_EXCLUSIVE | LK_RETRY);
- if (ttyvp->v_type != VBAD)
+ if (vn_lock(ttyvp, LK_EXCLUSIVE) == 0) {
VOP_REVOKE(ttyvp, REVOKEALL);
- VOP_UNLOCK(ttyvp, 0);
+ VOP_UNLOCK(ttyvp, 0);
+ }
sx_xlock(&proctree_lock);
}
}
OpenPOWER on IntegriCloud