From 199934d64b0cf348cb2f63cbe6d749d249ffdbb0 Mon Sep 17 00:00:00 2001 From: truckman Date: Sun, 16 Oct 2005 21:39:29 +0000 Subject: [PATCH] Apply the same fix to a potential race in the ISDOTDOT code in ext2_lookup() that was used to fix an actual race in ufs_lookup.c:1.78. This is not currently a hazard, but the bug would be activated by marking ext2fs as MPSAFE. Requested by: bde MFC after: 2 weeks --- sys/gnu/fs/ext2fs/ext2_lookup.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sys/gnu/fs/ext2fs/ext2_lookup.c b/sys/gnu/fs/ext2fs/ext2_lookup.c index a23887860c9..d057e2a9d07 100644 --- a/sys/gnu/fs/ext2fs/ext2_lookup.c +++ b/sys/gnu/fs/ext2fs/ext2_lookup.c @@ -319,6 +319,7 @@ ext2_lookup(ap) int flags = cnp->cn_flags; int nameiop = cnp->cn_nameiop; struct thread *td = cnp->cn_thread; + ino_t saved_ino; int DIRBLKSIZ = VTOI(ap->a_dvp)->i_e2fs->s_blocksize; @@ -655,8 +656,9 @@ ext2_lookup(ap) */ pdp = vdp; if (flags & ISDOTDOT) { + saved_ino = dp->i_ino; VOP_UNLOCK(pdp, 0, td); /* race to get the inode */ - error = VFS_VGET(vdp->v_mount, dp->i_ino, LK_EXCLUSIVE, &tdp); + error = VFS_VGET(vdp->v_mount, saved_ino, LK_EXCLUSIVE, &tdp); vn_lock(pdp, LK_EXCLUSIVE | LK_RETRY, td); if (error != 0) return (error); -- 2.45.2