Re: fentry/fexit trace to BPF_PROG_TYPE_EXT BPF program not working

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Apr 29, 2020 at 4:51 AM Eelco Chaudron <echaudro@xxxxxxxxxx> wrote:
>
> Hi Alexie at al.
>
> I was trying to attach a fentry/fexit trace to BPF_PROG_TYPE_EXT BPF
> program but I'm getting a verifier error, and not sure why. Is this
> supported?

The intent was to make it possible.
The verifier comment says:
                        /* Cannot fentry/fexit another fentry/fexit program.
                         * Cannot attach program extension to another extension.
                         * It's ok to attach fentry/fexit to extension program.
                         */

> This is the error:
>
> libbpf: -- BEGIN DUMP LOG ---
> libbpf:
> arg#0 type is not a struct
> Unrecognized arg#0 type PTR

looks like verifier got confused here.
It should have detected correct btf_id from freplace prog.
not sure what's going on.

> ; int BPF_PROG(trace_on_entry, struct xdp_md *xdp)
> 0: (79) r1 = *(u64 *)(r1 +0)
> invalid bpf_context access off=0 size=8
> processed 1 insns (limit 1000000) max_states_per_insn 0 total_states 0
> peak_states 0 mark_read 0
> libbpf: -- END LOG --
>
> This is the actual fentry code using the BPF_PROG macro from
> tools/lib/bpf/bpf_tracing.h:
>
> SEC("fentry/func")
> int BPF_PROG(trace_on_entry, struct xdp_md *xdp)
> {
>      trace_to_perf_buffer(xdp, false, 0);
>      return 0;
> }
>
> And some more details from bpftool on the program I try to attach to:
>
> # bpftool prog show id 165
> 165: ext  name xdp_test_I  tag b5a46c6e9935298c  gpl
>      loaded_at 2020-04-28T13:41:00+0000  uid 0
>      xlated 136B  jited 108B  memlock 4096B
>      btf_id 432
>
> # bpftool prog dump xlated id 165
> int xdp_test_I(struct xdp_md * ctx):
> ; int xdp_test_I(struct xdp_md *ctx)
>     0: (b7) r2 = 10
> ; bpf_debug("PASS[1]: prog %u\n", ctx->ingress_ifindex);
>     1: (6b) *(u16 *)(r10 -8) = r2
>     2: (18) r2 = 0x752520676f727020
>     4: (7b) *(u64 *)(r10 -16) = r2
>     5: (18) r2 = 0x3a5d315b53534150
>     7: (7b) *(u64 *)(r10 -24) = r2
>     8: (79) r3 = *(u64 *)(r1 +40)
>     9: (79) r3 = *(u64 *)(r3 +0)
>    10: (61) r3 = *(u32 *)(r3 +256)
>    11: (bf) r1 = r10
> ;
>    12: (07) r1 += -24
> ; bpf_debug("PASS[1]: prog %u\n", ctx->ingress_ifindex);
>    13: (b7) r2 = 18
>    14: (85) call bpf_trace_printk#-54752
> ; return XDP_PASS;
>    15: (b7) r0 = 2
>    16: (95) exit
>
> Thanks in advance...
>
> //Eelco
>



[Index of Archives]     [Linux Networking Development]     [Fedora Linux Users]     [Linux SCTP]     [DCCP]     [Gimp]     [Yosemite Campsites]

  Powered by Linux