Open mestery opened 2 years ago
BTW: The new jammy64 code is in the jammy64 branch.
@bersoare Have you tried using goebpf with Ubuntu Jammy yet? Have you seen a verifier error like above?
BTW: This is with the following kernel version:
vagrant@xdp-skeleton:/git/src$ uname -a
Linux xdp-skeleton 5.15.0-37-generic #39-Ubuntu SMP Wed Jun 1 19:16:45 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
vagrant@xdp-skeleton:/git/src$
hey @mestery ,
i have tried the main branch, it seems to work just fine (even with the modified xdp code). when i changed to jammy, however, i m having some cross compile issues...btw, the kernel i have at hand is 5.4, so maybe it wont be good enough to try reproducing this.
are you able to load the ebpf prog from the container itself? i think you should be able to do so as long as the container is in privileged mode. also, in the container, you can try to peek at the compiled elf with llvm-objdump-$version -S xdp.elf
, it should show you the code path along with the instruction #, it can help spotting where the faulty line is.
example:
00000000000007c8 xdp_skeleton_2:
; {
249: bf 16 00 00 00 00 00 00 r6 = r1
250: b7 01 00 00 6e 0a 00 00 r1 = 2670
; bpf_printk("xdp_skeleton_2: Entering function\n");
251: 6b 1a f8 ff 00 00 00 00 *(u16 *)(r10 - 8) = r1
252: 18 01 00 00 20 66 75 6e 00 00 00 00 63 74 69 6f r1 = 8028075781168391712 ll
254: 7b 1a f0 ff 00 00 00 00 *(u64 *)(r10 - 16) = r1
255: 18 01 00 00 45 6e 74 65 00 00 00 00 72 69 6e 67 r1 = 7453010373394067013 ll
257: 7b 1a e8 ff 00 00 00 00 *(u64 *)(r10 - 24) = r1
258: 18 01 00 00 65 74 6f 6e 00 00 00 00 5f 32 3a 20 r1 = 2322223943318991973 ll
260: 7b 1a e0 ff 00 00 00 00 *(u64 *)(r10 - 32) = r1
261: 18 01 00 00 78 64 70 5f 00 00 00 00 73 6b 65 6c r1 = 7810767272010605688 ll
263: 7b 1a d8 ff 00 00 00 00 *(u64 *)(r10 - 40) = r1
264: b7 07 00 00 00 00 00 00 r7 = 0
265: 73 7a fa ff 00 00 00 00 *(u8 *)(r10 - 6) = r7
266: bf a1 00 00 00 00 00 00 r1 = r10
267: 07 01 00 00 d8 ff ff ff r1 += -40
268: b7 02 00 00 23 00 00 00 r2 = 35
269: 85 00 00 00 06 00 00 00 call 6
270: b7 01 00 00 02 00 00 00 r1 = 2
271: 63 1a d8 ff 00 00 00 00 *(u32 *)(r10 - 40) = r1
272: bf a2 00 00 00 00 00 00 r2 = r10
273: 07 02 00 00 d8 ff ff ff r2 += -40
; struct datarec *rec = bpf_map_lookup_elem(&stats_map, &action);
274: 18 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 r1 = 0 ll
276: 85 00 00 00 01 00 00 00 call 1
; if (!rec)
277: 15 00 0c 00 00 00 00 00 if r0 == 0 goto +12 <LBB2_2>
; rec->rx_packets++;
278: 79 01 00 00 00 00 00 00 r1 = *(u64 *)(r0 + 0)
279: 07 01 00 00 01 00 00 00 r1 += 1
280: 7b 10 00 00 00 00 00 00 *(u64 *)(r0 + 0) = r1
; rec->rx_bytes += (ctx->data_end - ctx->data);
281: 61 61 00 00 00 00 00 00 r1 = *(u32 *)(r6 + 0)
282: 61 62 04 00 00 00 00 00 r2 = *(u32 *)(r6 + 4)
283: 1f 12 00 00 00 00 00 00 r2 -= r1
284: 67 02 00 00 20 00 00 00 r2 <<= 32
285: 77 02 00 00 20 00 00 00 r2 >>= 32
286: 79 01 08 00 00 00 00 00 r1 = *(u64 *)(r0 + 8)
287: 0f 21 00 00 00 00 00 00 r1 += r2
288: 7b 10 08 00 00 00 00 00 *(u64 *)(r0 + 8) = r1
; return action;
289: 61 a7 d8 ff 00 00 00 00 r7 = *(u32 *)(r10 - 40)
as there were minor changes in the actual ebpf code, it sounds to me that it could be some linking issue with a newer kernel or even the distro.
also, the kernel subsystem misconfigured verifier
message is a little bit too generic, but most of the hits i could found were related to not being able to load the map (that is, bpf_map == NULL) https://github.com/torvalds/linux/blob/master/kernel/bpf/verifier.c
i'd start checking if all the maps (the prog arrays, i believe) are created just fine and show up in filesystem (if pinned) and in the kernel (with bpftool map
)
i'll try to find some time to solve the compile issues i found, and will let you know if i find something else
I'm trying to update the VM and docker containers to Ubuntu Jammy. This is working ok, and I can get things to compile, but when I try to load the XDP program, it fails and claims:
kernel subsystem misconfigured verifier
. The full error message is as follows:It's unclear to me if it's a problem with the Jammy 64 kernel, goebpf, or something else.