diff mbox series

libtracefs: Fix various memory issues

Message ID 20220223011300.377389b9@rorschach.local.home (mailing list archive)
State Accepted
Commit f35dc1dc736ef0982739e0f8aa380d85a42fce45
Headers show
Series libtracefs: Fix various memory issues | expand

Commit Message

Steven Rostedt Feb. 23, 2022, 6:13 a.m. UTC
From: "Steven Rostedt (Google)" <rostedt@goodmis.org>

Running "make test_mem" which calls valgrind on the unit tests, uncovered
various issues with allocations, initialization and freeing.

Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
---
 src/tracefs-dynevents.c |  3 ++-
 src/tracefs-hist.c      |  2 ++
 src/tracefs-sqlhist.c   |  2 +-
 src/tracefs-utils.c     | 10 ++++------
 utest/tracefs-utest.c   |  2 ++
 5 files changed, 11 insertions(+), 8 deletions(-)
diff mbox series

Patch

diff --git a/src/tracefs-dynevents.c b/src/tracefs-dynevents.c
index ddebb6bb68b0..61804b9d9d5e 100644
--- a/src/tracefs-dynevents.c
+++ b/src/tracefs-dynevents.c
@@ -120,7 +120,7 @@  static int dyn_generic_parse(struct dyn_events_desc *desc, const char *group,
 	struct tracefs_dynevent *dyn;
 	char *word;
 	char *format = NULL;
-	char *address;
+	char *address = NULL;
 	char *system;
 	char *prefix;
 	char *event;
@@ -582,6 +582,7 @@  tracefs_dynevent_get_all(unsigned int types, const char *system)
 			all += count;
 			/* Add a NULL pointer at the end */
 			all_events[all] = NULL;
+			free(events);
 		}
 	}
 
diff --git a/src/tracefs-hist.c b/src/tracefs-hist.c
index aec61ad52e72..96eb63338d02 100644
--- a/src/tracefs-hist.c
+++ b/src/tracefs-hist.c
@@ -745,12 +745,14 @@  void tracefs_synth_free(struct tracefs_synth *synth)
 	free(synth->end_hist);
 	tracefs_list_free(synth->synthetic_fields);
 	tracefs_list_free(synth->synthetic_args);
+	tracefs_list_free(synth->start_selection);
 	tracefs_list_free(synth->start_keys);
 	tracefs_list_free(synth->end_keys);
 	tracefs_list_free(synth->start_vars);
 	tracefs_list_free(synth->end_vars);
 	free(synth->start_filter);
 	free(synth->end_filter);
+	free(synth->start_type);
 
 	tep_unref(synth->tep);
 
diff --git a/src/tracefs-sqlhist.c b/src/tracefs-sqlhist.c
index 016f3eb23725..63f8ddf71103 100644
--- a/src/tracefs-sqlhist.c
+++ b/src/tracefs-sqlhist.c
@@ -1538,7 +1538,7 @@  static void free_sql_table(struct sql_table *table)
 		return;
 
 	while ((expr = table->exprs)) {
-		table->exprs = expr->next;
+		table->exprs = expr->free_list;
 		free(expr);
 	}
 
diff --git a/src/tracefs-utils.c b/src/tracefs-utils.c
index a502c2dec736..35f25ef6bddf 100644
--- a/src/tracefs-utils.c
+++ b/src/tracefs-utils.c
@@ -183,18 +183,16 @@  const char *tracefs_tracing_dir(void)
  */
 char *tracefs_get_tracing_file(const char *name)
 {
-	static const char *tracing;
+	const char *tracing;
 	char *file;
 	int ret;
 
 	if (!name)
 		return NULL;
 
-	if (!tracing) {
-		tracing = trace_find_tracing_dir();
-		if (!tracing)
-			return NULL;
-	}
+	tracing = tracefs_tracing_dir();
+	if (!tracing)
+		return NULL;
 
 	ret = asprintf(&file, "%s/%s", tracing, name);
 	if (ret < 0)
diff --git a/utest/tracefs-utest.c b/utest/tracefs-utest.c
index e8d5c6981ef2..09032438f425 100644
--- a/utest/tracefs-utest.c
+++ b/utest/tracefs-utest.c
@@ -430,6 +430,8 @@  static void test_synth_compare(struct test_synth *synth, struct tracefs_dynevent
 		if (synth[i].match_name) {
 			CU_TEST(strstr(format, synth[i].match_name) != NULL);
 		}
+		free(event);
+		free(format);
 	}
 	CU_TEST(devents[i] == NULL);
 }