Commit-ID:  a1834fc938344dd3015a1df64ee7f2af70ded147
Gitweb:     http://git.kernel.org/tip/a1834fc938344dd3015a1df64ee7f2af70ded147
Author:     Jiri Olsa <[email protected]>
AuthorDate: Thu, 24 Aug 2017 18:27:35 +0200
Committer:  Arnaldo Carvalho de Melo <[email protected]>
CommitDate: Mon, 28 Aug 2017 16:44:43 -0300

perf values: Zero value buffers

We need to make sure the array of value pointers are zero initialized,
because we use them in realloc later on and uninitialized non zero value
will cause allocation error and aborted execution.

Signed-off-by: Jiri Olsa <[email protected]>
Cc: Alexander Shishkin <[email protected]>
Cc: Andi Kleen <[email protected]>
Cc: David Ahern <[email protected]>
Cc: Mark Rutland <[email protected]>
Cc: Namhyung Kim <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Link: http://lkml.kernel.org/r/[email protected]
Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
---
 tools/perf/util/values.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/tools/perf/util/values.c b/tools/perf/util/values.c
index 2c4af02..3b56aea 100644
--- a/tools/perf/util/values.c
+++ b/tools/perf/util/values.c
@@ -12,7 +12,7 @@ int perf_read_values_init(struct perf_read_values *values)
        values->threads_max = 16;
        values->pid = malloc(values->threads_max * sizeof(*values->pid));
        values->tid = malloc(values->threads_max * sizeof(*values->tid));
-       values->value = malloc(values->threads_max * sizeof(*values->value));
+       values->value = zalloc(values->threads_max * sizeof(*values->value));
        if (!values->pid || !values->tid || !values->value) {
                pr_debug("failed to allocate read_values threads arrays");
                goto out_free_pid;
@@ -99,7 +99,8 @@ static int perf_read_values__findnew_thread(struct 
perf_read_values *values,
        }
 
        i = values->threads;
-       values->value[i] = malloc(values->counters_max * 
sizeof(**values->value));
+
+       values->value[i] = zalloc(values->counters_max * 
sizeof(**values->value));
        if (!values->value[i]) {
                pr_debug("failed to allocate read_values counters array");
                return -ENOMEM;
@@ -130,12 +131,16 @@ static int perf_read_values__enlarge_counters(struct 
perf_read_values *values)
 
        for (i = 0; i < values->threads; i++) {
                u64 *value = realloc(values->value[i], counters_max * 
sizeof(**values->value));
+               int j;
 
                if (!value) {
                        pr_debug("failed to enlarge read_values ->values 
array");
                        goto out_free_name;
                }
 
+               for (j = values->counters_max; j < counters_max; j++)
+                       value[j] = 0;
+
                values->value[i] = value;
        }
 

Reply via email to