From: Ian Rogers <irogers@google.com> To: "John Garry" <john.g.garry@oracle.com>, "Will Deacon" <will@kernel.org>, "James Clark" <james.clark@arm.com>, "Mike Leach" <mike.leach@linaro.org>, "Leo Yan" <leo.yan@linaro.org>, "Peter Zijlstra" <peterz@infradead.org>, "Ingo Molnar" <mingo@redhat.com>, "Arnaldo Carvalho de Melo" <acme@kernel.org>, "Mark Rutland" <mark.rutland@arm.com>, "Alexander Shishkin" <alexander.shishkin@linux.intel.com>, "Jiri Olsa" <jolsa@kernel.org>, "Namhyung Kim" <namhyung@kernel.org>, "Ian Rogers" <irogers@google.com>, "Adrian Hunter" <adrian.hunter@intel.com>, "Suzuki K Poulose" <suzuki.poulose@arm.com>, "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com>, "Kan Liang" <kan.liang@linux.intel.com>, "German Gomez" <german.gomez@arm.com>, "Ali Saidi" <alisaidi@amazon.com>, "Jing Zhang" <renyu.zj@linux.alibaba.com>, "Martin Liška" <mliska@suse.cz>, "Athira Rajeev" <atrajeev@linux.vnet.ibm.com>, "Miguel Ojeda" <ojeda@kernel.org>, "ye xingchen" <ye.xingchen@zte.com.cn>, "Liam Howlett" <liam.howlett@oracle.com>, "Dmitrii Dolgov" <9erthalion6@gmail.com>, "Shawn M. Chapla" <schapla@codeweavers.com>, "Yang Jihong" <yangjihong1@huawei.com>, "K Prateek Nayak" <kprateek.nayak@amd.com>, "Changbin Du" <changbin.du@huawei.com>, "Ravi Bangoria" <ravi.bangoria@amd.com>, "Sean Christopherson" <seanjc@google.com>, "Raul Silvera" <rsilvera@google.com>, "Andi Kleen" <ak@linux.intel.com>, "Steinar H. Gunderson" <sesse@google.com>, "Yuan Can" <yuancan@huawei.com>, "Brian Robbins" <brianrob@linux.microsoft.com>, liuwenyu <liuwenyu7@huawei.com>, "Ivan Babrou" <ivan@cloudflare.com>, "Fangrui Song" <maskray@google.com>, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-perf-users@vger.kernel.org, coresight@lists.linaro.org Subject: [PATCH v1 04/20] perf maps: Make delete static, always use put Date: Tue, 6 Jun 2023 18:43:37 -0700 [thread overview] Message-ID: <20230607014353.3172466-5-irogers@google.com> (raw) In-Reply-To: <20230607014353.3172466-1-irogers@google.com> Address/leak sanitizer with reference count checking can identify the location of leaks, so use put rather than delete to avoid free-ing memory when the reference count is >1. Add maps__zput to ensure the variable is cleared. Signed-off-by: Ian Rogers <irogers@google.com> --- tools/perf/tests/maps.c | 2 +- tools/perf/util/machine.c | 2 +- tools/perf/util/maps.c | 2 +- tools/perf/util/maps.h | 9 ++++++++- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/tools/perf/tests/maps.c b/tools/perf/tests/maps.c index 8c0eb5cf8bb5..5bb1123a91a7 100644 --- a/tools/perf/tests/maps.c +++ b/tools/perf/tests/maps.c @@ -140,7 +140,7 @@ static int test__maps__merge_in(struct test_suite *t __maybe_unused, int subtest ret = check_maps(merged3, ARRAY_SIZE(merged3), maps); TEST_ASSERT_VAL("merge check failed", !ret); - maps__delete(maps); + maps__zput(maps); return TEST_OK; } diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c index 5d34d60a0045..8972c852d3bd 100644 --- a/tools/perf/util/machine.c +++ b/tools/perf/util/machine.c @@ -248,7 +248,7 @@ void machine__exit(struct machine *machine) return; machine__destroy_kernel_maps(machine); - maps__delete(machine->kmaps); + maps__zput(machine->kmaps); dsos__exit(&machine->dsos); machine__exit_vdso(machine); zfree(&machine->root_dir); diff --git a/tools/perf/util/maps.c b/tools/perf/util/maps.c index 5ae6379a1b42..5206a6433117 100644 --- a/tools/perf/util/maps.c +++ b/tools/perf/util/maps.c @@ -171,7 +171,7 @@ struct maps *maps__new(struct machine *machine) return result; } -void maps__delete(struct maps *maps) +static void maps__delete(struct maps *maps) { maps__exit(maps); unwind__finish_access(maps); diff --git a/tools/perf/util/maps.h b/tools/perf/util/maps.h index d2963456cfbe..83144e0645ed 100644 --- a/tools/perf/util/maps.h +++ b/tools/perf/util/maps.h @@ -57,13 +57,20 @@ struct kmap { }; struct maps *maps__new(struct machine *machine); -void maps__delete(struct maps *maps); bool maps__empty(struct maps *maps); int maps__clone(struct thread *thread, struct maps *parent); struct maps *maps__get(struct maps *maps); void maps__put(struct maps *maps); +static inline void __maps__zput(struct maps **map) +{ + maps__put(*map); + *map = NULL; +} + +#define maps__zput(map) __maps__zput(&map) + static inline struct rb_root *maps__entries(struct maps *maps) { return &RC_CHK_ACCESS(maps)->entries; -- 2.41.0.rc0.172.g3f132b7071-goog
WARNING: multiple messages have this Message-ID (diff)
From: Ian Rogers <irogers@google.com> To: "John Garry" <john.g.garry@oracle.com>, "Will Deacon" <will@kernel.org>, "James Clark" <james.clark@arm.com>, "Mike Leach" <mike.leach@linaro.org>, "Leo Yan" <leo.yan@linaro.org>, "Peter Zijlstra" <peterz@infradead.org>, "Ingo Molnar" <mingo@redhat.com>, "Arnaldo Carvalho de Melo" <acme@kernel.org>, "Mark Rutland" <mark.rutland@arm.com>, "Alexander Shishkin" <alexander.shishkin@linux.intel.com>, "Jiri Olsa" <jolsa@kernel.org>, "Namhyung Kim" <namhyung@kernel.org>, "Ian Rogers" <irogers@google.com>, "Adrian Hunter" <adrian.hunter@intel.com>, "Suzuki K Poulose" <suzuki.poulose@arm.com>, "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com>, "Kan Liang" <kan.liang@linux.intel.com>, "German Gomez" <german.gomez@arm.com>, "Ali Saidi" <alisaidi@amazon.com>, "Jing Zhang" <renyu.zj@linux.alibaba.com>, "Martin Liška" <mliska@suse.cz>, "Athira Rajeev" <atrajeev@linux.vnet.ibm.com>, "Miguel Ojeda" <ojeda@kernel.org>, "ye xingchen" <ye.xingchen@zte.com.cn>, "Liam Howlett" <liam.howlett@oracle.com>, "Dmitrii Dolgov" <9erthalion6@gmail.com>, "Shawn M. Chapla" <schapla@codeweavers.com>, "Yang Jihong" <yangjihong1@huawei.com>, "K Prateek Nayak" <kprateek.nayak@amd.com>, "Changbin Du" <changbin.du@huawei.com>, "Ravi Bangoria" <ravi.bangoria@amd.com>, "Sean Christopherson" <seanjc@google.com>, "Raul Silvera" <rsilvera@google.com>, "Andi Kleen" <ak@linux.intel.com>, "Steinar H. Gunderson" <sesse@google.com>, "Yuan Can" <yuancan@huawei.com>, "Brian Robbins" <brianrob@linux.microsoft.com>, liuwenyu <liuwenyu7@huawei.com>, "Ivan Babrou" <ivan@cloudflare.com>, "Fangrui Song" <maskray@google.com>, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-perf-users@vger.kernel.org, coresight@lists.linaro.org Subject: [PATCH v1 04/20] perf maps: Make delete static, always use put Date: Tue, 6 Jun 2023 18:43:37 -0700 [thread overview] Message-ID: <20230607014353.3172466-5-irogers@google.com> (raw) In-Reply-To: <20230607014353.3172466-1-irogers@google.com> Address/leak sanitizer with reference count checking can identify the location of leaks, so use put rather than delete to avoid free-ing memory when the reference count is >1. Add maps__zput to ensure the variable is cleared. Signed-off-by: Ian Rogers <irogers@google.com> --- tools/perf/tests/maps.c | 2 +- tools/perf/util/machine.c | 2 +- tools/perf/util/maps.c | 2 +- tools/perf/util/maps.h | 9 ++++++++- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/tools/perf/tests/maps.c b/tools/perf/tests/maps.c index 8c0eb5cf8bb5..5bb1123a91a7 100644 --- a/tools/perf/tests/maps.c +++ b/tools/perf/tests/maps.c @@ -140,7 +140,7 @@ static int test__maps__merge_in(struct test_suite *t __maybe_unused, int subtest ret = check_maps(merged3, ARRAY_SIZE(merged3), maps); TEST_ASSERT_VAL("merge check failed", !ret); - maps__delete(maps); + maps__zput(maps); return TEST_OK; } diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c index 5d34d60a0045..8972c852d3bd 100644 --- a/tools/perf/util/machine.c +++ b/tools/perf/util/machine.c @@ -248,7 +248,7 @@ void machine__exit(struct machine *machine) return; machine__destroy_kernel_maps(machine); - maps__delete(machine->kmaps); + maps__zput(machine->kmaps); dsos__exit(&machine->dsos); machine__exit_vdso(machine); zfree(&machine->root_dir); diff --git a/tools/perf/util/maps.c b/tools/perf/util/maps.c index 5ae6379a1b42..5206a6433117 100644 --- a/tools/perf/util/maps.c +++ b/tools/perf/util/maps.c @@ -171,7 +171,7 @@ struct maps *maps__new(struct machine *machine) return result; } -void maps__delete(struct maps *maps) +static void maps__delete(struct maps *maps) { maps__exit(maps); unwind__finish_access(maps); diff --git a/tools/perf/util/maps.h b/tools/perf/util/maps.h index d2963456cfbe..83144e0645ed 100644 --- a/tools/perf/util/maps.h +++ b/tools/perf/util/maps.h @@ -57,13 +57,20 @@ struct kmap { }; struct maps *maps__new(struct machine *machine); -void maps__delete(struct maps *maps); bool maps__empty(struct maps *maps); int maps__clone(struct thread *thread, struct maps *parent); struct maps *maps__get(struct maps *maps); void maps__put(struct maps *maps); +static inline void __maps__zput(struct maps **map) +{ + maps__put(*map); + *map = NULL; +} + +#define maps__zput(map) __maps__zput(&map) + static inline struct rb_root *maps__entries(struct maps *maps) { return &RC_CHK_ACCESS(maps)->entries; -- 2.41.0.rc0.172.g3f132b7071-goog _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2023-06-07 1:45 UTC|newest] Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-06-07 1:43 [PATCH v1 00/20] Reference count checking for thread Ian Rogers 2023-06-07 1:43 ` Ian Rogers 2023-06-07 1:43 ` [PATCH v1 01/20] perf thread: Remove notion of dead threads Ian Rogers 2023-06-07 1:43 ` Ian Rogers 2023-06-07 1:43 ` [PATCH v1 02/20] perf thread: Make threads rbtree non-invasive Ian Rogers 2023-06-07 1:43 ` Ian Rogers 2023-06-07 1:43 ` [PATCH v1 03/20] perf thread: Add accessor functions for thread Ian Rogers 2023-06-07 1:43 ` Ian Rogers 2023-06-07 1:43 ` Ian Rogers [this message] 2023-06-07 1:43 ` [PATCH v1 04/20] perf maps: Make delete static, always use put Ian Rogers 2023-06-07 1:43 ` [PATCH v1 05/20] perf addr_location: Move to its own header Ian Rogers 2023-06-07 1:43 ` Ian Rogers 2023-06-07 1:43 ` [PATCH v1 06/20] perf addr_location: Add init/exit/copy functions Ian Rogers 2023-06-07 1:43 ` Ian Rogers 2023-06-07 1:43 ` [PATCH v1 07/20] perf thread: Add reference count checking Ian Rogers 2023-06-07 1:43 ` Ian Rogers 2023-06-07 1:43 ` [PATCH v1 08/20] perf machine: Make delete_threads part of machine__exit Ian Rogers 2023-06-07 1:43 ` Ian Rogers 2023-06-07 1:43 ` [PATCH v1 09/20] perf report: Avoid thread leak Ian Rogers 2023-06-07 1:43 ` Ian Rogers 2023-06-07 1:43 ` [PATCH v1 10/20] perf header: Ensure bitmaps are freed Ian Rogers 2023-06-07 1:43 ` Ian Rogers 2023-06-07 1:43 ` [PATCH v1 11/20] perf stat: Avoid evlist leak Ian Rogers 2023-06-07 1:43 ` Ian Rogers 2023-06-07 1:43 ` [PATCH v1 12/20] perf intel-pt: Fix missed put and leak Ian Rogers 2023-06-07 1:43 ` Ian Rogers 2023-06-07 1:43 ` [PATCH v1 13/20] perf evlist: Free stats in all evlist destruction Ian Rogers 2023-06-07 1:43 ` Ian Rogers 2023-06-07 1:43 ` [PATCH v1 14/20] perf python: Avoid 2 leak sanitizer issues Ian Rogers 2023-06-07 1:43 ` Ian Rogers 2023-06-07 1:43 ` [PATCH v1 15/20] perf jit: Fix two thread leaks Ian Rogers 2023-06-07 1:43 ` Ian Rogers 2023-06-07 1:43 ` [PATCH v1 16/20] perf symbol-elf: Correct holding a reference Ian Rogers 2023-06-07 1:43 ` Ian Rogers 2023-06-07 1:43 ` [PATCH v1 17/20] perf maps: Fix overlapping memory leak Ian Rogers 2023-06-07 1:43 ` Ian Rogers 2023-06-07 1:43 ` [PATCH v1 18/20] perf machine: Fix leak of kernel dso Ian Rogers 2023-06-07 1:43 ` Ian Rogers 2023-06-07 1:43 ` [PATCH v1 19/20] perf machine: Don't leak module maps Ian Rogers 2023-06-07 1:43 ` Ian Rogers 2023-06-07 1:43 ` [PATCH v1 20/20] perf map/maps/thread: Changes to reference counting Ian Rogers 2023-06-07 1:43 ` Ian Rogers 2023-06-07 7:07 ` [PATCH v1 00/20] Reference count checking for thread Ian Rogers 2023-06-07 7:07 ` Ian Rogers
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=20230607014353.3172466-5-irogers@google.com \ --to=irogers@google.com \ --cc=9erthalion6@gmail.com \ --cc=acme@kernel.org \ --cc=adrian.hunter@intel.com \ --cc=ak@linux.intel.com \ --cc=alexander.shishkin@linux.intel.com \ --cc=alisaidi@amazon.com \ --cc=atrajeev@linux.vnet.ibm.com \ --cc=brianrob@linux.microsoft.com \ --cc=changbin.du@huawei.com \ --cc=coresight@lists.linaro.org \ --cc=german.gomez@arm.com \ --cc=ivan@cloudflare.com \ --cc=james.clark@arm.com \ --cc=john.g.garry@oracle.com \ --cc=jolsa@kernel.org \ --cc=kan.liang@linux.intel.com \ --cc=kprateek.nayak@amd.com \ --cc=leo.yan@linaro.org \ --cc=liam.howlett@oracle.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-perf-users@vger.kernel.org \ --cc=liuwenyu7@huawei.com \ --cc=mark.rutland@arm.com \ --cc=maskray@google.com \ --cc=mike.leach@linaro.org \ --cc=mingo@redhat.com \ --cc=mliska@suse.cz \ --cc=namhyung@kernel.org \ --cc=naveen.n.rao@linux.vnet.ibm.com \ --cc=ojeda@kernel.org \ --cc=peterz@infradead.org \ --cc=ravi.bangoria@amd.com \ --cc=renyu.zj@linux.alibaba.com \ --cc=rsilvera@google.com \ --cc=schapla@codeweavers.com \ --cc=seanjc@google.com \ --cc=sesse@google.com \ --cc=suzuki.poulose@arm.com \ --cc=will@kernel.org \ --cc=yangjihong1@huawei.com \ --cc=ye.xingchen@zte.com.cn \ --cc=yuancan@huawei.com \ /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: linkBe 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.