⬢ DragonFlyBSD Kernel Audit
DF-3206 / fix.diff
← back to finding ↓ download raw
--- a/sys/vfs/isofs/cd9660/cd9660_lookup.c
+++ b/sys/vfs/isofs/cd9660/cd9660_lookup.c
@@ -335,14 +335,17 @@ found:
 	/*
 	 * If ino is different from dp->i_ino,
 	 * it's a relocated directory.
 	 */
 	if (flags & CNP_ISDOTDOT) {
+		ino_t parent_ino = dp->i_ino;	/* shared scan-scratch */
+		int relocated = (dp->i_ino != ino);
 		vn_unlock(pdp);	/* race to get the inode */
-		error = cd9660_vget_internal(vdp->v_mount, dp->i_ino, &tdp,
-					     dp->i_ino != ino, ep);
+		error = cd9660_vget_internal(vdp->v_mount, parent_ino, &tdp,
+					     relocated, ep);
 		brelse(bp);
 		if (error) {
 			vn_lock(pdp, LK_EXCLUSIVE | LK_RETRY);
 			return (error);