Date: Tue, 23 Jan 2018 18:01:18 +0000 (UTC) From: Warner Losh <imp@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r328288 - head/stand/common Message-ID: <201801231801.w0NI1IYb082052@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
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); } }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201801231801.w0NI1IYb082052>