Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 2 Aug 2016 18:13:50 +0000 (UTC)
From:      "Conrad E. Meyer" <cem@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r303669 - head/lib/libproc
Message-ID:  <201608021813.u72IDoDv058571@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: cem
Date: Tue Aug  2 18:13:50 2016
New Revision: 303669
URL: https://svnweb.freebsd.org/changeset/base/303669

Log:
  proc_init: Fix a few memory leaks of 'phdl'
  
  In the normal case and correct failure cases, the 'phdl' pointer is passed to
  callers to use or clean up as needed.  However, some failure cases returned
  early, failing to export the phdl pointer.
  
  This was introduced in the restructuring of r303533.
  
  Reported by:	Coverity
  CID:		1361070
  Reviewed by:	markj
  Sponsored by:	EMC / Isilon Storage Division

Modified:
  head/lib/libproc/proc_create.c

Modified: head/lib/libproc/proc_create.c
==============================================================================
--- head/lib/libproc/proc_create.c	Tue Aug  2 17:23:45 2016	(r303668)
+++ head/lib/libproc/proc_create.c	Tue Aug  2 18:13:50 2016	(r303669)
@@ -73,9 +73,9 @@ proc_init(pid_t pid, int flags, int stat
 	struct proc_handle *phdl;
 	int error, class, count, fd;
 
-	*pphdl = NULL;
+	error = ENOMEM;
 	if ((phdl = malloc(sizeof(*phdl))) == NULL)
-		return (ENOMEM);
+		goto out;
 
 	memset(phdl, 0, sizeof(*phdl));
 	phdl->pid = pid;
@@ -83,17 +83,17 @@ proc_init(pid_t pid, int flags, int stat
 	phdl->status = status;
 	phdl->procstat = procstat_open_sysctl();
 	if (phdl->procstat == NULL)
-		return (ENOMEM);
+		goto out;
 
 	/* Obtain a path to the executable. */
 	if ((kp = procstat_getprocs(phdl->procstat, KERN_PROC_PID, pid,
 	    &count)) == NULL)
-		return (ENOMEM);
+		goto out;
 	error = procstat_getpathname(phdl->procstat, kp, phdl->execpath,
 	    sizeof(phdl->execpath));
 	procstat_freeprocs(phdl->procstat, kp);
 	if (error != 0)
-		return (error);
+		goto out;
 
 	/* Use it to determine the data model for the process. */
 	if ((fd = open(phdl->execpath, O_RDONLY)) < 0) {



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