On 6/9/26 2:11 PM, [email protected] wrote:
> From: Yuan Chen <[email protected]>
>
> bpf_object__probe_loading() tries to load trivial SOCKET_FILTER and
> TRACEPOINT programs to verify the BPF environment works. When a
> BPF token is in use with restricted program type permissions, these
> probe loads may fail because the token does not allow the specific
> program types, even though BPF loading is perfectly functional.
>
> Fix by skipping the probe when a token FD is present: BPF token
> creation itself proves the kernel has a working BPF subsystem.
> Real BPF issues will be caught during actual program and map loading.
>
> Signed-off-by: Yuan Chen <[email protected]>
> ---
Please resend your patch applying these:
- don't send as a response to old thread
- this is v3
- target bpf-next
- add fixes tag
- include any Acked-bys
> tools/lib/bpf/libbpf.c | 10 +++-------
> 1 file changed, 3 insertions(+), 7 deletions(-)
>
> diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
> index ab2071fdd3e8..7e21c5eb9533 100644
> --- a/tools/lib/bpf/libbpf.c
> +++ b/tools/lib/bpf/libbpf.c
> @@ -5167,12 +5167,8 @@ bpf_object__probe_loading(struct bpf_object *obj)
> BPF_EXIT_INSN(),
> };
> int ret, insn_cnt = ARRAY_SIZE(insns);
> - LIBBPF_OPTS(bpf_prog_load_opts, opts,
> - .token_fd = obj->token_fd,
> - .prog_flags = obj->token_fd ? BPF_F_TOKEN_FD : 0,
> - );
>
> - if (obj->gen_loader)
> + if (obj->gen_loader || obj->token_fd)
> return 0;
>
> ret = bump_rlimit_memlock();
> @@ -5181,9 +5177,9 @@ bpf_object__probe_loading(struct bpf_object *obj)
> errstr(ret));
>
> /* make sure basic loading works */
> - ret = bpf_prog_load(BPF_PROG_TYPE_SOCKET_FILTER, NULL, "GPL", insns,
> insn_cnt, &opts);
> + ret = bpf_prog_load(BPF_PROG_TYPE_SOCKET_FILTER, NULL, "GPL", insns,
> insn_cnt, NULL);
> if (ret < 0)
> - ret = bpf_prog_load(BPF_PROG_TYPE_TRACEPOINT, NULL, "GPL",
> insns, insn_cnt, &opts);
> + ret = bpf_prog_load(BPF_PROG_TYPE_TRACEPOINT, NULL, "GPL",
> insns, insn_cnt, NULL);
> if (ret < 0) {
> ret = errno;
> pr_warn("Error in %s(): %s. Couldn't load trivial BPF program.
> Make sure your kernel supports BPF (CONFIG_BPF_SYSCALL=y) and/or that
> RLIMIT_MEMLOCK is set to big enough value.\n",