While running various ftrace tests on new development code, the kmemleak
detector found some allocations that were not freed correctly. This fixes a couple of leaks in the event trigger code as well as in adding function trace filters in trace instances. -----BEGIN PGP SIGNATURE----- iIoEABYIADIWIQRRSw7ePDh/lE+zeZMp5XQQmuv6qgUCXBAHphQccm9zdGVkdEBn b29kbWlzLm9yZwAKCRAp5XQQmuv6qphzAP4mTz45V9gq9vyXCVPPzg8T6lV4ZjJh bPaumlHGumaJHAD9FipqlhCOCVfv8Qyxv5iWuBpoGKcp37ULb6d+dtM+qg4= =S1FK -----END PGP SIGNATURE----- Merge tag 'trace-v4.20-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace Pull tracing fixes from Steven Rostedt: "While running various ftrace tests on new development code, the kmemleak detector found some allocations that were not freed correctly. This fixes a couple of leaks in the event trigger code as well as in adding function trace filters in trace instances" * tag 'trace-v4.20-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace: tracing: Fix memory leak of instance function hash filters tracing: Fix memory leak in set_trigger_filter() tracing: Fix memory leak in create_filter()
This commit is contained in:
commit
b5884002dc
|
@ -5460,6 +5460,7 @@ void ftrace_destroy_filter_files(struct ftrace_ops *ops)
|
|||
if (ops->flags & FTRACE_OPS_FL_ENABLED)
|
||||
ftrace_shutdown(ops, 0);
|
||||
ops->flags |= FTRACE_OPS_FL_DELETED;
|
||||
ftrace_free_filter(ops);
|
||||
mutex_unlock(&ftrace_lock);
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue