svn commit: r328288 - head/stand/common

Warner Losh imp at FreeBSD.org
Tue Jan 23 18:01:19 UTC 2018


Author: imp
Date: Tue Jan 23 18:01:17 2018
New Revision: 328288
URL: https://svnweb.freebsd.org/changeset/base/328288

Log:
  Fix some resource leaks.
  
  Always free dev and fstyp before strduping new values to assign to
  them. Free them at the end of the loop. This keeps them from leaking
  for mal-formed /etc/fstab lines.
  
  CID: 1007777, 1007778, 1007779
  Sponsored by: Netflix

Modified:
  head/stand/common/boot.c

Modified: head/stand/common/boot.c
==============================================================================
--- head/stand/common/boot.c	Tue Jan 23 17:59:06 2018	(r328287)
+++ head/stand/common/boot.c	Tue Jan 23 18:01:17 2018	(r328288)
@@ -319,6 +319,8 @@ getrootmount(char *rootdev)
 	goto notfound;
 
     /* loop reading lines from /etc/fstab    What was that about sscanf again? */
+    fstyp = NULL;
+    dev = NULL;
     while (fgetstr(lbuf, sizeof(lbuf), fd) >= 0) {
 	if ((lbuf[0] == 0) || (lbuf[0] == '#'))
 	    continue;
@@ -330,6 +332,7 @@ getrootmount(char *rootdev)
 	    continue;
 	/* delimit and save */
 	*cp++ = 0;
+	free(dev);
 	dev = strdup(lbuf);
 
 	/* skip whitespace up to mountpoint */
@@ -349,6 +352,7 @@ getrootmount(char *rootdev)
 	while ((*cp != 0) && !isspace(*cp))
 	    cp++;
 	*cp = 0;
+	free(fstyp);
 	fstyp = strdup(ep);
 
 	/* skip whitespace up to mount options */
@@ -365,8 +369,6 @@ getrootmount(char *rootdev)
 	options = strdup(ep);
 	/* Build the <fstype>:<device> and save it in vfs.root.mountfrom */
 	sprintf(lbuf, "%s:%s", fstyp, dev);
-	free(dev);
-	free(fstyp);
 	setenv("vfs.root.mountfrom", lbuf, 0);
 
 	/* Don't override vfs.root.mountfrom.options if it is already set */
@@ -379,6 +381,8 @@ getrootmount(char *rootdev)
 	break;
     }
     close(fd);
+    free(dev);
+    free(fstyp);
 
 notfound:
     if (error) {
@@ -390,6 +394,7 @@ notfound:
 	    cp[strlen(cp) - 1] = '\0';
 	    setenv("vfs.root.mountfrom", cp, 0);
 	    error = 0;
+	    free(cp);
 	}
     }
 


More information about the svn-src-head mailing list