Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 10 Mar 2017 18:54:48 +0000 (UTC)
From:      Mark Johnston <markj@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org
Subject:   svn commit: r315014 - in stable/11/cddl/contrib/opensolaris/lib: libctf/common libdtrace/common
Message-ID:  <201703101854.v2AIsmvO091118@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: markj
Date: Fri Mar 10 18:54:48 2017
New Revision: 315014
URL: https://svnweb.freebsd.org/changeset/base/315014

Log:
  MFC r314153, r314154:
  Fix some memory leaks in CDDL code.

Modified:
  stable/11/cddl/contrib/opensolaris/lib/libctf/common/ctf_lib.c
  stable/11/cddl/contrib/opensolaris/lib/libdtrace/common/dt_open.c
  stable/11/cddl/contrib/opensolaris/lib/libdtrace/common/dt_strtab.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/cddl/contrib/opensolaris/lib/libctf/common/ctf_lib.c
==============================================================================
--- stable/11/cddl/contrib/opensolaris/lib/libctf/common/ctf_lib.c	Fri Mar 10 18:53:44 2017	(r315013)
+++ stable/11/cddl/contrib/opensolaris/lib/libctf/common/ctf_lib.c	Fri Mar 10 18:54:48 2017	(r315014)
@@ -346,6 +346,7 @@ ctf_fdopen(int fd, int *errp)
 			if ((sp32 = malloc(nbytes)) == NULL || pread64(fd,
 			    sp32, nbytes, hdr.e64.e_shoff) != nbytes) {
 				free(sp);
+				free(sp32);
 				return (ctf_set_open_errno(errp, errno));
 			}
 

Modified: stable/11/cddl/contrib/opensolaris/lib/libdtrace/common/dt_open.c
==============================================================================
--- stable/11/cddl/contrib/opensolaris/lib/libdtrace/common/dt_open.c	Fri Mar 10 18:53:44 2017	(r315013)
+++ stable/11/cddl/contrib/opensolaris/lib/libdtrace/common/dt_open.c	Fri Mar 10 18:54:48 2017	(r315014)
@@ -933,9 +933,11 @@ dt_provmod_open(dt_provmod_t **provmod, 
 			 * reallocate it. We normally won't need to do this
 			 * because providers aren't being loaded all the time.
 			 */
-			if ((p = realloc(p_providers,len)) == NULL)
+		        if ((p = realloc(p_providers,len)) == NULL) {
+			        free(p_providers);
 				/* How do we report errors here? */
 				return;
+			}
 			p_providers = p;
 		} else
 			break;
@@ -1150,8 +1152,10 @@ dt_vopen(int version, int flags, int *er
 	(void) fcntl(ftfd, F_SETFD, FD_CLOEXEC);
 
 alloc:
-	if ((dtp = malloc(sizeof (dtrace_hdl_t))) == NULL)
+	if ((dtp = malloc(sizeof (dtrace_hdl_t))) == NULL) {
+	        dt_provmod_destroy(&provmod);
 		return (set_open_errno(dtp, errp, EDT_NOMEM));
+	}
 
 	bzero(dtp, sizeof (dtrace_hdl_t));
 	dtp->dt_oflags = flags;

Modified: stable/11/cddl/contrib/opensolaris/lib/libdtrace/common/dt_strtab.c
==============================================================================
--- stable/11/cddl/contrib/opensolaris/lib/libdtrace/common/dt_strtab.c	Fri Mar 10 18:53:44 2017	(r315013)
+++ stable/11/cddl/contrib/opensolaris/lib/libdtrace/common/dt_strtab.c	Fri Mar 10 18:54:48 2017	(r315014)
@@ -256,8 +256,10 @@ dt_strtab_insert(dt_strtab_t *sp, const 
 	 * Now copy the string data into our buffer list, and then update
 	 * the global counts of strings and bytes.  Return str's byte offset.
 	 */
-	if (dt_strtab_copyin(sp, str, len + 1) == -1)
+	if (dt_strtab_copyin(sp, str, len + 1) == -1) {
+		free(hp);
 		return (-1L);
+	}
 
 	sp->str_nstrs++;
 	sp->str_size += len + 1;



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