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>