All of lore.kernel.org
 help / color / mirror / Atom feed
From: Changbin Du <changbin.du@gmail.com>
To: Arnaldo Carvalho de Melo <acme@kernel.org>, Jiri Olsa <jolsa@kernel.org>
Cc: namhyung@kernel.org, Ingo Molnar <mingo@redhat.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Alexei Starovoitov <ast@kernel.org>,
	rostedt@goodmis.org, Daniel Borkmann <daniel@iogearbox.net>,
	bpf@vger.kernel.org, linux-kernel@vger.kernel.org,
	netdev@vger.kernel.org, Changbin Du <changbin.du@gmail.com>
Subject: [PATCH 13/16] perf: free all counts in perf_evsel__exit
Date: Sat, 16 Mar 2019 16:05:53 +0800	[thread overview]
Message-ID: <20190316080556.3075-14-changbin.du@gmail.com> (raw)
In-Reply-To: <20190316080556.3075-1-changbin.du@gmail.com>

Ensure that we have freed all allocated counts for struct perf_evsel.

=================================================================
==7494==ERROR: LeakSanitizer: detected memory leaks

Direct leak of 48 byte(s) in 1 object(s) allocated from:
    #0 0x7f0333a89138 in calloc (/usr/lib/x86_64-linux-gnu/libasan.so.5+0xee138)
    #1 0x5625e5330a5e in zalloc util/util.h:23
    #2 0x5625e5330a9b in perf_counts__new util/counts.c:10
    #3 0x5625e5330ca0 in perf_evsel__alloc_counts util/counts.c:47
    #4 0x5625e520d8e5 in __perf_evsel__read_on_cpu util/evsel.c:1505
    #5 0x5625e517a985 in perf_evsel__read_on_cpu /home/work/linux/tools/perf/util/evsel.h:347
    #6 0x5625e517ad1a in test__openat_syscall_event tests/openat-syscall.c:47
    #7 0x5625e51528e6 in run_test tests/builtin-test.c:358
    #8 0x5625e5152baf in test_and_print tests/builtin-test.c:388
    #9 0x5625e51543fe in __cmd_test tests/builtin-test.c:583
    #10 0x5625e515572f in cmd_test tests/builtin-test.c:722
    #11 0x5625e51c3fb8 in run_builtin /home/changbin/work/linux/tools/perf/perf.c:302
    #12 0x5625e51c44f7 in handle_internal_command /home/changbin/work/linux/tools/perf/perf.c:354
    #13 0x5625e51c48fb in run_argv /home/changbin/work/linux/tools/perf/perf.c:398
    #14 0x5625e51c5069 in main /home/changbin/work/linux/tools/perf/perf.c:520
    #15 0x7f033214d09a in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2409a)

Indirect leak of 72 byte(s) in 1 object(s) allocated from:
    #0 0x7f0333a89138 in calloc (/usr/lib/x86_64-linux-gnu/libasan.so.5+0xee138)
    #1 0x5625e532560d in zalloc util/util.h:23
    #2 0x5625e532566b in xyarray__new util/xyarray.c:10
    #3 0x5625e5330aba in perf_counts__new util/counts.c:15
    #4 0x5625e5330ca0 in perf_evsel__alloc_counts util/counts.c:47
    #5 0x5625e520d8e5 in __perf_evsel__read_on_cpu util/evsel.c:1505
    #6 0x5625e517a985 in perf_evsel__read_on_cpu /home/work/linux/tools/perf/util/evsel.h:347
    #7 0x5625e517ad1a in test__openat_syscall_event tests/openat-syscall.c:47
    #8 0x5625e51528e6 in run_test tests/builtin-test.c:358
    #9 0x5625e5152baf in test_and_print tests/builtin-test.c:388
    #10 0x5625e51543fe in __cmd_test tests/builtin-test.c:583
    #11 0x5625e515572f in cmd_test tests/builtin-test.c:722
    #12 0x5625e51c3fb8 in run_builtin /home/changbin/work/linux/tools/perf/perf.c:302
    #13 0x5625e51c44f7 in handle_internal_command /home/changbin/work/linux/tools/perf/perf.c:354
    #14 0x5625e51c48fb in run_argv /home/changbin/work/linux/tools/perf/perf.c:398
    #15 0x5625e51c5069 in main /home/changbin/work/linux/tools/perf/perf.c:520
    #16 0x7f033214d09a in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2409a)

