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 2/3] libbpf: clarify raw-address single kprobe attach behavior
Date: Wed, 1 Apr 2026 12:18:29 +0200	[thread overview]
Message-ID: <aczw9RkZsAISupsP@krava> (raw)
In-Reply-To: <20260401070738.122709-3-hoyeon.lee@suse.com>

On Wed, Apr 01, 2026 at 04:05:03PM +0900, Hoyeon Lee wrote:
> bpf_program__attach_kprobe_opts() documents single-kprobe attach
> through func_name, with an optional offset. For the PMU-based path,
> func_name = NULL with an absolute address in offset already works as
> well, but that is not described in the API.
> 
> This commit clarifies this existing non-legacy behavior. For PMU-based
> attach, callers can use func_name = NULL with an absolute address in
> offset as the raw-address form. For legacy tracefs/debugfs kprobes,
> reject this form explicitly.
> 
> Signed-off-by: Hoyeon Lee <hoyeon.lee@suse.com>

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

jirka


> ---
>  tools/lib/bpf/libbpf.c | 14 ++++++++------
>  tools/lib/bpf/libbpf.h | 27 ++++++++++++++++++++++++++-
>  2 files changed, 34 insertions(+), 7 deletions(-)
> 
> diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
> index 536c19c14d21..ebb965230bb4 100644
> --- a/tools/lib/bpf/libbpf.c
> +++ b/tools/lib/bpf/libbpf.c
> @@ -11816,6 +11816,8 @@ bpf_program__attach_kprobe_opts(const struct bpf_program *prog,
>  	default:
>  		return libbpf_err_ptr(-EINVAL);
>  	}
> +	if (!func_name && legacy)
> +		return libbpf_err_ptr(-EOPNOTSUPP);
>  
>  	if (!legacy) {
>  		pfd = perf_event_open_probe(false /* uprobe */, retprobe,
> @@ -11836,20 +11838,20 @@ bpf_program__attach_kprobe_opts(const struct bpf_program *prog,
>  	}
>  	if (pfd < 0) {
>  		err = pfd;
> -		pr_warn("prog '%s': failed to create %s '%s+0x%zx' perf event: %s\n",
> +		pr_warn("prog '%s': failed to create %s '%s%s0x%zx' perf event: %s\n",
>  			prog->name, retprobe ? "kretprobe" : "kprobe",
> -			func_name, offset,
> -			errstr(err));
> +			func_name ?: "", func_name ? "+" : "",
> +			offset, errstr(err));
>  		goto err_out;
>  	}
>  	link = bpf_program__attach_perf_event_opts(prog, pfd, &pe_opts);
>  	err = libbpf_get_error(link);
>  	if (err) {
>  		close(pfd);
> -		pr_warn("prog '%s': failed to attach to %s '%s+0x%zx': %s\n",
> +		pr_warn("prog '%s': failed to attach to %s '%s%s0x%zx': %s\n",
>  			prog->name, retprobe ? "kretprobe" : "kprobe",
> -			func_name, offset,
> -			errstr(err));
> +			func_name ?: "", func_name ? "+" : "",
> +			offset, errstr(err));
>  		goto err_clean_legacy;
>  	}
>  	if (legacy) {
> diff --git a/tools/lib/bpf/libbpf.h b/tools/lib/bpf/libbpf.h
> index 0be34852350f..bba4e8464396 100644
> --- a/tools/lib/bpf/libbpf.h
> +++ b/tools/lib/bpf/libbpf.h
> @@ -557,7 +557,7 @@ struct bpf_kprobe_opts {
>  	size_t sz;
>  	/* custom user-provided value fetchable through bpf_get_attach_cookie() */
>  	__u64 bpf_cookie;
> -	/* function's offset to install kprobe to */
> +	/* function offset, or raw address if func_name == NULL */
>  	size_t offset;
>  	/* kprobe is return probe */
>  	bool retprobe;
> @@ -565,11 +565,36 @@ struct bpf_kprobe_opts {
>  	enum probe_attach_mode attach_mode;
>  	size_t :0;
>  };
> +
>  #define bpf_kprobe_opts__last_field attach_mode
>  
> +/**
> + * @brief **bpf_program__attach_kprobe()** attaches a BPF program to a
> + * kernel function entry or return.
> + *
> + * @param prog BPF program to attach
> + * @param retprobe Attach to function return
> + * @param func_name Name of the kernel function to attach to
> + * @return Reference to the newly created BPF link; or NULL is returned on
> + * error, error code is stored in errno
> + */
>  LIBBPF_API struct bpf_link *
>  bpf_program__attach_kprobe(const struct bpf_program *prog, bool retprobe,
>  			   const char *func_name);
> +
> +/**
> + * @brief **bpf_program__attach_kprobe_opts()** is just like
> + * bpf_program__attach_kprobe() except with an options struct
> + * for various configurations.
> + *
> + * @param prog BPF program to attach
> + * @param func_name Name of the kernel function to attach to. If NULL,
> + * opts->offset is treated as a raw kernel address. Raw-address attach
> + * is supported with PROBE_ATTACH_MODE_PERF and PROBE_ATTACH_MODE_LINK.
> + * @param opts Options for altering program attachment
> + * @return Reference to the newly created BPF link; or NULL is returned on
> + * error, error code is stored in errno
> + */
>  LIBBPF_API struct bpf_link *
>  bpf_program__attach_kprobe_opts(const struct bpf_program *prog,
>                                  const char *func_name,
> -- 
> 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 [this message]
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

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=aczw9RkZsAISupsP@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.