From patchwork Sat Nov 6 05:37:32 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ian Rogers X-Patchwork-Id: 12606235 X-Patchwork-Delegate: bpf@iogearbox.net 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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C9004C4332F for ; Sat, 6 Nov 2021 05:38:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id AE9C960FBF for ; Sat, 6 Nov 2021 05:38:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233251AbhKFFlF (ORCPT ); Sat, 6 Nov 2021 01:41:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59316 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233094AbhKFFlE (ORCPT ); Sat, 6 Nov 2021 01:41:04 -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 E1D85C061205 for ; Fri, 5 Nov 2021 22:38:23 -0700 (PDT) Received: by mail-yb1-xb49.google.com with SMTP id v133-20020a25c58b000000b005c20153475dso16698875ybe.17 for ; Fri, 05 Nov 2021 22:38:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:message-id:mime-version:subject:from:to:cc; bh=ZayAaJHcuA1bcDDOidW5iIDpwigbcsn41v2z+XbHtiI=; b=SXDPhCPtzx39uuxzIlWZELOIKZv4gyA0EQdzsEQMDIkSv+kaeZ8NuPiA9pVw/3o1zX N4554yb9P6B4XgLl4AzRwMSH3M3+DSh78fbX8hwQ4vOdJChFwJDdw1K2k0wr1MhLxxnI UwlSMTmrzlt1jSqX7PDuUiNImN5B21a+MMMtxGWrzMJ3wziLW5ehyFdi0SIi9NldHJNy dX8S0Q7jKBrO8TQJ8buTu0CQMSO6a01cPIIOPz/IpvNzQtQcV8lIi9k6lmUQ9UBsQWAh KiOK4FuGdB7m7NmXXYyqBwiaw+fCchE362eog/yOYDJiQ1wyeztT/o465v5DLZhqsVHL oQcA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc; bh=ZayAaJHcuA1bcDDOidW5iIDpwigbcsn41v2z+XbHtiI=; b=XErMSvNbH8MrG85Rihe62dqruuyAC9uECKTHLZI/zNrwYUnTccbPB4xXUhMfRbz28q 62GpDgwxhUBP7ujCIxfOtesgwCVik+4uztfdt7eGGD2rX1vf/F/Xas7EMbmHALsHyzDZ foNf2uQF7n7B4NLJMDIRlEmFuLjiJv4iv7WSW/CHFyCgGgu0PYEfJksASD/4sX2MJMxy MHgEhhvVdeJ5l3qGTcuf5QZ8FdGf5zEvGeU6s9vAurhfOi3NuKP/XukJSdkBsJwnrqux LBOh1j77KDxGB4+Tz3Rogr5Q0VQZiXVzv4chHRP/cJh4dDtmUb+KnIrvbgSvSZioreiy eCTQ== X-Gm-Message-State: AOAM5300Prn9z/bOsnHMUsRLstq8gRom4r9QtsPW+M813LaoQpHUtxwu GShMbhOsD0npPPqatz5gryJulqzLxL/F X-Google-Smtp-Source: ABdhPJzG9WMyFJYgNZwnoYHUb+JlLflaX6yIfrm7b3g1aUgL21oqFvCPOCOP5R/Jg7FyEJy7a49xsEAUjMTO X-Received: from irogers.svl.corp.google.com ([2620:15c:2cd:202:b70b:3e34:63e5:9e95]) (user=irogers job=sendgmr) by 2002:a25:2f13:: with SMTP id v19mr69075829ybv.410.1636177103010; Fri, 05 Nov 2021 22:38:23 -0700 (PDT) Date: Fri, 5 Nov 2021 22:37:32 -0700 Message-Id: <20211106053733.3580931-1-irogers@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.34.0.rc0.344.g81b53c2807-goog Subject: [PATCH 1/2] perf bpf: Avoid memory leak from perf_env__insert_btf From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Song Liu , linux-kernel@vger.kernel.org, Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko , Martin KaFai Lau , Yonghong Song , John Fastabend , KP Singh , Tiezhu Yang , linux-perf-users@vger.kernel.org, netdev@vger.kernel.org, bpf@vger.kernel.org Cc: Stephane Eranian , Ian Rogers Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org perf_env__insert_btf doesn't insert if a duplicate btf id is encountered and this causes a memory leak. Modify the function to return a success/error value and then free the memory if insertion didn't happen. Fixes: 3792cb2ff43b ("perf bpf: Save BTF in a rbtree in perf_env") Signed-off-by: Ian Rogers --- tools/perf/util/bpf-event.c | 5 ++++- tools/perf/util/env.c | 5 ++++- tools/perf/util/env.h | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/tools/perf/util/bpf-event.c b/tools/perf/util/bpf-event.c index 1a7112a87736..0783b464777a 100644 --- a/tools/perf/util/bpf-event.c +++ b/tools/perf/util/bpf-event.c @@ -120,7 +120,10 @@ static int perf_env__fetch_btf(struct perf_env *env, node->data_size = data_size; memcpy(node->data, data, data_size); - perf_env__insert_btf(env, node); + if (!perf_env__insert_btf(env, node)) { + /* Insertion failed because of a duplicate. */ + free(node); + } return 0; } diff --git a/tools/perf/util/env.c b/tools/perf/util/env.c index cf773f0dec38..5b24eb010336 100644 --- a/tools/perf/util/env.c +++ b/tools/perf/util/env.c @@ -74,12 +74,13 @@ struct bpf_prog_info_node *perf_env__find_bpf_prog_info(struct perf_env *env, return node; } -void perf_env__insert_btf(struct perf_env *env, struct btf_node *btf_node) +bool perf_env__insert_btf(struct perf_env *env, struct btf_node *btf_node) { struct rb_node *parent = NULL; __u32 btf_id = btf_node->id; struct btf_node *node; struct rb_node **p; + bool ret = true; down_write(&env->bpf_progs.lock); p = &env->bpf_progs.btfs.rb_node; @@ -93,6 +94,7 @@ void perf_env__insert_btf(struct perf_env *env, struct btf_node *btf_node) p = &(*p)->rb_right; } else { pr_debug("duplicated btf %u\n", btf_id); + ret = false; goto out; } } @@ -102,6 +104,7 @@ void perf_env__insert_btf(struct perf_env *env, struct btf_node *btf_node) env->bpf_progs.btfs_cnt++; out: up_write(&env->bpf_progs.lock); + return ret; } struct btf_node *perf_env__find_btf(struct perf_env *env, __u32 btf_id) diff --git a/tools/perf/util/env.h b/tools/perf/util/env.h index 1383876f72b3..163e5ec503a2 100644 --- a/tools/perf/util/env.h +++ b/tools/perf/util/env.h @@ -167,7 +167,7 @@ void perf_env__insert_bpf_prog_info(struct perf_env *env, struct bpf_prog_info_node *info_node); struct bpf_prog_info_node *perf_env__find_bpf_prog_info(struct perf_env *env, __u32 prog_id); -void perf_env__insert_btf(struct perf_env *env, struct btf_node *btf_node); +bool perf_env__insert_btf(struct perf_env *env, struct btf_node *btf_node); struct btf_node *perf_env__find_btf(struct perf_env *env, __u32 btf_id); int perf_env__numa_node(struct perf_env *env, int cpu); From patchwork Sat Nov 6 05:37:33 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ian Rogers X-Patchwork-Id: 12606237 X-Patchwork-Delegate: bpf@iogearbox.net 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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7F738C433EF for ; Sat, 6 Nov 2021 05:38:32 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 673ED61215 for ; Sat, 6 Nov 2021 05:38:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233389AbhKFFlK (ORCPT ); Sat, 6 Nov 2021 01:41:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59332 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233461AbhKFFlG (ORCPT ); Sat, 6 Nov 2021 01:41:06 -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 2E8C6C061205 for ; Fri, 5 Nov 2021 22:38:26 -0700 (PDT) Received: by mail-yb1-xb49.google.com with SMTP id w5-20020a25ac05000000b005c55592df4dso8311990ybi.12 for ; Fri, 05 Nov 2021 22:38:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=Tg5TDm4qC6UeNIYD0XPbfD7vBlef2Yfxw+Y9xztxVG8=; b=nHhROQoUoeOnMhq4hEeheovNulp00BK7oFx1VJZgsESDL929lrKYG4FlANZ7rztXFP ckrk+XL0HLlpuEQQswgzHI5MqDi1CxcdUAFCecSs6dl26DkxCeyrEZ368pciaAcfJZpu cGmR0ebNjafJw2jhFnFe+u4dZABJtvHtme5dTuIAg1/i5+loxv14hnMyZ6llOtoqxB6M xxqhKDl52MBk74WgCzs3BsdX33WSw4AH91hJqNRM11xiliH443qv3PNiaxHRs+9pxGwv AfwljPpZ7y0/n0NeCflEdDeXFMXHbf7gfinnNQnN/mTelKaRLh3J/bYwUTgfz3Eo1PbV +kYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=Tg5TDm4qC6UeNIYD0XPbfD7vBlef2Yfxw+Y9xztxVG8=; b=bODrO2vh693dB9CQyZIh1Ete9SUhDQpt8WYIMJ7oXJxDjND0bx4vDnjmhBW3uVNdd3 aucwAT7uDg7adhh4Z8TWz7eL9i4/V1L+7gZ/T8htPzLj9PeEGSYrCQI7E3dSu3S5pv8r xDvzi0AN/sbXdRxord/1cybM4Lg1ncO9x+fOd7d5hLQkonPccxvO9urO+vgoVsIjFdtw xpBZ3/DLlXwOawtYJJGf67++zFwKlcnQNAEkG09C1gSgaV0FaT/0Op6Ekt8PRVjuLb80 TKRcsoVQQIFEn8XhmsKN+hBbXSR9e0yexVO1+r47D47w0GYJdrUarxn1FcakK/5IY21k vLxw== X-Gm-Message-State: AOAM531GpRXk2MpFxydFem7iyTwAtJE4aplMjpOoM+0a6hri1/9zdGwS 0gAlAA993gplrrzlz0fjo7iYpP5a3k8S X-Google-Smtp-Source: ABdhPJz0e8lLlaTt9y6F99fCcNxbjyEhMkd4yUph+qezq9MMmrIQRcEbbYsFONTAtJcldYZzD2XWicIFL44C X-Received: from irogers.svl.corp.google.com ([2620:15c:2cd:202:b70b:3e34:63e5:9e95]) (user=irogers job=sendgmr) by 2002:a25:ae1a:: with SMTP id a26mr51521917ybj.70.1636177105344; Fri, 05 Nov 2021 22:38:25 -0700 (PDT) Date: Fri, 5 Nov 2021 22:37:33 -0700 In-Reply-To: <20211106053733.3580931-1-irogers@google.com> Message-Id: <20211106053733.3580931-2-irogers@google.com> Mime-Version: 1.0 References: <20211106053733.3580931-1-irogers@google.com> X-Mailer: git-send-email 2.34.0.rc0.344.g81b53c2807-goog Subject: [PATCH 2/2] perf bpf: Add missing free to bpf_event__print_bpf_prog_info From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Song Liu , linux-kernel@vger.kernel.org, Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko , Martin KaFai Lau , Yonghong Song , John Fastabend , KP Singh , Tiezhu Yang , linux-perf-users@vger.kernel.org, netdev@vger.kernel.org, bpf@vger.kernel.org Cc: Stephane Eranian , Ian Rogers Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org If btf__new is called then there needs to be a corresponding btf__free. Fixes: f8dfeae009ef ("perf bpf: Show more BPF program info in print_bpf_prog_info()") Signed-off-by: Ian Rogers --- tools/perf/util/bpf-event.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/perf/util/bpf-event.c b/tools/perf/util/bpf-event.c index 0783b464777a..1f813d8bb946 100644 --- a/tools/perf/util/bpf-event.c +++ b/tools/perf/util/bpf-event.c @@ -579,7 +579,7 @@ void bpf_event__print_bpf_prog_info(struct bpf_prog_info *info, synthesize_bpf_prog_name(name, KSYM_NAME_LEN, info, btf, 0); fprintf(fp, "# bpf_prog_info %u: %s addr 0x%llx size %u\n", info->id, name, prog_addrs[0], prog_lens[0]); - return; + goto out; } fprintf(fp, "# bpf_prog_info %u:\n", info->id); @@ -589,4 +589,6 @@ void bpf_event__print_bpf_prog_info(struct bpf_prog_info *info, fprintf(fp, "# \tsub_prog %u: %s addr 0x%llx size %u\n", i, name, prog_addrs[i], prog_lens[i]); } +out: + btf__free(btf); }