Signed-off-by: Changbin Du <changbin.du@gmail.com>
---
 tools/perf/util/counts.c | 18 ++++++++++++++++++
 tools/perf/util/counts.h |  4 ++++
 tools/perf/util/evsel.c  |  2 ++
 tools/perf/util/stat.c   | 18 ------------------
 4 files changed, 24 insertions(+), 18 deletions(-)

diff --git a/tools/perf/util/counts.c b/tools/perf/util/counts.c
index 03032b410c29..c5715d08b1f9 100644
--- a/tools/perf/util/counts.c
+++ b/tools/perf/util/counts.c
@@ -53,3 +53,21 @@ void perf_evsel__free_counts(struct perf_evsel *evsel)
 	perf_counts__delete(evsel->counts);
 	evsel->counts = NULL;
 }
+
+int perf_evsel__alloc_prev_raw_counts(struct perf_evsel *evsel,
+				      int ncpus, int nthreads)
+{
+	struct perf_counts *counts;
+
+	counts = perf_counts__new(ncpus, nthreads);
+	if (counts)
+		evsel->prev_raw_counts = counts;
+
+	return counts ? 0 : -ENOMEM;
+}
+
+void perf_evsel__free_prev_raw_counts(struct perf_evsel *evsel)
+{
+	perf_counts__delete(evsel->prev_raw_counts);
+	evsel->prev_raw_counts = NULL;
+}
diff --git a/tools/perf/util/counts.h b/tools/perf/util/counts.h
index 0d1050ccc586..b8bdbff586bb 100644
--- a/tools/perf/util/counts.h
+++ b/tools/perf/util/counts.h
@@ -36,4 +36,8 @@ void perf_evsel__reset_counts(struct perf_evsel *evsel);
 int perf_evsel__alloc_counts(struct perf_evsel *evsel, int ncpus, int nthreads);
 void perf_evsel__free_counts(struct perf_evsel *evsel);
 
+int perf_evsel__alloc_prev_raw_counts(struct perf_evsel *evsel,
+				      int ncpus, int nthreads);
+void perf_evsel__free_prev_raw_counts(struct perf_evsel *evsel);
+
 #endif /* __PERF_COUNTS_H */
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
index 3bbf73e979c0..8e0fbe34e5d9 100644
--- a/tools/perf/util/evsel.c
+++ b/tools/perf/util/evsel.c
@@ -1294,6 +1294,8 @@ void perf_evsel__exit(struct perf_evsel *evsel)
 	assert(evsel->evlist == NULL);
 	perf_evsel__free_fd(evsel);
 	perf_evsel__free_id(evsel);
+	perf_evsel__free_counts(evsel);
+	perf_evsel__free_prev_raw_counts(evsel);
 	perf_evsel__free_config_terms(evsel);
 	cgroup__put(evsel->cgrp);
 	cpu_map__put(evsel->cpus);
diff --git a/tools/perf/util/stat.c b/tools/perf/util/stat.c
index 4d40515307b8..6a22842f76d2 100644
--- a/tools/perf/util/stat.c
+++ b/tools/perf/util/stat.c
@@ -136,24 +136,6 @@ static void perf_evsel__free_stat_priv(struct perf_evsel *evsel)
 	zfree(&evsel->stats);
 }
 
