Linux kernel -stable discussions
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: Pascal Ernster <git@hardfalcon.net>
Cc: Sasha Levin <sashal@kernel.org>, stable@vger.kernel.org
Subject: Re: Patch "libbpf: Pass BPF token from find_prog_btf_id to BPF_BTF_GET_FD_BY_ID" has been added to the 6
Date: Tue, 27 May 2025 17:50:21 +0200	[thread overview]
Message-ID: <2025052705-sandbar-ambitious-ed02@gregkh> (raw)
In-Reply-To: <26815461-6d90-4b18-834f-520b4dd814a1@hardfalcon.net>

On Tue, May 27, 2025 at 05:27:03PM +0200, Pascal Ernster wrote:
> [2025-05-27 16:49] Greg Kroah-Hartman:
> > On Sat, May 24, 2025 at 10:40:22AM +0200, Pascal Ernster wrote:
> > > [2025-05-22 23:08] Sasha Levin:
> > > > This is a note to let you know that I've just added the patch titled
> > > > 
> > > >       libbpf: Pass BPF token from find_prog_btf_id to BPF_BTF_GET_FD_BY_ID
> > > > 
> > > > to the 6.14-stable tree which can be found at:
> > > >       http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
> > > > 
> > > > The filename of the patch is:
> > > >        libbpf-pass-bpf-token-from-find_prog_btf_id-to-bpf_b.patch
> > > > and it can be found in the queue-6.14 subdirectory.
> > > > 
> > > > If you, or anyone else, feels it should not be added to the stable tree,
> > > > please let <stable@vger.kernel.org> know about it.
> > > > 
> > > > 
> > > > 
> > > > commit 7a8beec7026564efe57ebf9c4c568ed0071f2e39
> > > > Author: Mykyta Yatsenko <yatsenko@meta.com>
> > > > Date:   Mon Mar 17 17:40:38 2025 +0000
> > > > 
> > > >       libbpf: Pass BPF token from find_prog_btf_id to BPF_BTF_GET_FD_BY_ID
> > > >       [ Upstream commit 974ef9f0d23edc1a802691c585b84514b414a96d ]
> > > >       Pass BPF token from bpf_program__set_attach_target to
> > > >       BPF_BTF_GET_FD_BY_ID bpf command.
> > > >       When freplace program attaches to target program, it needs to look up
> > > >       for BTF of the target, this may require BPF token, if, for example,
> > > >       running from user namespace.
> > > >       Signed-off-by: Mykyta Yatsenko <yatsenko@meta.com>
> > > >       Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
> > > >       Acked-by: Yonghong Song <yonghong.song@linux.dev>
> > > >       Link: https://lore.kernel.org/bpf/20250317174039.161275-4-mykyta.yatsenko5@gmail.com
> > > >       Signed-off-by: Sasha Levin <sashal@kernel.org>
> > > > 
> > > > diff --git a/tools/lib/bpf/bpf.c b/tools/lib/bpf/bpf.c
> > > > index 359f73ead6137..a9c3e33d0f8a9 100644
> > > > --- a/tools/lib/bpf/bpf.c
> > > > +++ b/tools/lib/bpf/bpf.c
> > > > @@ -1097,7 +1097,7 @@ int bpf_map_get_fd_by_id(__u32 id)
> > > >    int bpf_btf_get_fd_by_id_opts(__u32 id,
> > > >    			      const struct bpf_get_fd_by_id_opts *opts)
> > > >    {
> > > > -	const size_t attr_sz = offsetofend(union bpf_attr, open_flags);
> > > > +	const size_t attr_sz = offsetofend(union bpf_attr, fd_by_id_token_fd);
> > > >    	union bpf_attr attr;
> > > >    	int fd;
> > > > @@ -1107,6 +1107,7 @@ int bpf_btf_get_fd_by_id_opts(__u32 id,
> > > >    	memset(&attr, 0, attr_sz);
> > > >    	attr.btf_id = id;
> > > >    	attr.open_flags = OPTS_GET(opts, open_flags, 0);
> > > > +	attr.fd_by_id_token_fd = OPTS_GET(opts, token_fd, 0);
> > > >    	fd = sys_bpf_fd(BPF_BTF_GET_FD_BY_ID, &attr, attr_sz);
> > > >    	return libbpf_err_errno(fd);
> > > > diff --git a/tools/lib/bpf/bpf.h b/tools/lib/bpf/bpf.h
> > > > index 435da95d20589..777627d33d257 100644
> > > > --- a/tools/lib/bpf/bpf.h
> > > > +++ b/tools/lib/bpf/bpf.h
> > > > @@ -487,9 +487,10 @@ LIBBPF_API int bpf_link_get_next_id(__u32 start_id, __u32 *next_id);
> > > >    struct bpf_get_fd_by_id_opts {
> > > >    	size_t sz; /* size of this struct for forward/backward compatibility */
> > > >    	__u32 open_flags; /* permissions requested for the operation on fd */
> > > > +	__u32 token_fd;
> > > >    	size_t :0;
> > > >    };
> > > > -#define bpf_get_fd_by_id_opts__last_field open_flags
> > > > +#define bpf_get_fd_by_id_opts__last_field token_fd
> > > >    LIBBPF_API int bpf_prog_get_fd_by_id(__u32 id);
> > > >    LIBBPF_API int bpf_prog_get_fd_by_id_opts(__u32 id,
> > > > diff --git a/tools/lib/bpf/btf.c b/tools/lib/bpf/btf.c
> > > > index 560b519f820e2..03cc7c46c16b5 100644
> > > > --- a/tools/lib/bpf/btf.c
> > > > +++ b/tools/lib/bpf/btf.c
> > > > @@ -1619,12 +1619,18 @@ struct btf *btf_get_from_fd(int btf_fd, struct btf *base_btf)
> > > >    	return btf;
> > > >    }
> > > > -struct btf *btf__load_from_kernel_by_id_split(__u32 id, struct btf *base_btf)
> > > > +struct btf *btf_load_from_kernel(__u32 id, struct btf *base_btf, int token_fd)
> > > >    {
> > > >    	struct btf *btf;
> > > >    	int btf_fd;
> > > > +	LIBBPF_OPTS(bpf_get_fd_by_id_opts, opts);
> > > > +
> > > > +	if (token_fd) {
> > > > +		opts.open_flags |= BPF_F_TOKEN_FD;
> > > > +		opts.token_fd = token_fd;
> > > > +	}
> > > > -	btf_fd = bpf_btf_get_fd_by_id(id);
> > > > +	btf_fd = bpf_btf_get_fd_by_id_opts(id, &opts);
> > > >    	if (btf_fd < 0)
> > > >    		return libbpf_err_ptr(-errno);
> > > > @@ -1634,6 +1640,11 @@ struct btf *btf__load_from_kernel_by_id_split(__u32 id, struct btf *base_btf)
> > > >    	return libbpf_ptr(btf);
> > > >    }
> > > > +struct btf *btf__load_from_kernel_by_id_split(__u32 id, struct btf *base_btf)
> > > > +{
> > > > +	return btf_load_from_kernel(id, base_btf, 0);
> > > > +}
> > > > +
> > > >    struct btf *btf__load_from_kernel_by_id(__u32 id)
> > > >    {
> > > >    	return btf__load_from_kernel_by_id_split(id, NULL);
> > > > diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
> > > > index 194809da51725..6b436ec872b0f 100644
> > > > --- a/tools/lib/bpf/libbpf.c
> > > > +++ b/tools/lib/bpf/libbpf.c
> > > > @@ -9959,7 +9959,7 @@ int libbpf_find_vmlinux_btf_id(const char *name,
> > > >    	return libbpf_err(err);
> > > >    }
> > > > -static int libbpf_find_prog_btf_id(const char *name, __u32 attach_prog_fd)
> > > > +static int libbpf_find_prog_btf_id(const char *name, __u32 attach_prog_fd, int token_fd)
> > > >    {
> > > >    	struct bpf_prog_info info;
> > > >    	__u32 info_len = sizeof(info);
> > > > @@ -9979,7 +9979,7 @@ static int libbpf_find_prog_btf_id(const char *name, __u32 attach_prog_fd)
> > > >    		pr_warn("The target program doesn't have BTF\n");
> > > >    		goto out;
> > > >    	}
> > > > -	btf = btf__load_from_kernel_by_id(info.btf_id);
> > > > +	btf = btf_load_from_kernel(info.btf_id, NULL, token_fd);
> > > >    	err = libbpf_get_error(btf);
> > > >    	if (err) {
> > > >    		pr_warn("Failed to get BTF %d of the program: %s\n", info.btf_id, errstr(err));
> > > > @@ -10062,7 +10062,7 @@ static int libbpf_find_attach_btf_id(struct bpf_program *prog, const char *attac
> > > >    			pr_warn("prog '%s': attach program FD is not set\n", prog->name);
> > > >    			return -EINVAL;
> > > >    		}
> > > > -		err = libbpf_find_prog_btf_id(attach_name, attach_prog_fd);
> > > > +		err = libbpf_find_prog_btf_id(attach_name, attach_prog_fd, prog->obj->token_fd);
> > > >    		if (err < 0) {
> > > >    			pr_warn("prog '%s': failed to find BPF program (FD %d) BTF ID for '%s': %s\n",
> > > >    				prog->name, attach_prog_fd, attach_name, errstr(err));
> > > > @@ -12858,7 +12858,7 @@ struct bpf_link *bpf_program__attach_freplace(const struct bpf_program *prog,
> > > >    	if (target_fd) {
> > > >    		LIBBPF_OPTS(bpf_link_create_opts, target_opts);
> > > > -		btf_id = libbpf_find_prog_btf_id(attach_func_name, target_fd);
> > > > +		btf_id = libbpf_find_prog_btf_id(attach_func_name, target_fd, prog->obj->token_fd);
> > > >    		if (btf_id < 0)
> > > >    			return libbpf_err_ptr(btf_id);
> > > > @@ -13679,7 +13679,7 @@ int bpf_program__set_attach_target(struct bpf_program *prog,
> > > >    	if (attach_prog_fd) {
> > > >    		btf_id = libbpf_find_prog_btf_id(attach_func_name,
> > > > -						 attach_prog_fd);
> > > > +						 attach_prog_fd, prog->obj->token_fd);
> > > >    		if (btf_id < 0)
> > > >    			return libbpf_err(btf_id);
> > > >    	} else {
> > > > diff --git a/tools/lib/bpf/libbpf_internal.h b/tools/lib/bpf/libbpf_internal.h
> > > > index de498e2dd6b0b..76669c73dcd16 100644
> > > > --- a/tools/lib/bpf/libbpf_internal.h
> > > > +++ b/tools/lib/bpf/libbpf_internal.h
> > > > @@ -409,6 +409,7 @@ int libbpf__load_raw_btf(const char *raw_types, size_t types_len,
> > > >    int btf_load_into_kernel(struct btf *btf,
> > > >    			 char *log_buf, size_t log_sz, __u32 log_level,
> > > >    			 int token_fd);
> > > > +struct btf *btf_load_from_kernel(__u32 id, struct btf *base_btf, int token_fd);
> > > >    struct btf *btf_get_from_fd(int btf_fd, struct btf *base_btf);
> > > >    void btf_get_kernel_prefix_kind(enum bpf_attach_type attach_type,
> > > 
> > > 
> > > Hi, this patch breaks the build for Kernel 6.14.8 with all the other patches
> > > from https://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git/tree/queue-6.14?id=71ea03905d96af45fbbd377b7ea848e5ea5f2b39
> > > applied on top. A backported version of the same patch is also in
> > > queue-6.12, but I haven't tested if that one also breaks the build for
> > > Kernel 6.12.30.
> > 
> > Now dropped from all queues, thanks.
> 
> Are you sure you dropped the correct patch?
> 
> I may be looking in the wrong place, but I think the patch in question is
> still in queue-6.14 and queue-6.12 as of commit
> bbb86ad66788672ef3d8f68fd31035c62065f300:
> 
> https://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git/tree/queue-6.14/libbpf-pass-bpf-token-from-find_prog_btf_id-to-bpf_b.patch?id=bbb86ad66788672ef3d8f68fd31035c62065f300
> 
> https://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git/tree/queue-6.12/libbpf-pass-bpf-token-from-find_prog_btf_id-to-bpf_b.patch?id=bbb86ad66788672ef3d8f68fd31035c62065f300

Ugh, you are right, I dropped the wrong patch, let me go fix this up...

thanks for checking!

greg k-h

  reply	other threads:[~2025-05-27 15:50 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20250522210809.3119959-1-sashal () kernel ! org>
2025-05-24  8:40 ` Patch "libbpf: Pass BPF token from find_prog_btf_id to BPF_BTF_GET_FD_BY_ID" has been added to the 6 Pascal Ernster
2025-05-27 14:49   ` Greg Kroah-Hartman
2025-05-27 15:27     ` Pascal Ernster
2025-05-27 15:50       ` Greg Kroah-Hartman [this message]
2025-05-27 16:38         ` Pascal Ernster

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=2025052705-sandbar-ambitious-ed02@gregkh \
    --to=gregkh@linuxfoundation.org \
    --cc=git@hardfalcon.net \
    --cc=sashal@kernel.org \
    --cc=stable@vger.kernel.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox