svn commit: r303669 - head/lib/libproc
Conrad E. Meyer
cem at FreeBSD.org
Tue Aug 2 18:13:51 UTC 2016
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) {
More information about the svn-src-head
mailing list