Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 23 Feb 2017 17:56:25 +0000 (UTC)
From:      Mark Johnston <markj@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r314154 - head/cddl/contrib/opensolaris/lib/libdtrace/common
Message-ID:  <201702231756.v1NHuP7w087454@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: markj
Date: Thu Feb 23 17:56:24 2017
New Revision: 314154
URL: https://svnweb.freebsd.org/changeset/base/314154

Log:
  Fix memory leaks in error cases in libdtrace.
  
  Submitted by:	Tom Rix <trix@juniper.net>
  MFC after:	1 week
  Differential Revision:	https://reviews.freebsd.org/D9705

Modified:
  head/cddl/contrib/opensolaris/lib/libdtrace/common/dt_open.c
  head/cddl/contrib/opensolaris/lib/libdtrace/common/dt_strtab.c

Modified: head/cddl/contrib/opensolaris/lib/libdtrace/common/dt_open.c
==============================================================================
--- head/cddl/contrib/opensolaris/lib/libdtrace/common/dt_open.c	Thu Feb 23 17:54:17 2017	(r314153)
+++ head/cddl/contrib/opensolaris/lib/libdtrace/common/dt_open.c	Thu Feb 23 17:56:24 2017	(r314154)
@@ -931,9 +931,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;
@@ -1148,8 +1150,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: head/cddl/contrib/opensolaris/lib/libdtrace/common/dt_strtab.c
==============================================================================
--- head/cddl/contrib/opensolaris/lib/libdtrace/common/dt_strtab.c	Thu Feb 23 17:54:17 2017	(r314153)
+++ head/cddl/contrib/opensolaris/lib/libdtrace/common/dt_strtab.c	Thu Feb 23 17:56:24 2017	(r314154)
@@ -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?201702231756.v1NHuP7w087454>