Commit b5884002 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
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()
parents f5d58277 2840f84f
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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);
}

+4 −1
Original line number Diff line number Diff line
@@ -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;
}
+4 −2
Original line number Diff line number Diff line
@@ -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);