From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0BBE918A6CF for ; Tue, 27 May 2025 15:50:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748361025; cv=none; b=ahBRL/A6Sm/p9FvUXbsBzAjpH0LmJrYhZOz3RbIU5axWuaaivGJVTzOGGJBQ551GXMDFtx4xTqIYHqmbPtqJRbXVNicMNrj0aXVtMw3s/iZupWC1iwphfmetiF/fd1vlkxYe5YcjYQo5eKjoLM8AiT3dZnbbsFhwbFffEtw+jl8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748361025; c=relaxed/simple; bh=pC/XHJPuxG61Pk1CAYsxfKLXZ6fh6Rd+3Vybw9AV1QQ=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=OWJWrXjNBmJcl1Otvtl8FDUSNJyCTJgEYGEOQfp6u1tJ9KPc+uZZBZrN0Hp/tk4A/OK2qYdIhqUoJZL98d0cg8ompoR0iuAL38yrouBCvNWFEK8xPcqMdFUZ77iJwo2NTAiFL8APkzQ76i12JlJ1NRThY2/DYMaB3qNhK0YNEzc= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=2KnUqnJa; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="2KnUqnJa" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1E5DBC4CEE9; Tue, 27 May 2025 15:50:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1748361024; bh=pC/XHJPuxG61Pk1CAYsxfKLXZ6fh6Rd+3Vybw9AV1QQ=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=2KnUqnJaraov9skpLTrp+ABFxtrEhNwPnNaiF16iGA9eR6zfypjUog30egvlRcxxx 8Uv3KOc05OS5G/TeOJZLSkHmv6AulAYmH/gefTVDA6eLQCFSBljEyHdMnehkE8OND2 i4NihAN+JI2VwgKixC2AgIfyJbGoZl8zH0TAfDhM= Date: Tue, 27 May 2025 17:50:21 +0200 From: Greg Kroah-Hartman To: Pascal Ernster Cc: Sasha Levin , 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 Message-ID: <2025052705-sandbar-ambitious-ed02@gregkh> References: <20250522210809.3119959-1-sashalkernel!org> <97e0dda6-b2f3-4433-b19c-dbc5d538669c@hardfalcon.net> <2025052724-backstab-activator-702d@gregkh> <26815461-6d90-4b18-834f-520b4dd814a1@hardfalcon.net> Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline 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 know about it. > > > > > > > > > > > > > > > > commit 7a8beec7026564efe57ebf9c4c568ed0071f2e39 > > > > Author: Mykyta Yatsenko > > > > 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 > > > > Signed-off-by: Andrii Nakryiko > > > > Acked-by: Yonghong Song > > > > Link: https://lore.kernel.org/bpf/20250317174039.161275-4-mykyta.yatsenko5@gmail.com > > > > Signed-off-by: Sasha Levin > > > > > > > > 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