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) {
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to