Skip to contentSkip to conversation

tracing: Fix a couple of memory leaks in the event trigger code

PATCH In review Steven Rostedt 2 participants 5 messages Dec 10, 2018 – Dec 11, 2018

Subsystems (2)
lore
Share & tools
lore

Steven Rostedt

author maintainer
#0 lore raw

cover tracing: Fix a couple of memory leaks in the event trigger code

Tom,

While testing other changes, kmemleak pointed out a few leaks in the trigger code. Can you take a look at them and give me a Reviewed-by or Ack.

Thanks!

-- Steve

Steven Rostedt (VMware) (2):
tracing: Fix memory leak in create_filter()
tracing: Fix memory leak in set_trigger_filter()

----

 kernel/trace/trace_events_filter.c  | 5 ++++-
 kernel/trace/trace_events_trigger.c | 6 ++++--
 2 files changed, 8 insertions(+), 3 deletions(-)
author maintainer
#1 lore raw

PATCH 1/2 tracing: Fix memory leak in create_filter()

From: "Steven Rostedt (VMware)" <[email protected]>

The create_filter() calls create_filter_start() which allocates a "parse_error" descriptor, but fails to call create_filter_finish() that frees it.

The op_stack and inverts in predicate_parse() were also not freed.

Found by kmemleak detector.

Cc Tom Zanussi <[email protected]>
Fixes 80765597bc587 ("tracing: Rewrite filter logic to be simpler and faster")
---
 kernel/trace/trace_events_filter.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
kernel/trace/trace_events_filter.c +4 -1
index 84a65173b1e9..5574e862de8d 100644
@@ -570,11 +570,13 @@ predicate_parse(const char *str, int nr_parens, int nr_preds,
 		}
 	}
 
+	kfree(op_stack);
+	kfree(inverts);
 	return prog;
 out_free:
 	kfree(op_stack);
-	kfree(prog_stack);
 	kfree(inverts);
+	kfree(prog_stack);
 	return ERR_PTR(ret);
 }
 
@@ -1718,6 +1720,7 @@ static int create_filter(struct trace_event_call *call,
 	err = process_preds(call, filter_string, *filterp, pe);
 	if (err && set_str)
 		append_filter_err(pe, *filterp);
+	create_filter_finish(pe);
 
 	return err;
 }
Signature · 1 line
2.19.1
author maintainer
#2 lore raw

PATCH 2/2 tracing: Fix memory leak in set_trigger_filter()

In reply to Steven Rostedt

From: "Steven Rostedt (VMware)" <[email protected]>

When create_event_filter() fails in set_trigger_filter(), the filter may still be allocated and needs to be freed. The caller expects the data->filter to be updated with the new filter, even if the new filter failed (we could add an error message by setting set_str parameter of create_event_filter(), but that's another update).

But because the error would just exit, filter was left hanging and nothing could free it.

Found by kmemleak detector.

Cc Tom Zanussi <[email protected]>
Fixes bac5fb97a173a ("tracing: Add and use generic set_trigger_filter() implementation")
---
 kernel/trace/trace_events_trigger.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)
kernel/trace/trace_events_trigger.c +4 -2
index 2152d1e530cb..cd12ecb66eb9 100644
@@ -732,8 +732,10 @@ int set_trigger_filter(char *filter_str,
 
 	/* The filter is for the 'trigger' event, not the triggered event */
 	ret = create_event_filter(file->event_call, filter_str, false, &filter);
-	if (ret)
-		goto out;
+	/*
+	 * If create_event_filter() fails, filter still needs to be freed.
+	 * Which the calling code will do with data->filter.
+	 */
  assign:
 	tmp = rcu_access_pointer(data->filter);
 
Signature · 1 line
2.19.1
Reviewed-by on the v1 series
#3 lore raw
In reply to Steven Rostedt

Hi Steve,

Quoted 6 lines · Steven Rostedt

Tom,

While testing other changes, kmemleak pointed out a few leaks in the trigger code. Can you take a look at them and give me a Reviewed-by or Ack.

Quoted 9 lines

Thanks!

-- Steve

Steven Rostedt (VMware) (2):
tracing: Fix memory leak in create_filter()
tracing: Fix memory leak in set_trigger_filter()

Sure, these look fine to me.

Thanks,

Tom

Quoted 4 lines

----

 kernel/trace/trace_events_filter.c  | 5 ++++-
 kernel/trace/trace_events_trigger.c | 6 ++++--
 2 files changed, 8 insertions(+), 3 deletions(-)
author maintainer
#4 lore raw
Quoted 14 lines · On Tue, 11 Dec 2018 10:40:19 -0600 Tom Zanussi <[email protected]>…

Hi Steve,

Quoted 11 lines · Steven Rostedt

Tom,

While testing other changes, kmemleak pointed out a few leaks in the trigger code. Can you take a look at them and give me a Reviewed-by or Ack.

Thanks!

-- Steve

Quoted 10 lines
Quoted 4 lines

Steven Rostedt (VMware) (2):
tracing: Fix memory leak in create_filter()
tracing: Fix memory leak in set_trigger_filter()

Sure, these look fine to me.

Thanks a lot Tom!

-- Steve