-static int perf_evsel__alloc_prev_raw_counts(struct perf_evsel *evsel,
-					     int ncpus, int nthreads)
-{
-	struct perf_counts *counts;
-
-	counts = perf_counts__new(ncpus, nthreads);
-	if (counts)
-		evsel->prev_raw_counts = counts;
-
-	return counts ? 0 : -ENOMEM;
-}
-
-static void perf_evsel__free_prev_raw_counts(struct perf_evsel *evsel)
-{
-	perf_counts__delete(evsel->prev_raw_counts);
-	evsel->prev_raw_counts = NULL;
-}
-
 static int perf_evsel__alloc_stats(struct perf_evsel *evsel, bool alloc_raw)
 {
 	int ncpus = perf_evsel__nr_cpus(evsel);
-- 
2.19.1


  parent reply	other threads:[~2019-03-16  8:07 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-16  8:05 [PATCH 00/16] fix some perf issues detected by ASan Changbin Du
2019-03-16  8:05 ` [PATCH 01/16] perf: add doc for how to build perf with Asan and UBSan Changbin Du
2019-03-18 10:07   ` Jiri Olsa
2019-03-18 20:08     ` Arnaldo Carvalho de Melo
2019-03-20 12:00       ` Changbin Du
2019-03-20 11:58     ` Changbin Du
2019-03-22 22:24   ` [tip:perf/urgent] perf tools: Add doc about " tip-bot for Changbin Du
2019-03-16  8:05 ` [PATCH 02/16] perf: list: fix memory leak in function is_event_supported Changbin Du
2019-03-22 22:25   ` [tip:perf/urgent] perf list: Don't forget to drop the reference to the allocated thread_map tip-bot for Changbin Du
2019-03-16  8:05 ` [PATCH 03/16] perf: fix errors under optimization level '-Og' Changbin Du
2019-03-22 22:26   ` [tip:perf/urgent] perf tools: Fix " tip-bot for Changbin Du
2019-03-16  8:05 ` [PATCH 04/16] perf: fix an error in config template Changbin Du
2019-03-22 22:26   ` [tip:perf/urgent] perf config: Fix an error in the config template documentation tip-bot for Changbin Du
2019-03-16  8:05 ` [PATCH 05/16] perf: fix a memory leak in collect_config Changbin Du
2019-03-22 22:27   ` [tip:perf/urgent] perf config: Fix a memory leak in collect_config() tip-bot for Changbin Du
2019-03-16  8:05 ` [PATCH 06/16] perf: fix memory leak in print_sdt_events() Changbin Du
2019-03-22 22:27   ` [tip:perf/urgent] perf build-id: Fix " tip-bot for Changbin Du
2019-03-16  8:05 ` [PATCH 07/16] perf: top: fix heap-use-after-free issue Changbin Du
2019-03-18 10:08   ` Jiri Olsa
2019-03-22 22:28   ` [tip:perf/urgent] perf top: Delete the evlist before perf_session, fixing " tip-bot for Changbin Du
2019-03-16  8:05 ` [PATCH 08/16] perf: top: fix error handing in cmd_top() Changbin Du
2019-03-22 22:29   ` [tip:perf/urgent] perf top: Fix error handling " tip-bot for Changbin Du
2019-03-16  8:05 ` [PATCH 09/16] perf: missed a map__put() in error case Changbin Du
2019-03-22 22:29   ` [tip:perf/urgent] perf hist: Add missing " tip-bot for Changbin Du
2019-03-16  8:05 ` [PATCH 10/16] perf: remove map from names tree in __maps__remove Changbin Du
2019-03-22 22:30   ` [tip:perf/urgent] perf map: Remove map from 'names' tree in __maps__remove() tip-bot for Changbin Du
2019-03-16  8:05 ` [PATCH 11/16] perf: purge all maps from the names tree Changbin Du
2019-03-22 22:31   ` [tip:perf/urgent] perf maps: Purge all maps from the 'names' tree tip-bot for Changbin Du
2019-03-16  8:05 ` [PATCH 12/16] perf: top: fix global-buffer-overflow issue Changbin Du
2019-03-22 22:31   ` [tip:perf/urgent] perf top: Fix " tip-bot for Changbin Du
2019-03-16  8:05 ` Changbin Du [this message]
2019-03-18 19:39   ` [PATCH 13/16] perf: free all counts in perf_evsel__exit Arnaldo Carvalho de Melo
2019-03-16  8:05 ` [PATCH 14/16] perf: fix a memory leak of cpu_map object Changbin Du
2019-03-22 22:33   ` [tip:perf/urgent] perf tests: Fix a memory leak of cpu_map object in the openat_syscall_event_on_all_cpus test tip-bot for Changbin Du
2019-03-16  8:05 ` [PATCH 15/16] perf: fix memory leak by expr__find_other Changbin Du
2019-03-22 22:33   ` [tip:perf/urgent] perf tests: Fix memory leak by expr__find_other() in test__expr() tip-bot for Changbin Du
2019-03-16  8:05 ` [PATCH 16/16] perf: fix a memory leak in test__perf_evsel__tp_sched_test Changbin Du
2019-03-22 22:34   ` [tip:perf/urgent] perf tests: Fix a memory leak in test__perf_evsel__tp_sched_test() tip-bot for Changbin Du
2019-03-18 10:08 ` [PATCH 00/16] fix some perf issues detected by ASan Jiri Olsa
2019-03-18 16:16   ` Arnaldo Carvalho de Melo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190316080556.3075-14-changbin.du@gmail.com \
    --to=changbin.du@gmail.com \
    --cc=acme@kernel.org \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=namhyung@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.