summaryrefslogtreecommitdiffstats
path: root/sys/kern/vfs_lookup.c
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2013-04-01 09:59:38 +0000
committerkib <kib@FreeBSD.org>2013-04-01 09:59:38 +0000
commit060b76c80320d06783ff631ada0fc18b70dcab91 (patch)
tree1314e50d0d98dd06d49f59461bfb11e907455bd4 /sys/kern/vfs_lookup.c
parent14e47b85779a0ab0b25fd1cd1141ef2f69835d00 (diff)
downloadFreeBSD-src-060b76c80320d06783ff631ada0fc18b70dcab91.zip
FreeBSD-src-060b76c80320d06783ff631ada0fc18b70dcab91.tar.gz
Do not call the VOP_LOOKUP() for the doomed directory vnode. The
vnode could be reclaimed while lock upgrade was performed. Sponsored by: The FreeBSD Foundation Reported and tested by: pho Diagnosed and reviewed by: rmacklem MFC after: 1 week
Diffstat (limited to 'sys/kern/vfs_lookup.c')
-rw-r--r--sys/kern/vfs_lookup.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/sys/kern/vfs_lookup.c b/sys/kern/vfs_lookup.c
index 94d11f2..cf73231 100644
--- a/sys/kern/vfs_lookup.c
+++ b/sys/kern/vfs_lookup.c
@@ -698,6 +698,10 @@ unionlookup:
VOP_ISLOCKED(dp) == LK_SHARED &&
(cnp->cn_flags & ISLASTCN) && (cnp->cn_flags & LOCKPARENT))
vn_lock(dp, LK_UPGRADE|LK_RETRY);
+ if ((dp->v_iflag & VI_DOOMED) != 0) {
+ error = ENOENT;
+ goto bad;
+ }
/*
* If we're looking up the last component and we need an exclusive
* lock, adjust our lkflags.
OpenPOWER on IntegriCloud