From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7D6E3C7EE2F for ; Wed, 7 Jun 2023 01:44:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239974AbjFGBom (ORCPT ); Tue, 6 Jun 2023 21:44:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34988 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240509AbjFGBoY (ORCPT ); Tue, 6 Jun 2023 21:44:24 -0400 Received: from mail-yb1-xb49.google.com (mail-yb1-xb49.google.com [IPv6:2607:f8b0:4864:20::b49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9FB0B1BD2 for ; Tue, 6 Jun 2023 18:44:20 -0700 (PDT) Received: by mail-yb1-xb49.google.com with SMTP id 3f1490d57ef6-ba81b24b878so10972721276.3 for ; Tue, 06 Jun 2023 18:44:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1686102260; x=1688694260; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=bW22iCLcnVyG17q+hwah70giVeTouideHDH1/wLqBpY=; b=aFQ/niTlITlS0QHgpkIO4ZJNtfMNL1ZyImv8FujmhGVqrXbHCuHjixy7pYcWVDwLtX EESJo5+1Z/5U8SBB6Yso2vxQn+62FD3d4BVd4pUdzPUl/Vbb0A/eOx3LpWEyv6JS5z0l HSGRf9Selc9MDGFlD6egPA9p7KH1GSMqWebfFYtTflOyJvcMq6sf8jfYpF2PmIgnxzw4 Jjk2AY+AdVoMYg+xmVej7G56Oh8rHYUzKN8hPmDgmgGc3hYQWMN3U7E+ZNyLjklUxEPH yAWgka4n1uI/JipYFDmymISKonqOQukFL2EmJkYvwnhJ8E7n2cUPY5dk8naMg0DViGUh /Iew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686102260; x=1688694260; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=bW22iCLcnVyG17q+hwah70giVeTouideHDH1/wLqBpY=; b=eHaXFNpmN+FkxW4EgTYRY7E0zfWBcVqvTHTqfzKDvQNkjAIjTVkP97hD4CK1ZdRP9r DfjdkKy0veTkAeVK8oCh+CEkoGnplCYgNaJnwsFHvgsMqMSL7mewwghPmndGlyeuNG9r op/IXN+OTjNpiq5QqcxlmOB+pFpA1oXxvJFlAKEQhzytau03MuNuCbt9kh7WfvAfoEu/ Z+apsjJ6cL1SeP4cw9RxszKsfUAapHuV1nFkvyxx9zA2PEokNPOLTNRgZR7a270spqbz GheUOZxzfqkIPFKSyIgRDMsDhwb7bh+3/Pmfa69fk6vpChbm1CM0zv9yilduC3twQ6Ho vKLg== X-Gm-Message-State: AC+VfDyAX5XdAwqX9CInubEkJdj1MMi00/X4tF1vAaoCv17M4pJprLdz PJI/uNTKOlDvZVY4qWyHQdoQMSHGb5EP X-Google-Smtp-Source: ACHHUZ6c65OKRcKO6UJad2m9aYS6PWtV0IlaruzdBw13waRl7Sr6HFY4DQ0FXFgFRItwhGBY1lopT/Rzd+ha X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:3c35:209f:5d38:b7a1]) (user=irogers job=sendgmr) by 2002:a25:2446:0:b0:b9a:703d:e650 with SMTP id k67-20020a252446000000b00b9a703de650mr1392677ybk.7.1686102259875; Tue, 06 Jun 2023 18:44:19 -0700 (PDT) Date: Tue, 6 Jun 2023 18:43:37 -0700 In-Reply-To: <20230607014353.3172466-1-irogers@google.com> Message-Id: <20230607014353.3172466-5-irogers@google.com> Mime-Version: 1.0 References: <20230607014353.3172466-1-irogers@google.com> X-Mailer: git-send-email 2.41.0.rc0.172.g3f132b7071-goog Subject: [PATCH v1 04/20] perf maps: Make delete static, always use put From: Ian Rogers To: John Garry , Will Deacon , James Clark , Mike Leach , Leo Yan , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Ian Rogers , Adrian Hunter , Suzuki K Poulose , "Naveen N. Rao" , Kan Liang , German Gomez , Ali Saidi , Jing Zhang , "=?UTF-8?q?Martin=20Li=C5=A1ka?=" , Athira Rajeev , Miguel Ojeda , ye xingchen , Liam Howlett , Dmitrii Dolgov <9erthalion6@gmail.com>, "Shawn M. Chapla" , Yang Jihong , K Prateek Nayak , Changbin Du , Ravi Bangoria , Sean Christopherson , Raul Silvera , Andi Kleen , "Steinar H. Gunderson" , Yuan Can , Brian Robbins , liuwenyu , Ivan Babrou , Fangrui Song , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-perf-users@vger.kernel.org, coresight@lists.linaro.org Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-perf-users@vger.kernel.org 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 --- 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