tracing: Fix a couple of memory leaks in the event trigger code
Subsystems (2)
Steven Rostedt
maintainercover 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(-)
Steven Rostedt
maintainerPATCH 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.
--- kernel/trace/trace_events_filter.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
kernel/trace/trace_events_filter.c +4 -1
@@ -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
Steven Rostedt
maintainerPATCH 2/2 tracing: Fix memory leak in set_trigger_filter()
In reply to Steven RostedtFrom: "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.
--- kernel/trace/trace_events_trigger.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
kernel/trace/trace_events_trigger.c +4 -2
@@ -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
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 increate_filter()
tracing: Fix memory leak inset_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(-)
Steven Rostedt
maintainerQuoted 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 increate_filter()
tracing: Fix memory leak inset_trigger_filter()Sure, these look fine to me.
Reviewed-by Tom Zanussi <[email protected]>
Thanks a lot Tom!
-- Steve