All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jiri Olsa <olsajiri@gmail.com>
To: Hoyeon Lee <hoyeon.lee@suse.com>
Cc: bpf@vger.kernel.org, Alexei Starovoitov <ast@kernel.org>,
	Daniel Borkmann <daniel@iogearbox.net>,
	Andrii Nakryiko <andrii@kernel.org>,
	Martin KaFai Lau <martin.lau@linux.dev>,
	Eduard Zingerman <eddyz87@gmail.com>,
	Kumar Kartikeya Dwivedi <memxor@gmail.com>,
	Song Liu <song@kernel.org>,
	Yonghong Song <yonghong.song@linux.dev>,
	Shuah Khan <shuah@kernel.org>, Feng Yang <yangfeng@kylinos.cn>,
	linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH bpf-next v6 3/3] selftests/bpf: add test for raw-address single kprobe attach
Date: Wed, 1 Apr 2026 12:18:16 +0200	[thread overview]
Message-ID: <aczw6Mz5twb04Pcv@krava> (raw)
In-Reply-To: <20260401070738.122709-4-hoyeon.lee@suse.com>

On Wed, Apr 01, 2026 at 04:05:04PM +0900, Hoyeon Lee wrote:
> Currently, attach_probe covers manual single-kprobe attaches by
> func_name, but not the raw-address form that the PMU-based
> single-kprobe path can accept.
> 
> This commit adds PERF and LINK raw-address coverage. It resolves
> SYS_NANOSLEEP_KPROBE_NAME through kallsyms, passes the absolute address
> in bpf_kprobe_opts.offset with func_name = NULL, and verifies that
> kprobe and kretprobe are still triggered. It also verifies that LEGACY
> rejects the same form.

left 2 nits below

Acked-by: Jiri Olsa <jolsa@kernel.org>

jirka

