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",


Reply via email to