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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id DC68EC7EE25 for ; Thu, 8 Jun 2023 23:32:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:To:From:Subject:References:Mime-Version :Message-Id:In-Reply-To:Date:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=QnMi244x6pw/m4dJxjhkYBurEFdFiw3jkurqi/rrcg4=; b=aIQvWyM7PlGwPj HYSfHsqOfStPdlYee2AJs8WaUUMAqAtkbnrWZazMvSiosaTdBoSZZCPmJawDUce6nTjSmGcjsRfCR NF1OFRjAu83Tvs7wwcUoVcrPJJjcSB5+Za9rrUWhb+/8KEJ/NrpV2p1IFfBJGLy3qTHIT8HuVV2Wi +4/yQh1Za07N5VUchBGG3mlzOgPZm47ZX9rXvI2B0DDLjLsc/c7KX3LN7/GQ4dmr09reVIYifRodX rz2eWg8TY8HSAwGwIZ6GMaeI5/4vAFjl5KWCXs8tdk8YuWF/IEnOYLk6/MGxNQu24657C60rYUOzl aip3MoooJWF3V0So7PiA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1q7P6p-00AwRv-0i; Thu, 08 Jun 2023 23:32:03 +0000 Received: from desiato.infradead.org ([90.155.92.199]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1q7P6n-00AwRE-2i for linux-arm-kernel@bombadil.infradead.org; Thu, 08 Jun 2023 23:32:01 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Content-Type:To:From:Subject: References:Mime-Version:Message-Id:In-Reply-To:Date:Sender:Reply-To:Cc: Content-Transfer-Encoding:Content-ID:Content-Description; bh=ivPelAwC3y4XSVWu/g/woCSsh93mZn6kVLmUE8y8n1c=; b=JRpLqhh4aMotAuQTz0iHN4qw7/ DyxvD+b1+4e7tTnC8WjW3hMPNSLwMwGU2n8PdaHbJ3Wpz3RCvkl3MQt6fOWieyM4x3fw89N4s4fQX z0hPmPp2pY27wCjx+FO9fXFdU2o2jSz+C7HaJkfFvmgIVnEcjlvXOUWs5IlcyzkoheHvPL73iIXsy 2MjlLURTKjnaPpriZMw35E9znLYY81VV4zqaYbfgX2pwkwqvfPUretBulcWjj+FPrRAFpxXNHOs0M i5rfa5oNDbtykycYbBxkGJ6M/i8Y7eX3VQlDvDbgCiq1akNHFD9yRDR0Ybv9zm9dcajkxmA219xkR PNPdoNrg==; Received: from mail-yw1-x114a.google.com ([2607:f8b0:4864:20::114a]) by desiato.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1q7P57-006MtC-00 for linux-arm-kernel@lists.infradead.org; Thu, 08 Jun 2023 23:31:07 +0000 Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-5651d8acfe2so16068887b3.2 for ; Thu, 08 Jun 2023 16:30:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1686267013; x=1688859013; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=ivPelAwC3y4XSVWu/g/woCSsh93mZn6kVLmUE8y8n1c=; b=o/8C7MEPCtvtxe0KTNOp2hvuO21OtSyIqnCUGXCxoDBVZ1hM0UTDfOuLLu9wmXoDgU NupUf/lsgNze0GEP6mGhpeYIvSgXIly86oh9z2Em05rAYNrvq4FCzwyKmNFSaIShua41 3weNIDbvhelyAr+f3kRdO8Kq/ZZkpbKIZI84VAmPVqEsnlWzKcNR4rEVotPszMSNakud XJQHVny/tO6wTL5odn0Z71wVTEZQYhdd7EYfW3ZZqN05eddIHrVyDKXC7K5eGqyv8S1W IJV79rf3qBoAK0LtD2+roC7xthkMZNkAG9KPPjPL2yN6WYDofyTHc6lW29zb02e60YCU aADg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686267013; x=1688859013; 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=ivPelAwC3y4XSVWu/g/woCSsh93mZn6kVLmUE8y8n1c=; b=d4NQtENPI5n6TGrQESwxFvnQnnNlIRO0/z2oOY4cixqChv7yO2O2eg89lCJMGfGC4N qq0lXBenAZDcndBrK9KW3yPXHghjUbf+2yEpgNV8W3NpuqslmLeXeoquozGOv/Na8tfb q9/wzKvCnSQ508g2NZmk+UIYuseeGnVqmd2vzsp7zze3upPaFetj7sC7W8B8BvlUUxPa MP04VO4hkotiDb6M6BgIk4R5FuyusWx3U+X3iR/TjzCj8hBMSML3zfxWF1Y4+dI08JQ6 e+TgnsGmq83TgkY53a3Jd9nsve7VMfVY7CJZ8Evy9q4UvplAKXPUtTzPKqmkMRfTBQl/ Rlkw== X-Gm-Message-State: AC+VfDxRSvXrjaphTMrjuKBIqluO7+VCITBAfD63u787dDomDTC0Q9oY NcYWOVc/fxIwfaXVnUpkAYcURz45Ue2u X-Google-Smtp-Source: ACHHUZ62wofB/jabYpP+aum/UbQ9ZFFxwtAKK2GM4KUJZ12ge6l2beqKO3P18e/K5xM1ekEKjDs0EnsTUyPv X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:c3e5:ebc6:61e5:c73f]) (user=irogers job=sendgmr) by 2002:a81:ac4b:0:b0:565:c0e3:d2d7 with SMTP id z11-20020a81ac4b000000b00565c0e3d2d7mr697104ywj.1.1686267013537; Thu, 08 Jun 2023 16:30:13 -0700 (PDT) Date: Thu, 8 Jun 2023 16:28:22 -0700 In-Reply-To: <20230608232823.4027869-1-irogers@google.com> Message-Id: <20230608232823.4027869-26-irogers@google.com> Mime-Version: 1.0 References: <20230608232823.4027869-1-irogers@google.com> X-Mailer: git-send-email 2.41.0.162.gfafddb0af9-goog Subject: [PATCH v2 25/26] perf srcline: Change free_srcline to zfree_srcline 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 , Athira Rajeev , Miguel Ojeda , ye xingchen , Liam Howlett , Dmitrii Dolgov <9erthalion6@gmail.com>, Yang Jihong , K Prateek Nayak , Changbin Du , Ravi Bangoria , Sean Christopherson , 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 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230609_003105_041802_7C985016 X-CRM114-Status: GOOD ( 17.16 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Make use after free more unlikely. Signed-off-by: Ian Rogers --- tools/perf/builtin-diff.c | 4 ++-- tools/perf/util/annotate.c | 2 +- tools/perf/util/block-info.c | 4 ++-- tools/perf/util/hist.c | 6 +++--- tools/perf/util/map.c | 2 +- tools/perf/util/srcline.c | 15 ++++++++++----- tools/perf/util/srcline.h | 2 +- 7 files changed, 20 insertions(+), 15 deletions(-) diff --git a/tools/perf/builtin-diff.c b/tools/perf/builtin-diff.c index ca39657ee407..eec89567ae48 100644 --- a/tools/perf/builtin-diff.c +++ b/tools/perf/builtin-diff.c @@ -1387,8 +1387,8 @@ static int cycles_printf(struct hist_entry *he, struct hist_entry *pair, bi->start, bi->end, block_he->diff.cycles); } - free_srcline(start_line); - free_srcline(end_line); + zfree_srcline(&start_line); + zfree_srcline(&end_line); return scnprintf(hpp->buf, hpp->size, "%*s", width, buf); } diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c index fc5f44535ebe..58fc5fa00ecd 100644 --- a/tools/perf/util/annotate.c +++ b/tools/perf/util/annotate.c @@ -1196,7 +1196,7 @@ static void annotation_line__init(struct annotation_line *al, static void annotation_line__exit(struct annotation_line *al) { - free_srcline(al->path); + zfree_srcline(&al->path); zfree(&al->line); } diff --git a/tools/perf/util/block-info.c b/tools/perf/util/block-info.c index 16a7b4adcf18..08279b1b65e5 100644 --- a/tools/perf/util/block-info.c +++ b/tools/perf/util/block-info.c @@ -305,8 +305,8 @@ static int block_range_entry(struct perf_hpp_fmt *fmt, struct perf_hpp *hpp, bi->start, bi->end); } - free_srcline(start_line); - free_srcline(end_line); + zfree_srcline(&start_line); + zfree_srcline(&end_line); return scnprintf(hpp->buf, hpp->size, "%*s", block_fmt->width, buf); } diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c index 4004c0915e4f..77cb2cc83bb9 100644 --- a/tools/perf/util/hist.c +++ b/tools/perf/util/hist.c @@ -1317,8 +1317,8 @@ void hist_entry__delete(struct hist_entry *he) if (he->branch_info) { map__zput(he->branch_info->from.ms.map); map__zput(he->branch_info->to.ms.map); - free_srcline(he->branch_info->srcline_from); - free_srcline(he->branch_info->srcline_to); + zfree_srcline(&he->branch_info->srcline_from); + zfree_srcline(&he->branch_info->srcline_to); zfree(&he->branch_info); } @@ -1336,7 +1336,7 @@ void hist_entry__delete(struct hist_entry *he) zfree(&he->res_samples); zfree(&he->stat_acc); - free_srcline(he->srcline); + zfree_srcline(&he->srcline); if (he->srcfile && he->srcfile[0]) zfree(&he->srcfile); free_callchain(he->callchain); diff --git a/tools/perf/util/map.c b/tools/perf/util/map.c index ae1d54d4880a..c77e2fce6a37 100644 --- a/tools/perf/util/map.c +++ b/tools/perf/util/map.c @@ -498,7 +498,7 @@ int map__fprintf_srcline(struct map *map, u64 addr, const char *prefix, char *srcline = map__srcline(map, addr, NULL); if (strncmp(srcline, SRCLINE_UNKNOWN, strlen(SRCLINE_UNKNOWN)) != 0) ret = fprintf(fp, "%s%s", prefix, srcline); - free_srcline(srcline); + zfree_srcline(&srcline); } return ret; } diff --git a/tools/perf/util/srcline.c b/tools/perf/util/srcline.c index cfca03abd6f8..b8e596528d7e 100644 --- a/tools/perf/util/srcline.c +++ b/tools/perf/util/srcline.c @@ -804,10 +804,15 @@ char *get_srcline_split(struct dso *dso, u64 addr, unsigned *line) return NULL; } -void free_srcline(char *srcline) +void zfree_srcline(char **srcline) { - if (srcline && strcmp(srcline, SRCLINE_UNKNOWN) != 0) - free(srcline); + if (*srcline == NULL) + return; + + if (strcmp(*srcline, SRCLINE_UNKNOWN)) + free(*srcline); + + *srcline = NULL; } char *get_srcline(struct dso *dso, u64 addr, struct symbol *sym, @@ -880,7 +885,7 @@ void srcline__tree_delete(struct rb_root_cached *tree) pos = rb_entry(next, struct srcline_node, rb_node); next = rb_next(&pos->rb_node); rb_erase_cached(&pos->rb_node, tree); - free_srcline(pos->srcline); + zfree_srcline(&pos->srcline); zfree(&pos); } } @@ -903,7 +908,7 @@ void inline_node__delete(struct inline_node *node) list_for_each_entry_safe(ilist, tmp, &node->val, list) { list_del_init(&ilist->list); - free_srcline(ilist->srcline); + zfree_srcline(&ilist->srcline); /* only the inlined symbols are owned by the list */ if (ilist->symbol && ilist->symbol->inlined) symbol__delete(ilist->symbol); diff --git a/tools/perf/util/srcline.h b/tools/perf/util/srcline.h index b11a0aaaa676..a15c7db9058e 100644 --- a/tools/perf/util/srcline.h +++ b/tools/perf/util/srcline.h @@ -15,7 +15,7 @@ char *get_srcline(struct dso *dso, u64 addr, struct symbol *sym, char *__get_srcline(struct dso *dso, u64 addr, struct symbol *sym, bool show_sym, bool show_addr, bool unwind_inlines, u64 ip); -void free_srcline(char *srcline); +void zfree_srcline(char **srcline); char *get_srcline_split(struct dso *dso, u64 addr, unsigned *line); /* insert the srcline into the DSO, which will take ownership */ -- 2.41.0.162.gfafddb0af9-goog _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel