forked from Minki/linux
perf probe: Fix memory leaking on failure by clearing all probe_trace_events
Fix memory leaking on the debuginfo__find_trace_events() failure path which frees an array of probe_trace_events but doesn't clears all the allocated sub-structures and strings. So, before doing zfree(tevs), clear all the array elements which may have allocated resources. Reported-by: Wang Nan <wangnan0@huawei.com> Signed-off-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> Cc: Alexei Starovoitov <ast@kernel.org> Cc: Zefan Li <lizefan@huawei.com> Cc: pi3orama@163.com Link: http://lkml.kernel.org/r/1447417761-156094-2-git-send-email-wangnan0@huawei.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
d8145b3e30
commit
0196e787ce
@ -1246,7 +1246,7 @@ int debuginfo__find_trace_events(struct debuginfo *dbg,
|
||||
struct trace_event_finder tf = {
|
||||
.pf = {.pev = pev, .callback = add_probe_trace_event},
|
||||
.max_tevs = probe_conf.max_probes, .mod = dbg->mod};
|
||||
int ret;
|
||||
int ret, i;
|
||||
|
||||
/* Allocate result tevs array */
|
||||
*tevs = zalloc(sizeof(struct probe_trace_event) * tf.max_tevs);
|
||||
@ -1258,6 +1258,8 @@ int debuginfo__find_trace_events(struct debuginfo *dbg,
|
||||
|
||||
ret = debuginfo__find_probes(dbg, &tf.pf);
|
||||
if (ret < 0) {
|
||||
for (i = 0; i < tf.ntevs; i++)
|
||||
clear_probe_trace_event(&tf.tevs[i]);
|
||||
zfree(tevs);
|
||||
return ret;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user