svn commit: r204675 - head/sys/fs/msdosfs

Konstantin Belousov kib at FreeBSD.org
Wed Mar 3 21:59:45 UTC 2010


Author: kib
Date: Wed Mar  3 21:59:45 2010
New Revision: 204675
URL: http://svn.freebsd.org/changeset/base/204675

Log:
  When returning error from msdosfs_lookup(), make sure that *vpp is NULL.
  lookup() KASSERTs this condition.
  
  Reported and tested by:	pho
  MFC after:	3 weeks

Modified:
  head/sys/fs/msdosfs/msdosfs_lookup.c

Modified: head/sys/fs/msdosfs/msdosfs_lookup.c
==============================================================================
--- head/sys/fs/msdosfs/msdosfs_lookup.c	Wed Mar  3 21:59:23 2010	(r204674)
+++ head/sys/fs/msdosfs/msdosfs_lookup.c	Wed Mar  3 21:59:45 2010	(r204675)
@@ -125,14 +125,14 @@ msdosfs_lookup_(struct vnode *vdp, struc
 #endif
 	dp = VTODE(vdp);
 	pmp = dp->de_pmp;
-	if (vpp != NULL)
-		*vpp = NULL;
 #ifdef MSDOSFS_DEBUG
 	printf("msdosfs_lookup(): vdp %p, dp %p, Attr %02x\n",
 	    vdp, dp, dp->de_Attributes);
 #endif
 
  restart:
+	if (vpp != NULL)
+		*vpp = NULL;
 	/*
 	 * If they are going after the . or .. entry in the root directory,
 	 * they won't find it.  DOS filesystems don't have them in the root
@@ -525,8 +525,10 @@ foundroot:
 	pdp = vdp;
 	if (flags & ISDOTDOT) {
 		error = msdosfs_deget_dotdot(pdp, cluster, blkoff, vpp);
-		if (error)
+		if (error) {
+			*vpp = NULL;
 			return (error);
+		}
 		/*
 		 * Recheck that ".." still points to the inode we
 		 * looked up before pdp lock was dropped.
@@ -534,6 +536,7 @@ foundroot:
 		error = msdosfs_lookup_(pdp, NULL, cnp, &inode1);
 		if (error) {
 			vput(*vpp);
+			*vpp = NULL;
 			return (error);
 		}
 		if (VTODE(*vpp)->de_inode != inode1) {


More information about the svn-src-head mailing list