* Re: Patch "libbpf: Pass BPF token from find_prog_btf_id to BPF_BTF_GET_FD_BY_ID" has been added to the 6
[not found] <20250522210809.3119959-1-sashal () kernel ! org>
@ 2025-05-24 8:40 ` Pascal Ernster
2025-05-27 14:49 ` Greg Kroah-Hartman
0 siblings, 1 reply; 5+ messages in thread
From: Pascal Ernster @ 2025-05-24 8:40 UTC (permalink / raw)
To: Sasha Levin, stable; +Cc: Greg Kroah-Hartman
[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.
Regards
Pascal
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Patch "libbpf: Pass BPF token from find_prog_btf_id to BPF_BTF_GET_FD_BY_ID" has been added to the 6
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
0 siblings, 1 reply; 5+ messages in thread
From: Greg Kroah-Hartman @ 2025-05-27 14:49 UTC (permalink / raw)
To: Pascal Ernster; +Cc: Sasha Levin, stable
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.
greg k-h
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Patch "libbpf: Pass BPF token from find_prog_btf_id to BPF_BTF_GET_FD_BY_ID" has been added to the 6
2025-05-27 14:49 ` Greg Kroah-Hartman
@ 2025-05-27 15:27 ` Pascal Ernster
2025-05-27 15:50 ` Greg Kroah-Hartman
0 siblings, 1 reply; 5+ messages in thread
From: Pascal Ernster @ 2025-05-27 15:27 UTC (permalink / raw)
To: Greg Kroah-Hartman; +Cc: Sasha Levin, stable
[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
Regards
Pascal
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Patch "libbpf: Pass BPF token from find_prog_btf_id to BPF_BTF_GET_FD_BY_ID" has been added to the 6
2025-05-27 15:27 ` Pascal Ernster
@ 2025-05-27 15:50 ` Greg Kroah-Hartman
2025-05-27 16:38 ` Pascal Ernster
0 siblings, 1 reply; 5+ messages in thread
From: Greg Kroah-Hartman @ 2025-05-27 15:50 UTC (permalink / raw)
To: Pascal Ernster; +Cc: Sasha Levin, stable
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
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Patch "libbpf: Pass BPF token from find_prog_btf_id to BPF_BTF_GET_FD_BY_ID" has been added to the 6
2025-05-27 15:50 ` Greg Kroah-Hartman
@ 2025-05-27 16:38 ` Pascal Ernster
0 siblings, 0 replies; 5+ messages in thread
From: Pascal Ernster @ 2025-05-27 16:38 UTC (permalink / raw)
To: Greg Kroah-Hartman; +Cc: Sasha Levin, stable
[2025-05-27 17:50] Greg Kroah-Hartman:
> thanks for checking!
You're welcome, thanks your your work! :)
Pascal
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2025-05-27 16:38 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[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
2025-05-27 16:38 ` Pascal Ernster
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox