Re: eBPF verifier does not load libxdp dispatcher eBPF program

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

 



On 23.01.2023 12:35:41, Chris Ward wrote:
> The 5.15.0 kernel (built by 'git checkout v5.15' from the kernel.org
> torvalds tree) fails in the same way that the 6.2.0-rc5+ kernel fails.
> So it seems that something Canonical did for the Ubuntu 20.04 kernel
> causes eBPF to work correctly.
> 
> On Mon, 23 Jan 2023 at 11:06, Chris Ward <tjcw01@xxxxxxxxx> wrote:
> >
> > I am trying to use the 'bleeding edge' kernel to determine whether a
> > problem I see has already been fixed, but with this kernel the eBPF
> > verifier will not load the dispatcher program that is contained within
> > libxdp. I am testing kernel commit hash 2475bf0 which fails, and the
> > kernel in Ubuntu 22.04 (5.15.0-58-generic) works properly. I am
> > running the test case from
> > https://github.com/tjcw/bpf-examples/tree/tjcw-explore-sameeth ; to
> > build it go to the AF_XDP-filter directory and type 'make', and to run
> > it go to the AF_XDP-filter/runscripts/iperf3-namespace directory and
> > type 'sudo FILTER=af_xdp_kern PORT=50000 ./run.sh' .
> > The lines from the run output indicating the failure are
> > libbpf: prog 'xdp_dispatcher': BPF program load failed: Invalid argument
> > libbpf: prog 'xdp_dispatcher': -- BEGIN PROG LOAD LOG --
> > Func#11 is safe for any args that match its prototype
> > btf_vmlinux is malformed
> > reg type unsupported for arg#0 function xdp_dispatcher#29
> > 0: R1=ctx(off=0,imm=0) R10=fp0
> > ; int xdp_dispatcher(struct xdp_md *ctx)
> > 0: (bf) r6 = r1                       ; R1=ctx(off=0,imm=0)
> > R6_w=ctx(off=0,imm=0)
> > 1: (b7) r0 = 2                        ; R0_w=2
> > ; __u8 num_progs_enabled = conf.num_progs_enabled;
> > 2: (18) r8 = 0xffffb2f6c06d8000       ; R8_w=map_value(off=0,ks=4,vs=84,imm=0)
> > 4: (71) r7 = *(u8 *)(r8 +0)           ; R7=1
> > R8=map_value(off=0,ks=4,vs=84,imm=0)
> > ; if (num_progs_enabled < 1)
> > 5: (15) if r7 == 0x0 goto pc+141      ; R7=1
> > ; ret = prog0(ctx);
> > 6: (bf) r1 = r6                       ; R1_w=ctx(off=0,imm=0)
> > R6=ctx(off=0,imm=0)
> > 7: (85) call pc+140
> > btf_vmlinux is malformed
> > R1 type=ctx expected=fp
> > Caller passes invalid args into func#1
> > processed 84 insns (limit 1000000) max_states_per_insn 0 total_states
> > 9 peak_states 9 mark_read 1
> > -- END PROG LOAD LOG --
> > libbpf: prog 'xdp_dispatcher': failed to load: -22
> > libbpf: failed to load object 'xdp-dispatcher.o'
> > libxdp: Failed to load dispatcher: Invalid argument
> > libxdp: Falling back to loading single prog without dispatcher
> >
> > Can this regression be fixed before kernel 6.2 ships ?

I'm seeing the same failure on 32 bit ARM on v6.13.

Have you found a solution?

regards,
Marc

-- 
Pengutronix e.K.                 | Marc Kleine-Budde          |
Embedded Linux                   | https://www.pengutronix.de |
Vertretung Nürnberg              | Phone: +49-5121-206917-129 |
Amtsgericht Hildesheim, HRA 2686 | Fax:   +49-5121-206917-9   |

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux