Author: delphij
Date: Mon Sep 30 14:32:41 2019
New Revision: 352902
URL: https://svnweb.freebsd.org/changeset/base/352902

Log:
  MFS r352872: MFC r351802:
  
  Correct overflow logic in fullpath().
  
  Obtained from:        OpenBSD
  Approved by:  re (gjb)

Modified:
  releng/12.1/sbin/fsck_msdosfs/dir.c
Directory Properties:
  releng/12.1/   (props changed)

Modified: releng/12.1/sbin/fsck_msdosfs/dir.c
==============================================================================
--- releng/12.1/sbin/fsck_msdosfs/dir.c Mon Sep 30 14:19:18 2019        
(r352901)
+++ releng/12.1/sbin/fsck_msdosfs/dir.c Mon Sep 30 14:32:41 2019        
(r352902)
@@ -168,20 +168,24 @@ fullpath(struct dosDirEntry *dir)
        char *cp, *np;
        int nl;
 
-       cp = namebuf + sizeof namebuf - 1;
-       *cp = '\0';
-       do {
+       cp = namebuf + sizeof namebuf;
+       *--cp = '\0';
+
+       for(;;) {
                np = dir->lname[0] ? dir->lname : dir->name;
                nl = strlen(np);
-               if ((cp -= nl) <= namebuf + 1)
+               if (cp <= namebuf + 1 + nl) {
+                       *--cp = '?';
                        break;
+               }
+               cp -= nl;
                memcpy(cp, np, nl);
+               dir = dir->parent;
+               if (!dir)
+                       break;
                *--cp = '/';
-       } while ((dir = dir->parent) != NULL);
-       if (dir)
-               *--cp = '?';
-       else
-               cp++;
+       }
+
        return cp;
 }
 
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to