> 
> Signed-off-by: Hoyeon Lee <hoyeon.lee@suse.com>
> ---
>  .../selftests/bpf/prog_tests/attach_probe.c   | 82 +++++++++++++++++++
>  1 file changed, 82 insertions(+)
> 
> diff --git a/tools/testing/selftests/bpf/prog_tests/attach_probe.c b/tools/testing/selftests/bpf/prog_tests/attach_probe.c
> index 9e77e5da7097..a41542f4b35d 100644
> --- a/tools/testing/selftests/bpf/prog_tests/attach_probe.c
> +++ b/tools/testing/selftests/bpf/prog_tests/attach_probe.c
> @@ -123,6 +123,82 @@ static void test_attach_probe_manual(enum probe_attach_mode attach_mode)
>  	test_attach_probe_manual__destroy(skel);
>  }
>  
> +/* manual attach address-based kprobe/kretprobe testings */
> +static void test_attach_kprobe_by_addr(enum probe_attach_mode attach_mode)
> +{
> +	LIBBPF_OPTS(bpf_kprobe_opts, kprobe_opts);
> +	struct test_attach_probe_manual *skel;
> +	unsigned long func_addr;
> +
> +	if (!ASSERT_OK(load_kallsyms(), "load_kallsyms"))
> +		return;
> +
> +	func_addr = ksym_get_addr(SYS_NANOSLEEP_KPROBE_NAME);
> +	if (!ASSERT_NEQ(func_addr, 0UL, "func_addr"))
> +		return;
> +
> +	skel = test_attach_probe_manual__open_and_load();
> +	if (!ASSERT_OK_PTR(skel, "skel_kprobe_manual_open_and_load"))
> +		return;
> +
> +	kprobe_opts.attach_mode = attach_mode;
> +	kprobe_opts.retprobe = false;
> +	kprobe_opts.offset = func_addr;
> +	skel->links.handle_kprobe =
> +		bpf_program__attach_kprobe_opts(skel->progs.handle_kprobe,
> +						NULL, &kprobe_opts);
> +	if (!ASSERT_OK_PTR(skel->links.handle_kprobe, "attach_kprobe_by_addr"))
> +		goto cleanup;
> +
> +	kprobe_opts.retprobe = true;
> +	skel->links.handle_kretprobe =
> +		bpf_program__attach_kprobe_opts(skel->progs.handle_kretprobe,
> +						NULL, &kprobe_opts);
> +	if (!ASSERT_OK_PTR(skel->links.handle_kretprobe,
> +			   "attach_kretprobe_by_addr"))

nit, no need to split the line

> +		goto cleanup;
> +
> +	/* trigger & validate kprobe && kretprobe */
> +	usleep(1);
> +
> +	ASSERT_EQ(skel->bss->kprobe_res, 1, "check_kprobe_res");
> +	ASSERT_EQ(skel->bss->kretprobe_res, 2, "check_kretprobe_res");
> +
> +cleanup:
> +	test_attach_probe_manual__destroy(skel);
> +}
> +
> +/* reject legacy address-based kprobe attach */
> +static void test_attach_kprobe_legacy_by_addr_reject(void)
> +{
> +	LIBBPF_OPTS(bpf_kprobe_opts, kprobe_opts);
> +	struct test_attach_probe_manual *skel;
> +	unsigned long func_addr;
> +
> +	if (!ASSERT_OK(load_kallsyms(), "load_kallsyms"))
> +		return;
> +
> +	func_addr = ksym_get_addr(SYS_NANOSLEEP_KPROBE_NAME);
> +	if (!ASSERT_NEQ(func_addr, 0UL, "func_addr"))
> +		return;
> +
> +	skel = test_attach_probe_manual__open_and_load();
> +	if (!ASSERT_OK_PTR(skel, "skel_kprobe_manual_open_and_load"))
> +		return;
> +
> +	kprobe_opts.attach_mode = PROBE_ATTACH_MODE_LEGACY;
> +	kprobe_opts.offset = func_addr;
> +	skel->links.handle_kprobe =
> +		bpf_program__attach_kprobe_opts(skel->progs.handle_kprobe,
> +						NULL, &kprobe_opts);
> +	if (ASSERT_ERR_PTR(skel->links.handle_kprobe,
> +			   "attach_kprobe_legacy_by_addr"))
> +		ASSERT_EQ(libbpf_get_error(skel->links.handle_kprobe),
> +			  -EOPNOTSUPP, "attach_kprobe_legacy_by_addr_err");

nit, maybe we could do just:

       ASSERT_ERR_PTR(skel->links.handle_kprobe, "attach_kprobe_legacy_by_addr");
       ASSERT_EQ(libbpf_get_error(skel->links.handle_kprobe),
                 -EOPNOTSUPP, "attach_kprobe_legacy_by_addr_err");

> +
> +	test_attach_probe_manual__destroy(skel);
> +}
> +
>  /* attach uprobe/uretprobe long event name testings */
>  static void test_attach_uprobe_long_event_name(void)
>  {
> @@ -416,6 +492,12 @@ void test_attach_probe(void)
>  		test_attach_probe_manual(PROBE_ATTACH_MODE_PERF);
>  	if (test__start_subtest("manual-link"))
>  		test_attach_probe_manual(PROBE_ATTACH_MODE_LINK);
> +	if (test__start_subtest("kprobe-perf-by-addr"))
> +		test_attach_kprobe_by_addr(PROBE_ATTACH_MODE_PERF);
> +	if (test__start_subtest("kprobe-link-by-addr"))
> +		test_attach_kprobe_by_addr(PROBE_ATTACH_MODE_LINK);
> +	if (test__start_subtest("kprobe-legacy-by-addr-reject"))
> +		test_attach_kprobe_legacy_by_addr_reject();
>  
>  	if (test__start_subtest("auto"))
>  		test_attach_probe_auto(skel);
> -- 
> 2.52.0
> 

      reply	other threads:[~2026-04-01 10:18 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-01  7:05 [PATCH bpf-next v6 0/3] libbpf: clarify raw-address single kprobe attach behavior Hoyeon Lee
2026-04-01  7:05 ` [PATCH bpf-next v6 1/3] libbpf: use direct error codes for kprobe/uprobe attach Hoyeon Lee
2026-04-01 10:18   ` Jiri Olsa
2026-04-01  7:05 ` [PATCH bpf-next v6 2/3] libbpf: clarify raw-address single kprobe attach behavior Hoyeon Lee
2026-04-01 10:18   ` Jiri Olsa
2026-04-01  7:05 ` [PATCH bpf-next v6 3/3] selftests/bpf: add test for raw-address single kprobe attach Hoyeon Lee
2026-04-01 10:18   ` Jiri Olsa [this message]

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=aczw6Mz5twb04Pcv@krava \
    --to=olsajiri@gmail.com \
    --cc=andrii@kernel.org \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=eddyz87@gmail.com \
    --cc=hoyeon.lee@suse.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=martin.lau@linux.dev \
    --cc=memxor@gmail.com \
    --cc=shuah@kernel.org \
    --cc=song@kernel.org \
    --cc=yangfeng@kylinos.cn \
    --cc=yonghong.song@linux.dev \
    /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: link
Be 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.