All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] tools: perf: fix leaking rec_argv in error cases
@ 2017-09-13 19:14 Martin Kepplinger
  2017-09-15 19:02 ` Arnaldo Carvalho de Melo
  2017-09-22 16:43 ` [tip:perf/core] perf tools: Fix " tip-bot for Martin Kepplinger
  0 siblings, 2 replies; 3+ messages in thread
From: Martin Kepplinger @ 2017-09-13 19:14 UTC (permalink / raw)
  To: peterz, mingo, acme, alexander.shishkin; +Cc: linux-kernel, Martin Kepplinger

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>
---
 tools/perf/builtin-c2c.c       | 1 +
 tools/perf/builtin-mem.c       | 1 +
 tools/perf/builtin-timechart.c | 4 +++-
 tools/perf/builtin-trace.c     | 1 +
 4 files changed, 6 insertions(+), 1 deletion(-)

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)
 		if (!perf_mem_events[j].supported) {
 			pr_err("failed: event '%s' not supported\n",
 			       perf_mem_events[j].name);
+			free(rec_argv);
 			return -1;
 		}
 
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)
 		if (!perf_mem_events[j].supported) {
 			pr_err("failed: event '%s' not supported\n",
 			       perf_mem_events__name(j));
+			free(rec_argv);
 			return -1;
 		}
 
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)
 	if (rec_argv == NULL)
 		return -ENOMEM;
 
-	if (asprintf(&filter, "common_pid != %d", getpid()) < 0)
+	if (asprintf(&filter, "common_pid != %d", getpid()) < 0) {
+		free(rec_argv);
 		return -ENOMEM;
+	}
 
 	p = rec_argv;
 	for (i = 0; i < common_args_nr; i++)
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
index 771ddab94bb0..dd8eec4c755c 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)
 			rec_argv[j++] = "syscalls:sys_enter,syscalls:sys_exit";
 		else {
 			pr_err("Neither raw_syscalls nor syscalls events exist.\n");
+			free(rec_argv);
 			return -1;
 		}
 	}
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] tools: perf: fix leaking rec_argv in error cases
  2017-09-13 19:14 [PATCH] tools: perf: fix leaking rec_argv in error cases Martin Kepplinger
@ 2017-09-15 19:02 ` Arnaldo Carvalho de Melo
  2017-09-22 16:43 ` [tip:perf/core] perf tools: Fix " tip-bot for Martin Kepplinger
  1 sibling, 0 replies; 3+ messages in thread
From: Arnaldo Carvalho de Melo @ 2017-09-15 19:02 UTC (permalink / raw)
  To: Martin Kepplinger; +Cc: peterz, mingo, alexander.shishkin, linux-kernel

Em Wed, Sep 13, 2017 at 09:14:19PM +0200, Martin Kepplinger escreveu:
> 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.

Thanks, applied.

- Arnaldo
 
> Signed-off-by: Martin Kepplinger <martink@posteo.de>
> ---
>  tools/perf/builtin-c2c.c       | 1 +
>  tools/perf/builtin-mem.c       | 1 +
>  tools/perf/builtin-timechart.c | 4 +++-
>  tools/perf/builtin-trace.c     | 1 +
>  4 files changed, 6 insertions(+), 1 deletion(-)
> 
> 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)
>  		if (!perf_mem_events[j].supported) {
>  			pr_err("failed: event '%s' not supported\n",
>  			       perf_mem_events[j].name);
> +			free(rec_argv);
>  			return -1;
>  		}
>  
> 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)
>  		if (!perf_mem_events[j].supported) {
>  			pr_err("failed: event '%s' not supported\n",
>  			       perf_mem_events__name(j));
> +			free(rec_argv);
>  			return -1;
>  		}
>  
> 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)
>  	if (rec_argv == NULL)
>  		return -ENOMEM;
>  
> -	if (asprintf(&filter, "common_pid != %d", getpid()) < 0)
> +	if (asprintf(&filter, "common_pid != %d", getpid()) < 0) {
> +		free(rec_argv);
>  		return -ENOMEM;
> +	}
>  
>  	p = rec_argv;
>  	for (i = 0; i < common_args_nr; i++)
> diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
> index 771ddab94bb0..dd8eec4c755c 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)
>  			rec_argv[j++] = "syscalls:sys_enter,syscalls:sys_exit";
>  		else {
>  			pr_err("Neither raw_syscalls nor syscalls events exist.\n");
> +			free(rec_argv);
>  			return -1;
>  		}
>  	}
> -- 
> 2.11.0

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [tip:perf/core] perf tools: Fix leaking rec_argv in error cases
  2017-09-13 19:14 [PATCH] tools: perf: fix leaking rec_argv in error cases Martin Kepplinger
  2017-09-15 19:02 ` Arnaldo Carvalho de Melo
@ 2017-09-22 16:43 ` tip-bot for Martin Kepplinger
  1 sibling, 0 replies; 3+ messages in thread
From: tip-bot for Martin Kepplinger @ 2017-09-22 16:43 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: acme, alexander.shishkin, linux-kernel, mingo, hpa, tglx, peterz,
	martink

Commit-ID:  c896f85a7c15ab9d040ffac8b8003e47996602a2
Gitweb:     http://git.kernel.org/tip/c896f85a7c15ab9d040ffac8b8003e47996602a2
Author:     Martin Kepplinger <martink@posteo.de>
AuthorDate: Wed, 13 Sep 2017 21:14:19 +0200
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Mon, 18 Sep 2017 09:40:21 -0300

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>
---
 tools/perf/builtin-c2c.c       | 1 +
 tools/perf/builtin-mem.c       | 1 +
 tools/perf/builtin-timechart.c | 4 +++-
 tools/perf/builtin-trace.c     | 1 +
 4 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/tools/perf/builtin-c2c.c b/tools/perf/builtin-c2c.c
index 475999e..bb1ee22 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)
 		if (!perf_mem_events[j].supported) {
 			pr_err("failed: event '%s' not supported\n",
 			       perf_mem_events[j].name);
+			free(rec_argv);
 			return -1;
 		}
 
diff --git a/tools/perf/builtin-mem.c b/tools/perf/builtin-mem.c
index 0f15634..6940490 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)
 		if (!perf_mem_events[j].supported) {
 			pr_err("failed: event '%s' not supported\n",
 			       perf_mem_events__name(j));
+			free(rec_argv);
 			return -1;
 		}
 
diff --git a/tools/perf/builtin-timechart.c b/tools/perf/builtin-timechart.c
index 4e2e616..01de01c 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)
 	if (rec_argv == NULL)
 		return -ENOMEM;
 
-	if (asprintf(&filter, "common_pid != %d", getpid()) < 0)
+	if (asprintf(&filter, "common_pid != %d", getpid()) < 0) {
+		free(rec_argv);
 		return -ENOMEM;
+	}
 
 	p = rec_argv;
 	for (i = 0; i < common_args_nr; i++)
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
index ee8c6e8..967bd35 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)
 			rec_argv[j++] = "syscalls:sys_enter,syscalls:sys_exit";
 		else {
 			pr_err("Neither raw_syscalls nor syscalls events exist.\n");
+			free(rec_argv);
 			return -1;
 		}
 	}

^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2017-09-22 16:47 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-09-13 19:14 [PATCH] tools: perf: fix leaking rec_argv in error cases Martin Kepplinger
2017-09-15 19:02 ` Arnaldo Carvalho de Melo
2017-09-22 16:43 ` [tip:perf/core] perf tools: Fix " tip-bot for Martin Kepplinger

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.