aboutsummaryrefslogtreecommitdiff
path: root/cddl/contrib/opensolaris/lib/libdtrace
diff options
context:
space:
mode:
authorMark Johnston <markj@FreeBSD.org>2017-02-23 17:56:24 +0000
committerMark Johnston <markj@FreeBSD.org>2017-02-23 17:56:24 +0000
commitd935f34b8fb6087725e61d03a6302aeebb5eaed9 (patch)
tree8207a4db7c687be26373ce7e968e8b4e16d576b3 /cddl/contrib/opensolaris/lib/libdtrace
parent74d9553e43cfafc29448d0bb836916aa21dea0de (diff)
downloadsrc-d935f34b8fb6087725e61d03a6302aeebb5eaed9.tar.gz
src-d935f34b8fb6087725e61d03a6302aeebb5eaed9.zip
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
Notes
Notes: svn path=/head/; revision=314154
Diffstat (limited to 'cddl/contrib/opensolaris/lib/libdtrace')
-rw-r--r--cddl/contrib/opensolaris/lib/libdtrace/common/dt_open.c8
-rw-r--r--cddl/contrib/opensolaris/lib/libdtrace/common/dt_strtab.c4
2 files changed, 9 insertions, 3 deletions
diff --git a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_open.c b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_open.c
index 77d8386bc80f..3a8061ed94d0 100644
--- a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_open.c
+++ b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_open.c
@@ -931,9 +931,11 @@ dt_provmod_open(dt_provmod_t **provmod, dt_fdlist_t *dfp)
* 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 *errp,
(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;
diff --git a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_strtab.c b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_strtab.c
index 21669c84aefc..a735b6674a1e 100644
--- a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_strtab.c
+++ b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_strtab.c
@@ -256,8 +256,10 @@ dt_strtab_insert(dt_strtab_t *sp, const char *str)
* 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;