From: Colin Ian King <colin.k...@canonical.com>

The error returns in idlestat_load fail to close an open file and
free allocated memory on the heap. This patch addresses this.

Signed-off-by: Colin Ian King <colin.k...@canonical.com>
Signed-off-by: Daniel Lezcano <daniel.lezc...@linaro.org>
---
 idlestat.c |   14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/idlestat.c b/idlestat.c
index 739f6dc..0961463 100644
--- a/idlestat.c
+++ b/idlestat.c
@@ -396,16 +396,24 @@ static struct cpuidle_datas *idlestat_load(const char 
*path)
                sscanf(buffer, "cpus=%u", &nrcpus);
        }
 
-       if (!nrcpus)
+       if (!nrcpus) {
+               fclose(f);
                return ptrerror("read error for 'cpus=' in trace file");
+       }
 
        datas = malloc(sizeof(*datas));
-       if (!datas)
+       if (!datas) {
+               fclose(f);
                return ptrerror("malloc datas");
+       }
 
        datas->cstates = calloc(sizeof(*datas->cstates), nrcpus);
-       if (!datas->cstates)
+       if (!datas->cstates) {
+               free(datas);
+               fclose(f);
                return ptrerror("calloc cstate");
+       }
+
        /* initialize cstate_max for each cpu */
        for (cpu = 0; cpu < nrcpus; cpu++)
                datas->cstates[cpu].cstate_max = -1;
-- 
1.7.9.5


_______________________________________________
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev

Reply via email to