Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 30 Sep 2019 14:32:41 +0000 (UTC)
From:      Xin LI <delphij@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-releng@freebsd.org
Subject:   svn commit: r352902 - releng/12.1/sbin/fsck_msdosfs
Message-ID:  <201909301432.x8UEWfLS068346@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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;
 }
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201909301432.x8UEWfLS068346>