* [PATCH bpf] bpf: fix configuration-dependent BTF function references
@ 2024-12-12 23:00 Thomas Weißschuh
2024-12-12 23:27 ` Andrii Nakryiko
2024-12-13 23:10 ` patchwork-bot+netdevbpf
0 siblings, 2 replies; 6+ messages in thread
From: Thomas Weißschuh @ 2024-12-12 23:00 UTC (permalink / raw)
To: Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko,
Martin KaFai Lau, Eduard Zingerman, Song Liu, Yonghong Song,
John Fastabend, KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa,
David S. Miller, Jakub Kicinski, Jesper Dangaard Brouer
Cc: bpf, linux-kernel, netdev, Thomas Weißschuh
These BTF functions are not available unconditionally,
only reference them when they are available.
Avoid the following build warnings:
BTF .tmp_vmlinux1.btf.o
btf_encoder__tag_kfunc: failed to find kfunc 'bpf_send_signal_task' in BTF
btf_encoder__tag_kfuncs: failed to tag kfunc 'bpf_send_signal_task'
NM .tmp_vmlinux1.syms
KSYMS .tmp_vmlinux1.kallsyms.S
AS .tmp_vmlinux1.kallsyms.o
LD .tmp_vmlinux2
NM .tmp_vmlinux2.syms
KSYMS .tmp_vmlinux2.kallsyms.S
AS .tmp_vmlinux2.kallsyms.o
LD vmlinux
BTFIDS vmlinux
WARN: resolve_btfids: unresolved symbol prog_test_ref_kfunc
WARN: resolve_btfids: unresolved symbol bpf_crypto_ctx
WARN: resolve_btfids: unresolved symbol bpf_send_signal_task
WARN: resolve_btfids: unresolved symbol bpf_modify_return_test_tp
WARN: resolve_btfids: unresolved symbol bpf_dynptr_from_xdp
WARN: resolve_btfids: unresolved symbol bpf_dynptr_from_skb
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
---
kernel/bpf/helpers.c | 4 ++++
kernel/bpf/verifier.c | 8 ++++++++
2 files changed, 12 insertions(+)
diff --git a/kernel/bpf/helpers.c b/kernel/bpf/helpers.c
index 751c150f9e1cd7f56e6a2b68a7ebb4ae89a30d2d..5edf5436a7804816b7dcf1bbef2624d71a985f20 100644
--- a/kernel/bpf/helpers.c
+++ b/kernel/bpf/helpers.c
@@ -3089,7 +3089,9 @@ BTF_ID_FLAGS(func, bpf_task_get_cgroup1, KF_ACQUIRE | KF_RCU | KF_RET_NULL)
BTF_ID_FLAGS(func, bpf_task_from_pid, KF_ACQUIRE | KF_RET_NULL)
BTF_ID_FLAGS(func, bpf_task_from_vpid, KF_ACQUIRE | KF_RET_NULL)
BTF_ID_FLAGS(func, bpf_throw)
+#ifdef CONFIG_BPF_EVENTS
BTF_ID_FLAGS(func, bpf_send_signal_task, KF_TRUSTED_ARGS)
+#endif
BTF_KFUNCS_END(generic_btf_ids)
static const struct btf_kfunc_id_set generic_kfunc_set = {
@@ -3135,7 +3137,9 @@ BTF_ID_FLAGS(func, bpf_dynptr_is_null)
BTF_ID_FLAGS(func, bpf_dynptr_is_rdonly)
BTF_ID_FLAGS(func, bpf_dynptr_size)
BTF_ID_FLAGS(func, bpf_dynptr_clone)
+#ifdef CONFIG_NET
BTF_ID_FLAGS(func, bpf_modify_return_test_tp)
+#endif
BTF_ID_FLAGS(func, bpf_wq_init)
BTF_ID_FLAGS(func, bpf_wq_set_callback_impl)
BTF_ID_FLAGS(func, bpf_wq_start)
diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
index 5e541339b2f6d1870561033fd55cca7144db14bc..77bbf58418fee7533bce539c8e005d2342ee1a48 100644
--- a/kernel/bpf/verifier.c
+++ b/kernel/bpf/verifier.c
@@ -5526,7 +5526,9 @@ static bool in_rcu_cs(struct bpf_verifier_env *env)
/* Once GCC supports btf_type_tag the following mechanism will be replaced with tag check */
BTF_SET_START(rcu_protected_types)
+#ifdef CONFIG_NET
BTF_ID(struct, prog_test_ref_kfunc)
+#endif
#ifdef CONFIG_CGROUPS
BTF_ID(struct, cgroup)
#endif
@@ -5534,7 +5536,9 @@ BTF_ID(struct, cgroup)
BTF_ID(struct, bpf_cpumask)
#endif
BTF_ID(struct, task_struct)
+#ifdef CONFIG_CRYPTO
BTF_ID(struct, bpf_crypto_ctx)
+#endif
BTF_SET_END(rcu_protected_types)
static bool rcu_protected_object(const struct btf *btf, u32 btf_id)
@@ -11529,8 +11533,10 @@ BTF_ID(func, bpf_rdonly_cast)
BTF_ID(func, bpf_rbtree_remove)
BTF_ID(func, bpf_rbtree_add_impl)
BTF_ID(func, bpf_rbtree_first)
+#ifdef CONFIG_NET
BTF_ID(func, bpf_dynptr_from_skb)
BTF_ID(func, bpf_dynptr_from_xdp)
+#endif
BTF_ID(func, bpf_dynptr_slice)
BTF_ID(func, bpf_dynptr_slice_rdwr)
BTF_ID(func, bpf_dynptr_clone)
@@ -11558,8 +11564,10 @@ BTF_ID(func, bpf_rcu_read_unlock)
BTF_ID(func, bpf_rbtree_remove)
BTF_ID(func, bpf_rbtree_add_impl)
BTF_ID(func, bpf_rbtree_first)
+#ifdef CONFIG_NET
BTF_ID(func, bpf_dynptr_from_skb)
BTF_ID(func, bpf_dynptr_from_xdp)
+#endif
BTF_ID(func, bpf_dynptr_slice)
BTF_ID(func, bpf_dynptr_slice_rdwr)
BTF_ID(func, bpf_dynptr_clone)
---
base-commit: 5d287a7de3c95b78946e71d17d15ec9c87fffe7f
change-id: 20241212-bpf-cond-ids-9bfbc64dd77b
Best regards,
--
Thomas Weißschuh <linux@weissschuh.net>
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH bpf] bpf: fix configuration-dependent BTF function references
2024-12-12 23:00 [PATCH bpf] bpf: fix configuration-dependent BTF function references Thomas Weißschuh
@ 2024-12-12 23:27 ` Andrii Nakryiko
2024-12-12 23:37 ` Thomas Weißschuh
2024-12-13 23:10 ` patchwork-bot+netdevbpf
1 sibling, 1 reply; 6+ messages in thread
From: Andrii Nakryiko @ 2024-12-12 23:27 UTC (permalink / raw)
To: Thomas Weißschuh
Cc: Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko,
Martin KaFai Lau, Eduard Zingerman, Song Liu, Yonghong Song,
John Fastabend, KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa,
David S. Miller, Jakub Kicinski, Jesper Dangaard Brouer, bpf,
linux-kernel, netdev
On Thu, Dec 12, 2024 at 3:00 PM Thomas Weißschuh <linux@weissschuh.net> wrote:
>
> These BTF functions are not available unconditionally,
> only reference them when they are available.
>
> Avoid the following build warnings:
>
> BTF .tmp_vmlinux1.btf.o
> btf_encoder__tag_kfunc: failed to find kfunc 'bpf_send_signal_task' in BTF
> btf_encoder__tag_kfuncs: failed to tag kfunc 'bpf_send_signal_task'
> NM .tmp_vmlinux1.syms
> KSYMS .tmp_vmlinux1.kallsyms.S
> AS .tmp_vmlinux1.kallsyms.o
> LD .tmp_vmlinux2
> NM .tmp_vmlinux2.syms
> KSYMS .tmp_vmlinux2.kallsyms.S
> AS .tmp_vmlinux2.kallsyms.o
> LD vmlinux
> BTFIDS vmlinux
> WARN: resolve_btfids: unresolved symbol prog_test_ref_kfunc
> WARN: resolve_btfids: unresolved symbol bpf_crypto_ctx
> WARN: resolve_btfids: unresolved symbol bpf_send_signal_task
> WARN: resolve_btfids: unresolved symbol bpf_modify_return_test_tp
> WARN: resolve_btfids: unresolved symbol bpf_dynptr_from_xdp
> WARN: resolve_btfids: unresolved symbol bpf_dynptr_from_skb
>
> Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
> ---
> kernel/bpf/helpers.c | 4 ++++
> kernel/bpf/verifier.c | 8 ++++++++
> 2 files changed, 12 insertions(+)
>
> diff --git a/kernel/bpf/helpers.c b/kernel/bpf/helpers.c
> index 751c150f9e1cd7f56e6a2b68a7ebb4ae89a30d2d..5edf5436a7804816b7dcf1bbef2624d71a985f20 100644
> --- a/kernel/bpf/helpers.c
> +++ b/kernel/bpf/helpers.c
> @@ -3089,7 +3089,9 @@ BTF_ID_FLAGS(func, bpf_task_get_cgroup1, KF_ACQUIRE | KF_RCU | KF_RET_NULL)
> BTF_ID_FLAGS(func, bpf_task_from_pid, KF_ACQUIRE | KF_RET_NULL)
> BTF_ID_FLAGS(func, bpf_task_from_vpid, KF_ACQUIRE | KF_RET_NULL)
> BTF_ID_FLAGS(func, bpf_throw)
> +#ifdef CONFIG_BPF_EVENTS
> BTF_ID_FLAGS(func, bpf_send_signal_task, KF_TRUSTED_ARGS)
> +#endif
> BTF_KFUNCS_END(generic_btf_ids)
>
> static const struct btf_kfunc_id_set generic_kfunc_set = {
> @@ -3135,7 +3137,9 @@ BTF_ID_FLAGS(func, bpf_dynptr_is_null)
> BTF_ID_FLAGS(func, bpf_dynptr_is_rdonly)
> BTF_ID_FLAGS(func, bpf_dynptr_size)
> BTF_ID_FLAGS(func, bpf_dynptr_clone)
> +#ifdef CONFIG_NET
> BTF_ID_FLAGS(func, bpf_modify_return_test_tp)
> +#endif
It makes little sense to have bpf_prog_test_run_tracing() and
bpf_modify_return_test_tp() depend on CONFIG_NET... It's just
historically where BPF_PROG_TEST_RUN functionality was implemented,
but it seems like we need to move bpf_prog_test_run_tracing() and
other tracing-related testing stuff into kernel/trace/bpf_trace.c or
somewhere under kernel/bpf/ (core.c? helpers.c?)
> BTF_ID_FLAGS(func, bpf_wq_init)
> BTF_ID_FLAGS(func, bpf_wq_set_callback_impl)
> BTF_ID_FLAGS(func, bpf_wq_start)
> diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
> index 5e541339b2f6d1870561033fd55cca7144db14bc..77bbf58418fee7533bce539c8e005d2342ee1a48 100644
> --- a/kernel/bpf/verifier.c
> +++ b/kernel/bpf/verifier.c
> @@ -5526,7 +5526,9 @@ static bool in_rcu_cs(struct bpf_verifier_env *env)
>
> /* Once GCC supports btf_type_tag the following mechanism will be replaced with tag check */
> BTF_SET_START(rcu_protected_types)
> +#ifdef CONFIG_NET
> BTF_ID(struct, prog_test_ref_kfunc)
> +#endif
> #ifdef CONFIG_CGROUPS
> BTF_ID(struct, cgroup)
> #endif
> @@ -5534,7 +5536,9 @@ BTF_ID(struct, cgroup)
> BTF_ID(struct, bpf_cpumask)
> #endif
> BTF_ID(struct, task_struct)
> +#ifdef CONFIG_CRYPTO
> BTF_ID(struct, bpf_crypto_ctx)
> +#endif
> BTF_SET_END(rcu_protected_types)
>
> static bool rcu_protected_object(const struct btf *btf, u32 btf_id)
> @@ -11529,8 +11533,10 @@ BTF_ID(func, bpf_rdonly_cast)
> BTF_ID(func, bpf_rbtree_remove)
> BTF_ID(func, bpf_rbtree_add_impl)
> BTF_ID(func, bpf_rbtree_first)
> +#ifdef CONFIG_NET
> BTF_ID(func, bpf_dynptr_from_skb)
> BTF_ID(func, bpf_dynptr_from_xdp)
> +#endif
> BTF_ID(func, bpf_dynptr_slice)
> BTF_ID(func, bpf_dynptr_slice_rdwr)
> BTF_ID(func, bpf_dynptr_clone)
> @@ -11558,8 +11564,10 @@ BTF_ID(func, bpf_rcu_read_unlock)
> BTF_ID(func, bpf_rbtree_remove)
> BTF_ID(func, bpf_rbtree_add_impl)
> BTF_ID(func, bpf_rbtree_first)
> +#ifdef CONFIG_NET
> BTF_ID(func, bpf_dynptr_from_skb)
> BTF_ID(func, bpf_dynptr_from_xdp)
> +#endif
> BTF_ID(func, bpf_dynptr_slice)
> BTF_ID(func, bpf_dynptr_slice_rdwr)
> BTF_ID(func, bpf_dynptr_clone)
>
> ---
> base-commit: 5d287a7de3c95b78946e71d17d15ec9c87fffe7f
> change-id: 20241212-bpf-cond-ids-9bfbc64dd77b
>
> Best regards,
> --
> Thomas Weißschuh <linux@weissschuh.net>
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH bpf] bpf: fix configuration-dependent BTF function references
2024-12-12 23:27 ` Andrii Nakryiko
@ 2024-12-12 23:37 ` Thomas Weißschuh
2024-12-13 22:37 ` Andrii Nakryiko
0 siblings, 1 reply; 6+ messages in thread
From: Thomas Weißschuh @ 2024-12-12 23:37 UTC (permalink / raw)
To: Andrii Nakryiko
Cc: Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko,
Martin KaFai Lau, Eduard Zingerman, Song Liu, Yonghong Song,
John Fastabend, KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa,
David S. Miller, Jakub Kicinski, Jesper Dangaard Brouer, bpf,
linux-kernel, netdev
On 2024-12-12 15:27:12-0800, Andrii Nakryiko wrote:
> On Thu, Dec 12, 2024 at 3:00 PM Thomas Weißschuh <linux@weissschuh.net> wrote:
> >
> > These BTF functions are not available unconditionally,
> > only reference them when they are available.
> >
> > Avoid the following build warnings:
> >
> > BTF .tmp_vmlinux1.btf.o
> > btf_encoder__tag_kfunc: failed to find kfunc 'bpf_send_signal_task' in BTF
> > btf_encoder__tag_kfuncs: failed to tag kfunc 'bpf_send_signal_task'
> > NM .tmp_vmlinux1.syms
> > KSYMS .tmp_vmlinux1.kallsyms.S
> > AS .tmp_vmlinux1.kallsyms.o
> > LD .tmp_vmlinux2
> > NM .tmp_vmlinux2.syms
> > KSYMS .tmp_vmlinux2.kallsyms.S
> > AS .tmp_vmlinux2.kallsyms.o
> > LD vmlinux
> > BTFIDS vmlinux
> > WARN: resolve_btfids: unresolved symbol prog_test_ref_kfunc
> > WARN: resolve_btfids: unresolved symbol bpf_crypto_ctx
> > WARN: resolve_btfids: unresolved symbol bpf_send_signal_task
> > WARN: resolve_btfids: unresolved symbol bpf_modify_return_test_tp
> > WARN: resolve_btfids: unresolved symbol bpf_dynptr_from_xdp
> > WARN: resolve_btfids: unresolved symbol bpf_dynptr_from_skb
> >
> > Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
> > ---
> > kernel/bpf/helpers.c | 4 ++++
> > kernel/bpf/verifier.c | 8 ++++++++
> > 2 files changed, 12 insertions(+)
> >
> > diff --git a/kernel/bpf/helpers.c b/kernel/bpf/helpers.c
> > index 751c150f9e1cd7f56e6a2b68a7ebb4ae89a30d2d..5edf5436a7804816b7dcf1bbef2624d71a985f20 100644
> > --- a/kernel/bpf/helpers.c
> > +++ b/kernel/bpf/helpers.c
> > @@ -3089,7 +3089,9 @@ BTF_ID_FLAGS(func, bpf_task_get_cgroup1, KF_ACQUIRE | KF_RCU | KF_RET_NULL)
> > BTF_ID_FLAGS(func, bpf_task_from_pid, KF_ACQUIRE | KF_RET_NULL)
> > BTF_ID_FLAGS(func, bpf_task_from_vpid, KF_ACQUIRE | KF_RET_NULL)
> > BTF_ID_FLAGS(func, bpf_throw)
> > +#ifdef CONFIG_BPF_EVENTS
> > BTF_ID_FLAGS(func, bpf_send_signal_task, KF_TRUSTED_ARGS)
> > +#endif
> > BTF_KFUNCS_END(generic_btf_ids)
> >
> > static const struct btf_kfunc_id_set generic_kfunc_set = {
> > @@ -3135,7 +3137,9 @@ BTF_ID_FLAGS(func, bpf_dynptr_is_null)
> > BTF_ID_FLAGS(func, bpf_dynptr_is_rdonly)
> > BTF_ID_FLAGS(func, bpf_dynptr_size)
> > BTF_ID_FLAGS(func, bpf_dynptr_clone)
> > +#ifdef CONFIG_NET
> > BTF_ID_FLAGS(func, bpf_modify_return_test_tp)
> > +#endif
>
> It makes little sense to have bpf_prog_test_run_tracing() and
> bpf_modify_return_test_tp() depend on CONFIG_NET... It's just
> historically where BPF_PROG_TEST_RUN functionality was implemented,
> but it seems like we need to move bpf_prog_test_run_tracing() and
> other tracing-related testing stuff into kernel/trace/bpf_trace.c or
> somewhere under kernel/bpf/ (core.c? helpers.c?)
I agree. But today these are the config values which are in effect.
When the functions get moved, the config values can be adapted.
With my commit "kbuild/btf: Propagate CONFIG_WERROR to resolve_btfids"
in bpf-next the warnings can actually become errors.
So I'd propose to apply this fix to avoid issues in the near future and
then do a proper move without any urgency.
> > BTF_ID_FLAGS(func, bpf_wq_init)
> > BTF_ID_FLAGS(func, bpf_wq_set_callback_impl)
> > BTF_ID_FLAGS(func, bpf_wq_start)
> > diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
> > index 5e541339b2f6d1870561033fd55cca7144db14bc..77bbf58418fee7533bce539c8e005d2342ee1a48 100644
> > --- a/kernel/bpf/verifier.c
> > +++ b/kernel/bpf/verifier.c
> > @@ -5526,7 +5526,9 @@ static bool in_rcu_cs(struct bpf_verifier_env *env)
> >
> > /* Once GCC supports btf_type_tag the following mechanism will be replaced with tag check */
> > BTF_SET_START(rcu_protected_types)
> > +#ifdef CONFIG_NET
> > BTF_ID(struct, prog_test_ref_kfunc)
> > +#endif
> > #ifdef CONFIG_CGROUPS
> > BTF_ID(struct, cgroup)
> > #endif
> > @@ -5534,7 +5536,9 @@ BTF_ID(struct, cgroup)
> > BTF_ID(struct, bpf_cpumask)
> > #endif
> > BTF_ID(struct, task_struct)
> > +#ifdef CONFIG_CRYPTO
> > BTF_ID(struct, bpf_crypto_ctx)
> > +#endif
> > BTF_SET_END(rcu_protected_types)
> >
> > static bool rcu_protected_object(const struct btf *btf, u32 btf_id)
> > @@ -11529,8 +11533,10 @@ BTF_ID(func, bpf_rdonly_cast)
> > BTF_ID(func, bpf_rbtree_remove)
> > BTF_ID(func, bpf_rbtree_add_impl)
> > BTF_ID(func, bpf_rbtree_first)
> > +#ifdef CONFIG_NET
> > BTF_ID(func, bpf_dynptr_from_skb)
> > BTF_ID(func, bpf_dynptr_from_xdp)
> > +#endif
> > BTF_ID(func, bpf_dynptr_slice)
> > BTF_ID(func, bpf_dynptr_slice_rdwr)
> > BTF_ID(func, bpf_dynptr_clone)
> > @@ -11558,8 +11564,10 @@ BTF_ID(func, bpf_rcu_read_unlock)
> > BTF_ID(func, bpf_rbtree_remove)
> > BTF_ID(func, bpf_rbtree_add_impl)
> > BTF_ID(func, bpf_rbtree_first)
> > +#ifdef CONFIG_NET
> > BTF_ID(func, bpf_dynptr_from_skb)
> > BTF_ID(func, bpf_dynptr_from_xdp)
> > +#endif
> > BTF_ID(func, bpf_dynptr_slice)
> > BTF_ID(func, bpf_dynptr_slice_rdwr)
> > BTF_ID(func, bpf_dynptr_clone)
> >
> > ---
> > base-commit: 5d287a7de3c95b78946e71d17d15ec9c87fffe7f
> > change-id: 20241212-bpf-cond-ids-9bfbc64dd77b
> >
> > Best regards,
> > --
> > Thomas Weißschuh <linux@weissschuh.net>
> >
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH bpf] bpf: fix configuration-dependent BTF function references
2024-12-12 23:37 ` Thomas Weißschuh
@ 2024-12-13 22:37 ` Andrii Nakryiko
0 siblings, 0 replies; 6+ messages in thread
From: Andrii Nakryiko @ 2024-12-13 22:37 UTC (permalink / raw)
To: Thomas Weißschuh
Cc: Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko,
Martin KaFai Lau, Eduard Zingerman, Song Liu, Yonghong Song,
John Fastabend, KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa,
David S. Miller, Jakub Kicinski, Jesper Dangaard Brouer, bpf,
linux-kernel, netdev
On Thu, Dec 12, 2024 at 3:37 PM Thomas Weißschuh <linux@weissschuh.net> wrote:
>
> On 2024-12-12 15:27:12-0800, Andrii Nakryiko wrote:
> > On Thu, Dec 12, 2024 at 3:00 PM Thomas Weißschuh <linux@weissschuh.net> wrote:
> > >
> > > These BTF functions are not available unconditionally,
> > > only reference them when they are available.
> > >
> > > Avoid the following build warnings:
> > >
> > > BTF .tmp_vmlinux1.btf.o
> > > btf_encoder__tag_kfunc: failed to find kfunc 'bpf_send_signal_task' in BTF
> > > btf_encoder__tag_kfuncs: failed to tag kfunc 'bpf_send_signal_task'
> > > NM .tmp_vmlinux1.syms
> > > KSYMS .tmp_vmlinux1.kallsyms.S
> > > AS .tmp_vmlinux1.kallsyms.o
> > > LD .tmp_vmlinux2
> > > NM .tmp_vmlinux2.syms
> > > KSYMS .tmp_vmlinux2.kallsyms.S
> > > AS .tmp_vmlinux2.kallsyms.o
> > > LD vmlinux
> > > BTFIDS vmlinux
> > > WARN: resolve_btfids: unresolved symbol prog_test_ref_kfunc
> > > WARN: resolve_btfids: unresolved symbol bpf_crypto_ctx
> > > WARN: resolve_btfids: unresolved symbol bpf_send_signal_task
> > > WARN: resolve_btfids: unresolved symbol bpf_modify_return_test_tp
> > > WARN: resolve_btfids: unresolved symbol bpf_dynptr_from_xdp
> > > WARN: resolve_btfids: unresolved symbol bpf_dynptr_from_skb
> > >
> > > Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
> > > ---
> > > kernel/bpf/helpers.c | 4 ++++
> > > kernel/bpf/verifier.c | 8 ++++++++
> > > 2 files changed, 12 insertions(+)
> > >
> > > diff --git a/kernel/bpf/helpers.c b/kernel/bpf/helpers.c
> > > index 751c150f9e1cd7f56e6a2b68a7ebb4ae89a30d2d..5edf5436a7804816b7dcf1bbef2624d71a985f20 100644
> > > --- a/kernel/bpf/helpers.c
> > > +++ b/kernel/bpf/helpers.c
> > > @@ -3089,7 +3089,9 @@ BTF_ID_FLAGS(func, bpf_task_get_cgroup1, KF_ACQUIRE | KF_RCU | KF_RET_NULL)
> > > BTF_ID_FLAGS(func, bpf_task_from_pid, KF_ACQUIRE | KF_RET_NULL)
> > > BTF_ID_FLAGS(func, bpf_task_from_vpid, KF_ACQUIRE | KF_RET_NULL)
> > > BTF_ID_FLAGS(func, bpf_throw)
> > > +#ifdef CONFIG_BPF_EVENTS
> > > BTF_ID_FLAGS(func, bpf_send_signal_task, KF_TRUSTED_ARGS)
> > > +#endif
> > > BTF_KFUNCS_END(generic_btf_ids)
> > >
> > > static const struct btf_kfunc_id_set generic_kfunc_set = {
> > > @@ -3135,7 +3137,9 @@ BTF_ID_FLAGS(func, bpf_dynptr_is_null)
> > > BTF_ID_FLAGS(func, bpf_dynptr_is_rdonly)
> > > BTF_ID_FLAGS(func, bpf_dynptr_size)
> > > BTF_ID_FLAGS(func, bpf_dynptr_clone)
> > > +#ifdef CONFIG_NET
> > > BTF_ID_FLAGS(func, bpf_modify_return_test_tp)
> > > +#endif
> >
> > It makes little sense to have bpf_prog_test_run_tracing() and
> > bpf_modify_return_test_tp() depend on CONFIG_NET... It's just
> > historically where BPF_PROG_TEST_RUN functionality was implemented,
> > but it seems like we need to move bpf_prog_test_run_tracing() and
> > other tracing-related testing stuff into kernel/trace/bpf_trace.c or
> > somewhere under kernel/bpf/ (core.c? helpers.c?)
>
> I agree. But today these are the config values which are in effect.
> When the functions get moved, the config values can be adapted.
> With my commit "kbuild/btf: Propagate CONFIG_WERROR to resolve_btfids"
> in bpf-next the warnings can actually become errors.
> So I'd propose to apply this fix to avoid issues in the near future and
> then do a proper move without any urgency.
>
Fair enough.
Acked-by: Andrii Nakryiko <andrii@kernel.org>
> > > BTF_ID_FLAGS(func, bpf_wq_init)
> > > BTF_ID_FLAGS(func, bpf_wq_set_callback_impl)
> > > BTF_ID_FLAGS(func, bpf_wq_start)
> > > diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
> > > index 5e541339b2f6d1870561033fd55cca7144db14bc..77bbf58418fee7533bce539c8e005d2342ee1a48 100644
> > > --- a/kernel/bpf/verifier.c
> > > +++ b/kernel/bpf/verifier.c
> > > @@ -5526,7 +5526,9 @@ static bool in_rcu_cs(struct bpf_verifier_env *env)
> > >
> > > /* Once GCC supports btf_type_tag the following mechanism will be replaced with tag check */
> > > BTF_SET_START(rcu_protected_types)
> > > +#ifdef CONFIG_NET
> > > BTF_ID(struct, prog_test_ref_kfunc)
> > > +#endif
> > > #ifdef CONFIG_CGROUPS
> > > BTF_ID(struct, cgroup)
> > > #endif
> > > @@ -5534,7 +5536,9 @@ BTF_ID(struct, cgroup)
> > > BTF_ID(struct, bpf_cpumask)
> > > #endif
> > > BTF_ID(struct, task_struct)
> > > +#ifdef CONFIG_CRYPTO
> > > BTF_ID(struct, bpf_crypto_ctx)
> > > +#endif
> > > BTF_SET_END(rcu_protected_types)
> > >
> > > static bool rcu_protected_object(const struct btf *btf, u32 btf_id)
> > > @@ -11529,8 +11533,10 @@ BTF_ID(func, bpf_rdonly_cast)
> > > BTF_ID(func, bpf_rbtree_remove)
> > > BTF_ID(func, bpf_rbtree_add_impl)
> > > BTF_ID(func, bpf_rbtree_first)
> > > +#ifdef CONFIG_NET
> > > BTF_ID(func, bpf_dynptr_from_skb)
> > > BTF_ID(func, bpf_dynptr_from_xdp)
> > > +#endif
> > > BTF_ID(func, bpf_dynptr_slice)
> > > BTF_ID(func, bpf_dynptr_slice_rdwr)
> > > BTF_ID(func, bpf_dynptr_clone)
> > > @@ -11558,8 +11564,10 @@ BTF_ID(func, bpf_rcu_read_unlock)
> > > BTF_ID(func, bpf_rbtree_remove)
> > > BTF_ID(func, bpf_rbtree_add_impl)
> > > BTF_ID(func, bpf_rbtree_first)
> > > +#ifdef CONFIG_NET
> > > BTF_ID(func, bpf_dynptr_from_skb)
> > > BTF_ID(func, bpf_dynptr_from_xdp)
> > > +#endif
> > > BTF_ID(func, bpf_dynptr_slice)
> > > BTF_ID(func, bpf_dynptr_slice_rdwr)
> > > BTF_ID(func, bpf_dynptr_clone)
> > >
> > > ---
> > > base-commit: 5d287a7de3c95b78946e71d17d15ec9c87fffe7f
> > > change-id: 20241212-bpf-cond-ids-9bfbc64dd77b
> > >
> > > Best regards,
> > > --
> > > Thomas Weißschuh <linux@weissschuh.net>
> > >
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH bpf] bpf: fix configuration-dependent BTF function references
2024-12-12 23:00 [PATCH bpf] bpf: fix configuration-dependent BTF function references Thomas Weißschuh
2024-12-12 23:27 ` Andrii Nakryiko
@ 2024-12-13 23:10 ` patchwork-bot+netdevbpf
2024-12-18 21:18 ` Alexei Starovoitov
1 sibling, 1 reply; 6+ messages in thread
From: patchwork-bot+netdevbpf @ 2024-12-13 23:10 UTC (permalink / raw)
To: =?utf-8?q?Thomas_Wei=C3=9Fschuh_=3Clinux=40weissschuh=2Enet=3E?=
Cc: ast, daniel, andrii, martin.lau, eddyz87, song, yonghong.song,
john.fastabend, kpsingh, sdf, haoluo, jolsa, davem, kuba, hawk,
bpf, linux-kernel, netdev
Hello:
This patch was applied to bpf/bpf-next.git (master)
by Andrii Nakryiko <andrii@kernel.org>:
On Fri, 13 Dec 2024 00:00:30 +0100 you wrote:
> These BTF functions are not available unconditionally,
> only reference them when they are available.
>
> Avoid the following build warnings:
>
> BTF .tmp_vmlinux1.btf.o
> btf_encoder__tag_kfunc: failed to find kfunc 'bpf_send_signal_task' in BTF
> btf_encoder__tag_kfuncs: failed to tag kfunc 'bpf_send_signal_task'
> NM .tmp_vmlinux1.syms
> KSYMS .tmp_vmlinux1.kallsyms.S
> AS .tmp_vmlinux1.kallsyms.o
> LD .tmp_vmlinux2
> NM .tmp_vmlinux2.syms
> KSYMS .tmp_vmlinux2.kallsyms.S
> AS .tmp_vmlinux2.kallsyms.o
> LD vmlinux
> BTFIDS vmlinux
> WARN: resolve_btfids: unresolved symbol prog_test_ref_kfunc
> WARN: resolve_btfids: unresolved symbol bpf_crypto_ctx
> WARN: resolve_btfids: unresolved symbol bpf_send_signal_task
> WARN: resolve_btfids: unresolved symbol bpf_modify_return_test_tp
> WARN: resolve_btfids: unresolved symbol bpf_dynptr_from_xdp
> WARN: resolve_btfids: unresolved symbol bpf_dynptr_from_skb
>
> [...]
Here is the summary with links:
- [bpf] bpf: fix configuration-dependent BTF function references
https://git.kernel.org/bpf/bpf-next/c/00a5acdbf398
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH bpf] bpf: fix configuration-dependent BTF function references
2024-12-13 23:10 ` patchwork-bot+netdevbpf
@ 2024-12-18 21:18 ` Alexei Starovoitov
0 siblings, 0 replies; 6+ messages in thread
From: Alexei Starovoitov @ 2024-12-18 21:18 UTC (permalink / raw)
To: Thomas Weißschuh, Andrii Nakryiko
Cc: Alexei Starovoitov, Daniel Borkmann, Martin KaFai Lau, Eddy Z,
Song Liu, Yonghong Song, John Fastabend, KP Singh,
Stanislav Fomichev, Hao Luo, Jiri Olsa, David S. Miller,
Jakub Kicinski, Jesper Dangaard Brouer, bpf, LKML,
Network Development
On Fri, Dec 13, 2024 at 3:10 PM <patchwork-bot+netdevbpf@kernel.org> wrote:
>
> Hello:
>
> This patch was applied to bpf/bpf-next.git (master)
> by Andrii Nakryiko <andrii@kernel.org>:
>
> On Fri, 13 Dec 2024 00:00:30 +0100 you wrote:
> > These BTF functions are not available unconditionally,
> > only reference them when they are available.
> >
> > Avoid the following build warnings:
> >
> > BTF .tmp_vmlinux1.btf.o
> > btf_encoder__tag_kfunc: failed to find kfunc 'bpf_send_signal_task' in BTF
> > btf_encoder__tag_kfuncs: failed to tag kfunc 'bpf_send_signal_task'
> > NM .tmp_vmlinux1.syms
> > KSYMS .tmp_vmlinux1.kallsyms.S
> > AS .tmp_vmlinux1.kallsyms.o
> > LD .tmp_vmlinux2
> > NM .tmp_vmlinux2.syms
> > KSYMS .tmp_vmlinux2.kallsyms.S
> > AS .tmp_vmlinux2.kallsyms.o
> > LD vmlinux
> > BTFIDS vmlinux
> > WARN: resolve_btfids: unresolved symbol prog_test_ref_kfunc
> > WARN: resolve_btfids: unresolved symbol bpf_crypto_ctx
> > WARN: resolve_btfids: unresolved symbol bpf_send_signal_task
> > WARN: resolve_btfids: unresolved symbol bpf_modify_return_test_tp
> > WARN: resolve_btfids: unresolved symbol bpf_dynptr_from_xdp
> > WARN: resolve_btfids: unresolved symbol bpf_dynptr_from_skb
> >
> > [...]
>
> Here is the summary with links:
> - [bpf] bpf: fix configuration-dependent BTF function references
> https://git.kernel.org/bpf/bpf-next/c/00a5acdbf398
Just noticed that this is broken.
The #ifdef CONFIG_NET part in special_kfunc_list()
needs to match positions in enum special_kfunc_type.
BTF_ID_UNUSED must be used when !CONFIG_NET.
Pls send the fix.
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-12-18 21:18 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-12 23:00 [PATCH bpf] bpf: fix configuration-dependent BTF function references Thomas Weißschuh
2024-12-12 23:27 ` Andrii Nakryiko
2024-12-12 23:37 ` Thomas Weißschuh
2024-12-13 22:37 ` Andrii Nakryiko
2024-12-13 23:10 ` patchwork-bot+netdevbpf
2024-12-18 21:18 ` Alexei Starovoitov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox