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
This commit is contained in:
parent
875e108755
commit
9e4ce0ae8f
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=151391
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user