diff options
author | Lai Jiangshan <laijs@cn.fujitsu.com> | 2009-11-25 03:32:21 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-11-27 00:43:04 -0500 |
commit | abab9d37d2a826fcf588c5f30152dbe05c40111c (patch) | |
tree | cc4bbdafb5dbf1883d714c1a650c5cc03f83512b /kernel | |
parent | 0f1ef51d244809f417bdf45cdb00109fb6005672 (diff) |
trace_kprobes: Fix memory leak
tp->nr_args is not set before we "goto error",
it causes memory leak for free_trace_probe() use tp->nr_args
to free memory of args.
Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
Acked-by: Masami Hiramatsu <mhiramat@redhat.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
LKML-Reference: <4B0CEB95.2060107@cn.fujitsu.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/trace/trace_kprobe.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c index 79ce6a2bd74f..82e85836d05e 100644 --- a/kernel/trace/trace_kprobe.c +++ b/kernel/trace/trace_kprobe.c | |||
@@ -704,10 +704,12 @@ static int create_trace_probe(int argc, char **argv) | |||
704 | ret = parse_probe_arg(arg, &tp->args[i].fetch, is_return); | 704 | ret = parse_probe_arg(arg, &tp->args[i].fetch, is_return); |
705 | if (ret) { | 705 | if (ret) { |
706 | pr_info("Parse error at argument%d. (%d)\n", i, ret); | 706 | pr_info("Parse error at argument%d. (%d)\n", i, ret); |
707 | kfree(tp->args[i].name); | ||
707 | goto error; | 708 | goto error; |
708 | } | 709 | } |
710 | |||
711 | tp->nr_args++; | ||
709 | } | 712 | } |
710 | tp->nr_args = i; | ||
711 | 713 | ||
712 | ret = register_trace_probe(tp); | 714 | ret = register_trace_probe(tp); |
713 | if (ret) | 715 | if (ret) |