aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Kepplinger <martink@posteo.de>2017-09-13 15:14:19 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2017-09-18 08:40:21 -0400
commitc896f85a7c15ab9d040ffac8b8003e47996602a2 (patch)
treef65e995175ee475efdb93622228ba5425a8ec8c1
parent333b566559019b146905c623bde7f455c1d5add3 (diff)
perf tools: Fix leaking rec_argv in error cases
Let's free the allocated rec_argv in case we return early, in order to avoid leaking memory. This adds free() at a few very similar places across the tree where it was missing. Signed-off-by: Martin Kepplinger <martink@posteo.de> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Martin kepplinger <martink@posteo.de> Cc: Peter Zijlstra <peterz@infradead.org> Link: http://lkml.kernel.org/r/20170913191419.29806-1-martink@posteo.de Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-rw-r--r--tools/perf/builtin-c2c.c1
-rw-r--r--tools/perf/builtin-mem.c1
-rw-r--r--tools/perf/builtin-timechart.c4
-rw-r--r--tools/perf/builtin-trace.c1
4 files changed, 6 insertions, 1 deletions
diff --git a/tools/perf/builtin-c2c.c b/tools/perf/builtin-c2c.c
index 475999e48f66..bb1ee22bd221 100644
--- a/tools/perf/builtin-c2c.c
+++ b/tools/perf/builtin-c2c.c
@@ -2732,6 +2732,7 @@ static int perf_c2c__record(int argc, const char **argv)
2732 if (!perf_mem_events[j].supported) { 2732 if (!perf_mem_events[j].supported) {
2733 pr_err("failed: event '%s' not supported\n", 2733 pr_err("failed: event '%s' not supported\n",
2734 perf_mem_events[j].name); 2734 perf_mem_events[j].name);
2735 free(rec_argv);
2735 return -1; 2736 return -1;
2736 } 2737 }
2737 2738
diff --git a/tools/perf/builtin-mem.c b/tools/perf/builtin-mem.c
index 0f15634ef82c..6940490bc3f9 100644
--- a/tools/perf/builtin-mem.c
+++ b/tools/perf/builtin-mem.c
@@ -112,6 +112,7 @@ static int __cmd_record(int argc, const char **argv, struct perf_mem *mem)
112 if (!perf_mem_events[j].supported) { 112 if (!perf_mem_events[j].supported) {
113 pr_err("failed: event '%s' not supported\n", 113 pr_err("failed: event '%s' not supported\n",
114 perf_mem_events__name(j)); 114 perf_mem_events__name(j));
115 free(rec_argv);
115 return -1; 116 return -1;
116 } 117 }
117 118
diff --git a/tools/perf/builtin-timechart.c b/tools/perf/builtin-timechart.c
index 4e2e61695986..01de01ca14f2 100644
--- a/tools/perf/builtin-timechart.c
+++ b/tools/perf/builtin-timechart.c
@@ -1732,8 +1732,10 @@ static int timechart__io_record(int argc, const char **argv)
1732 if (rec_argv == NULL) 1732 if (rec_argv == NULL)
1733 return -ENOMEM; 1733 return -ENOMEM;
1734 1734
1735 if (asprintf(&filter, "common_pid != %d", getpid()) < 0) 1735 if (asprintf(&filter, "common_pid != %d", getpid()) < 0) {
1736 free(rec_argv);
1736 return -ENOMEM; 1737 return -ENOMEM;
1738 }
1737 1739
1738 p = rec_argv; 1740 p = rec_argv;
1739 for (i = 0; i < common_args_nr; i++) 1741 for (i = 0; i < common_args_nr; i++)
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
index ee8c6e814437..967bd351b58d 100644
--- a/tools/perf/builtin-trace.c
+++ b/tools/perf/builtin-trace.c
@@ -2078,6 +2078,7 @@ static int trace__record(struct trace *trace, int argc, const char **argv)
2078 rec_argv[j++] = "syscalls:sys_enter,syscalls:sys_exit"; 2078 rec_argv[j++] = "syscalls:sys_enter,syscalls:sys_exit";
2079 else { 2079 else {
2080 pr_err("Neither raw_syscalls nor syscalls events exist.\n"); 2080 pr_err("Neither raw_syscalls nor syscalls events exist.\n");
2081 free(rec_argv);
2081 return -1; 2082 return -1;
2082 } 2083 }
2083 } 2084 }