From patchwork Wed Jul 21 21:58:08 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Olsa X-Patchwork-Id: 483708 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-20.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER, INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 60F93C6377C for ; Wed, 21 Jul 2021 21:58:23 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4A97D6124B for ; Wed, 21 Jul 2021 21:58:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230045AbhGUVRq (ORCPT ); Wed, 21 Jul 2021 17:17:46 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:29509 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229995AbhGUVRo (ORCPT ); Wed, 21 Jul 2021 17:17:44 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1626904700; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Rr/KKkd5zXYat1qyJl/djPxgaYzdXYoveXMN2G13uMA=; b=T+wtGSo4cSpqsFjgxFT66GUquWTNKU1n2atxKUEtoPD8subBUtFblsXPx6kXk9h0Aag7Lm hZ195qMMSQ0+Fh4IhCprzvd5BRbeAFxnyyWhrI4Lkx+vDC82CkaZQl4/OpTKoCjVnX7bzf c0m6dK+b5EYs7/zIeJTidTjvvn7O0V0= Received: from mail-ej1-f70.google.com (mail-ej1-f70.google.com [209.85.218.70]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-494-6cERN-b_PKGolMekLA4caA-1; Wed, 21 Jul 2021 17:58:18 -0400 X-MC-Unique: 6cERN-b_PKGolMekLA4caA-1 Received: by mail-ej1-f70.google.com with SMTP id rl7-20020a1709072167b02904f7606bd58fso1296426ejb.11 for ; Wed, 21 Jul 2021 14:58:18 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Rr/KKkd5zXYat1qyJl/djPxgaYzdXYoveXMN2G13uMA=; b=Mu5Jx8jIQjWTCRjm4ACT1BY3cKbJ/NLk9hny2KdJV8tPu2yfSHoImDlAQey6pLwdfV so06asQfVhTPrGojEz3ocYzQsz3W3r6KN6WG0UKXAE0JsGwiSFwMrOmVDyntLm2LdZ9E 1mfvquYUaXkupXFgl1U9JrX0P2jwEjVZhznut6Z9q+iNfttQFwOjrBntHj1xAcykUsI4 nQIjivlwBuodkKi43zPyorep6DQRNZIxfCwyLJYFyOakVMDL+3i92St7TC44p2Sgz03p 4fFJ63h/IZdu/I7WtjEEuBpLXy/bTON02ompKSHzalr8tUaWZSUyJgsdg4i2Jd9k2kwd srxQ== X-Gm-Message-State: AOAM532Oj70/ONTVUWl1MhCPBAOLnWsm1VZqrujACab9hDGsMZfyaBm7 MjRz9bH4T+dH5VbpVrvjtBN06JQmjcxv7DPB2yv6QOSnpipkgxuYW4arHBtMTVEDEe8syvn3eVz TSFu3ThlZvs+XH50b X-Received: by 2002:a17:906:34ca:: with SMTP id h10mr41229337ejb.41.1626904697780; Wed, 21 Jul 2021 14:58:17 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxFjsfbkXohPNEK4fDO1ZFmawWIRbsFGTHBmygJ88qfl8uG2fiB8lCyN3uW/+G9mioren58hg== X-Received: by 2002:a17:906:34ca:: with SMTP id h10mr41229328ejb.41.1626904697653; Wed, 21 Jul 2021 14:58:17 -0700 (PDT) Received: from krava.cust.in.nbox.cz ([83.240.60.59]) by smtp.gmail.com with ESMTPSA id t5sm5545969eji.113.2021.07.21.14.58.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 21 Jul 2021 14:58:17 -0700 (PDT) From: Jiri Olsa X-Google-Original-From: Jiri Olsa To: Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko Cc: Andrii Nakryiko , netdev@vger.kernel.org, bpf@vger.kernel.org, Martin KaFai Lau , Song Liu , Yonghong Song , John Fastabend , KP Singh , Masami Hiramatsu , Alan Maguire Subject: [PATCH bpf-next 1/3] libbpf: Fix func leak in attach_kprobe Date: Wed, 21 Jul 2021 23:58:08 +0200 Message-Id: <20210721215810.889975-2-jolsa@kernel.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210721215810.889975-1-jolsa@kernel.org> References: <20210721215810.889975-1-jolsa@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Adding missing free for func pointer in attach_kprobe function. Reported-by: Andrii Nakryiko Signed-off-by: Jiri Olsa --- tools/lib/bpf/libbpf.c | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index 4c153c379989..d46c2dd37be2 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c @@ -10431,6 +10431,7 @@ static struct bpf_link *attach_kprobe(const struct bpf_sec_def *sec, return libbpf_err_ptr(err); } if (opts.retprobe && offset != 0) { + free(func); err = -EINVAL; pr_warn("kretprobes do not support offset specification\n"); return libbpf_err_ptr(err); From patchwork Wed Jul 21 21:58:09 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Olsa X-Patchwork-Id: 484346 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-20.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER, INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5537FC6377B for ; Wed, 21 Jul 2021 21:58:29 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3C90B6124B for ; Wed, 21 Jul 2021 21:58:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230057AbhGUVRw (ORCPT ); Wed, 21 Jul 2021 17:17:52 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:24495 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229979AbhGUVRu (ORCPT ); Wed, 21 Jul 2021 17:17:50 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1626904706; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=cnthrEhqSK4f18XnoUkLoCiCM8/m0dpLypLCFrHKZCs=; b=Oausivt1t+JkFkLEolppqbsSv1R0k57gFkfpNaCxyBB8ZBT2NMDDrhwxSWMyGR5RmowyQ2 BI2qQ6lCFo+AuZGiWv37qMFF4s1HKoURuZ4NNUk0mJoDbs2P4ZgR0thvSUBgNMBjGYISOa tqEYeu/zZhl4M8Dh4fBeMsMSuxYuVVs= Received: from mail-ej1-f72.google.com (mail-ej1-f72.google.com [209.85.218.72]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-131-rkq-esfsNGyRLYr5EczCSQ-1; Wed, 21 Jul 2021 17:58:25 -0400 X-MC-Unique: rkq-esfsNGyRLYr5EczCSQ-1 Received: by mail-ej1-f72.google.com with SMTP id k1-20020a17090666c1b029041c273a883dso1305159ejp.3 for ; Wed, 21 Jul 2021 14:58:25 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=cnthrEhqSK4f18XnoUkLoCiCM8/m0dpLypLCFrHKZCs=; b=sJKX1YsxOUKr3Ri6W1Tp18iDHFuOjzAu0UjHvZj5vKgonbjCNwfx5wDJ+5ju0KM9qW /r7PiYfxzQCkFI92XPAs70u1vZtvnpAwaMnFF8ipv9ZU6Ee1P+HLAHZi0lDBuXTYwO3O ygdAOeuttIhNHX4dC6VdhTE2mI7WdWb9MPWkyl8vN6f3255DEV1sJozL6DhNDQNv2k3P KT1u7qiqO50ZNRaGArtJxG5pzvOU0Z6sMtG+yJI+vgLSvoIwrszRaPeCh6Ch3hWVdhXH 4/r/JdN728H8Q8hsXXkeJZBMr7Ozh3xko0goAxPWaNcAtJPSKuDfWzCjzhvueNl9icvL UaDQ== X-Gm-Message-State: AOAM530G+xpGYGYq3pkAAgSXV1q3lUFFEbOi9nNYqovm3DbARHQBAgeb N6tIrX+3fzcfE23FDm6//zRfLyb0gHy7uUcKoi8iJuDftdWPOojEpxWn+pShTk/9GepM7+cyX6b nrpTu3njI6s+uF0/4 X-Received: by 2002:a17:906:6811:: with SMTP id k17mr40440361ejr.280.1626904704173; Wed, 21 Jul 2021 14:58:24 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyJ4t0XIQQe8fG93ueNgrMdaYO+hzaOLTt1gHNTjIsb+whmwX14SfN65P5+wkYLrPXQbydCmw== X-Received: by 2002:a17:906:6811:: with SMTP id k17mr40440345ejr.280.1626904703985; Wed, 21 Jul 2021 14:58:23 -0700 (PDT) Received: from krava.cust.in.nbox.cz ([83.240.60.59]) by smtp.gmail.com with ESMTPSA id q24sm11283244edc.82.2021.07.21.14.58.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 21 Jul 2021 14:58:23 -0700 (PDT) From: Jiri Olsa X-Google-Original-From: Jiri Olsa To: Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko Cc: Andrii Nakryiko , netdev@vger.kernel.org, bpf@vger.kernel.org, Martin KaFai Lau , Song Liu , Yonghong Song , John Fastabend , KP Singh , Masami Hiramatsu , Alan Maguire Subject: [PATCH bpf-next 2/3] libbpf: Allow decimal offset for kprobes Date: Wed, 21 Jul 2021 23:58:09 +0200 Message-Id: <20210721215810.889975-3-jolsa@kernel.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210721215810.889975-1-jolsa@kernel.org> References: <20210721215810.889975-1-jolsa@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Allow to specify decimal offset in SEC macro, like: SEC("kprobe/bpf_fentry_test7+5") Adding selftest for that. Suggested-by: Andrii Nakryiko Signed-off-by: Jiri Olsa --- tools/lib/bpf/libbpf.c | 2 +- .../selftests/bpf/prog_tests/get_func_ip_test.c | 2 ++ tools/testing/selftests/bpf/progs/get_func_ip_test.c | 11 +++++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index d46c2dd37be2..52f4f1d4f495 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c @@ -10424,7 +10424,7 @@ static struct bpf_link *attach_kprobe(const struct bpf_sec_def *sec, func_name = prog->sec_name + sec->len; opts.retprobe = strcmp(sec->sec, "kretprobe/") == 0; - n = sscanf(func_name, "%m[a-zA-Z0-9_.]+%lx", &func, &offset); + n = sscanf(func_name, "%m[a-zA-Z0-9_.]+%li", &func, &offset); if (n < 1) { err = -EINVAL; pr_warn("kprobe name is invalid: %s\n", func_name); diff --git a/tools/testing/selftests/bpf/prog_tests/get_func_ip_test.c b/tools/testing/selftests/bpf/prog_tests/get_func_ip_test.c index 088b3653610d..02a465f36d59 100644 --- a/tools/testing/selftests/bpf/prog_tests/get_func_ip_test.c +++ b/tools/testing/selftests/bpf/prog_tests/get_func_ip_test.c @@ -17,6 +17,7 @@ void test_get_func_ip_test(void) */ #ifndef __x86_64__ bpf_program__set_autoload(skel->progs.test6, false); + bpf_program__set_autoload(skel->progs.test7, false); #endif err = get_func_ip_test__load(skel); @@ -46,6 +47,7 @@ void test_get_func_ip_test(void) ASSERT_EQ(skel->bss->test5_result, 1, "test5_result"); #ifdef __x86_64__ ASSERT_EQ(skel->bss->test6_result, 1, "test6_result"); + ASSERT_EQ(skel->bss->test7_result, 1, "test7_result"); #endif cleanup: diff --git a/tools/testing/selftests/bpf/progs/get_func_ip_test.c b/tools/testing/selftests/bpf/progs/get_func_ip_test.c index acd587b6e859..a587aeca5ae0 100644 --- a/tools/testing/selftests/bpf/progs/get_func_ip_test.c +++ b/tools/testing/selftests/bpf/progs/get_func_ip_test.c @@ -11,6 +11,7 @@ extern const void bpf_fentry_test3 __ksym; extern const void bpf_fentry_test4 __ksym; extern const void bpf_modify_return_test __ksym; extern const void bpf_fentry_test6 __ksym; +extern const void bpf_fentry_test7 __ksym; __u64 test1_result = 0; SEC("fentry/bpf_fentry_test1") @@ -71,3 +72,13 @@ int test6(struct pt_regs *ctx) test6_result = (const void *) addr == &bpf_fentry_test6 + 5; return 0; } + +__u64 test7_result = 0; +SEC("kprobe/bpf_fentry_test7+5") +int test7(struct pt_regs *ctx) +{ + __u64 addr = bpf_get_func_ip(ctx); + + test7_result = (const void *) addr == &bpf_fentry_test7 + 5; + return 0; +} From patchwork Wed Jul 21 21:58:10 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Olsa X-Patchwork-Id: 483707 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-20.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER, INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0D520C6377A for ; Wed, 21 Jul 2021 21:58:35 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id EB52261261 for ; Wed, 21 Jul 2021 21:58:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230017AbhGUVR6 (ORCPT ); Wed, 21 Jul 2021 17:17:58 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:36839 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229995AbhGUVR4 (ORCPT ); Wed, 21 Jul 2021 17:17:56 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1626904712; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ccMewzkPCGXNEiOr3BDbhXGwV/AjKpWpsb/2bGggAwo=; b=gBvgPFqb9JWGwhey1yGechMSpypi1qRGDIHslPEP0U00oUlrw9+6XPoXpoIZ4xmspfXUIk GmzECq4DjJhDRHtNZwhqxptOKebyJ66k/saBw/2ua40IB+nPc+6Ep6swUprqSuDJXr3x9F 5jFKyz4pRkFmXqrEf8OSzXkdjNKp3zo= Received: from mail-ed1-f70.google.com (mail-ed1-f70.google.com [209.85.208.70]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-549-0rr1mVQ1Nz-ttPhCJsy26w-1; Wed, 21 Jul 2021 17:58:31 -0400 X-MC-Unique: 0rr1mVQ1Nz-ttPhCJsy26w-1 Received: by mail-ed1-f70.google.com with SMTP id v2-20020a50c4020000b02903a6620f87feso1723289edf.18 for ; Wed, 21 Jul 2021 14:58:31 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ccMewzkPCGXNEiOr3BDbhXGwV/AjKpWpsb/2bGggAwo=; b=PEC8f3KRxO0khFL61Iv7UTLl7wmOU3h2JK2QdfK5ieNY9jYfMV+xafUNFE6AvSZgJd zxq9Y0hGexkVSf3UimoBX/utx3YUynSSu9CBA/+XJVivDSOHYFhh7yrt/oKqPDG+G7S9 rwyYIYqyJGSoo1WWJ/A1mVDqaIVtY7/dReNawmnljgEHc4JDAvOZYbUKnJbnZJp545V7 PtF2FF7mAHMC1ZTz4oL1gzsfANMadc5TVUIIjuCDWotBs3wYt/zNiyW+2XTOfJ++lrHj ptxnF8vB46D4zcvE8OWrWjJLkmIdgSGcTf6d0ONr2RJu76P0L1UsuYR8Uan71+mVotQ8 rE7Q== X-Gm-Message-State: AOAM531GViwqDdq7MXzlZqCdKCLPqRL+o7wf5ftghfRO6OnIFOXv3m70 lRTEhAZr38lSSOQFcJwrOOdakW0xxgzIeYknfzLUUcnu3C1Z528rxz8Mi2mE0AL45I/RmP8j3ZJ sFmT7mvbAmzVy1Tjz X-Received: by 2002:a17:906:7c6:: with SMTP id m6mr24060879ejc.456.1626904710336; Wed, 21 Jul 2021 14:58:30 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy/d/fmsrF6DFPHn3DuoAiXFEmIbfGuX7ba1DUS37m6SD8VFG7/J9X1w43TXoUs7i7D24VnZQ== X-Received: by 2002:a17:906:7c6:: with SMTP id m6mr24060870ejc.456.1626904710189; Wed, 21 Jul 2021 14:58:30 -0700 (PDT) Received: from krava.cust.in.nbox.cz ([83.240.60.59]) by smtp.gmail.com with ESMTPSA id v16sm10741216edc.52.2021.07.21.14.58.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 21 Jul 2021 14:58:29 -0700 (PDT) From: Jiri Olsa X-Google-Original-From: Jiri Olsa To: Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko Cc: Andrii Nakryiko , netdev@vger.kernel.org, bpf@vger.kernel.org, Martin KaFai Lau , Song Liu , Yonghong Song , John Fastabend , KP Singh , Masami Hiramatsu , Alan Maguire Subject: [PATCH bpf-next 3/3] libbpf: Export bpf_program__attach_kprobe_opts function Date: Wed, 21 Jul 2021 23:58:10 +0200 Message-Id: <20210721215810.889975-4-jolsa@kernel.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210721215810.889975-1-jolsa@kernel.org> References: <20210721215810.889975-1-jolsa@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Exporting bpf_program__attach_kprobe_opts function. Renaming bpf_program_attach_kprobe_opts to bpf_kprobe_opts and adding 'sz' field for forward/backward compatiblity. Suggested-by: Andrii Nakryiko Signed-off-by: Jiri Olsa --- tools/lib/bpf/libbpf.c | 31 +++++++++++++++++-------------- tools/lib/bpf/libbpf.h | 14 ++++++++++++++ tools/lib/bpf/libbpf.map | 1 + 3 files changed, 32 insertions(+), 14 deletions(-) diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index 52f4f1d4f495..63a6239d8569 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c @@ -10366,25 +10366,28 @@ static int perf_event_open_probe(bool uprobe, bool retprobe, const char *name, return pfd; } -struct bpf_program_attach_kprobe_opts { - bool retprobe; - unsigned long offset; -}; - -static struct bpf_link* +struct bpf_link* bpf_program__attach_kprobe_opts(struct bpf_program *prog, const char *func_name, - struct bpf_program_attach_kprobe_opts *opts) + struct bpf_kprobe_opts *opts) { char errmsg[STRERR_BUFSIZE]; struct bpf_link *link; + unsigned long offset; + bool retprobe; int pfd, err; - pfd = perf_event_open_probe(false /* uprobe */, opts->retprobe, func_name, - opts->offset, -1 /* pid */); + if (!OPTS_VALID(opts, bpf_kprobe_opts)) + return libbpf_err_ptr(-EINVAL); + + retprobe = OPTS_GET(opts, retprobe, false); + offset = OPTS_GET(opts, offset, 0); + + pfd = perf_event_open_probe(false /* uprobe */, retprobe, func_name, + offset, -1 /* pid */); if (pfd < 0) { pr_warn("prog '%s': failed to create %s '%s' perf event: %s\n", - prog->name, opts->retprobe ? "kretprobe" : "kprobe", func_name, + prog->name, retprobe ? "kretprobe" : "kprobe", func_name, libbpf_strerror_r(pfd, errmsg, sizeof(errmsg))); return libbpf_err_ptr(pfd); } @@ -10393,7 +10396,7 @@ bpf_program__attach_kprobe_opts(struct bpf_program *prog, if (err) { close(pfd); pr_warn("prog '%s': failed to attach to %s '%s': %s\n", - prog->name, opts->retprobe ? "kretprobe" : "kprobe", func_name, + prog->name, retprobe ? "kretprobe" : "kprobe", func_name, libbpf_strerror_r(err, errmsg, sizeof(errmsg))); return libbpf_err_ptr(err); } @@ -10404,9 +10407,9 @@ struct bpf_link *bpf_program__attach_kprobe(struct bpf_program *prog, bool retprobe, const char *func_name) { - struct bpf_program_attach_kprobe_opts opts = { + DECLARE_LIBBPF_OPTS(bpf_kprobe_opts, opts, .retprobe = retprobe, - }; + ); return bpf_program__attach_kprobe_opts(prog, func_name, &opts); } @@ -10414,7 +10417,7 @@ struct bpf_link *bpf_program__attach_kprobe(struct bpf_program *prog, static struct bpf_link *attach_kprobe(const struct bpf_sec_def *sec, struct bpf_program *prog) { - struct bpf_program_attach_kprobe_opts opts; + DECLARE_LIBBPF_OPTS(bpf_kprobe_opts, opts); unsigned long offset = 0; struct bpf_link *link; const char *func_name; diff --git a/tools/lib/bpf/libbpf.h b/tools/lib/bpf/libbpf.h index 6b08c1023609..da4a63a1265d 100644 --- a/tools/lib/bpf/libbpf.h +++ b/tools/lib/bpf/libbpf.h @@ -104,6 +104,16 @@ struct bpf_object_open_opts { }; #define bpf_object_open_opts__last_field btf_custom_path +struct bpf_kprobe_opts { + /* size of this struct, for forward/backward compatiblity */ + size_t sz; + /* kprobe is return probe */ + bool retprobe; + /* function's offset to install kprobe to */ + unsigned long offset; +}; +#define bpf_kprobe_opts__last_field offset + LIBBPF_API struct bpf_object *bpf_object__open(const char *path); LIBBPF_API struct bpf_object * bpf_object__open_file(const char *path, const struct bpf_object_open_opts *opts); @@ -249,6 +259,10 @@ bpf_program__attach_perf_event(struct bpf_program *prog, int pfd); LIBBPF_API struct bpf_link * bpf_program__attach_kprobe(struct bpf_program *prog, bool retprobe, const char *func_name); +LIBBPF_API struct bpf_link* +bpf_program__attach_kprobe_opts(struct bpf_program *prog, + const char *func_name, + struct bpf_kprobe_opts *opts); LIBBPF_API struct bpf_link * bpf_program__attach_uprobe(struct bpf_program *prog, bool retprobe, pid_t pid, const char *binary_path, diff --git a/tools/lib/bpf/libbpf.map b/tools/lib/bpf/libbpf.map index 5bfc10722647..887d372a3f27 100644 --- a/tools/lib/bpf/libbpf.map +++ b/tools/lib/bpf/libbpf.map @@ -372,6 +372,7 @@ LIBBPF_0.5.0 { global: bpf_map__initial_value; bpf_map_lookup_and_delete_elem_flags; + bpf_program__attach_kprobe_opts; bpf_object__gen_loader; btf_dump__dump_type_data; libbpf_set_strict_mode;