perf header: Fix possible memory leaks in process_group_desc()
authorNamhyung Kim <namhyung.kim@lge.com>
Mon, 18 Nov 2013 02:20:44 +0000 (11:20 +0900)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Tue, 19 Nov 2013 13:34:05 +0000 (10:34 -0300)
After processing all group descriptors or encountering an error, it
frees all descriptors.  However, current logic can leak memory since it
might not traverse all descriptors.

Note that the 'i' can have different value than nr_groups when an error
occurred and it's safe to call free(desc[i].name) for every desc since
we already make it NULL when it's reused for group names.

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1384741244-7271-2-git-send-email-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/header.c

index 559c516f1cec29a7c9b66e1f19f70d35f014232f..1cd035708931144dccbfdb68f4c1024903e45631 100644 (file)
@@ -2107,7 +2107,7 @@ static int process_group_desc(struct perf_file_section *section __maybe_unused,
 
        ret = 0;
 out_free:
-       while ((int) --i >= 0)
+       for (i = 0; i < nr_groups; i++)
                free(desc[i].name);
        free(desc);