Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

trace_dns: switch from perf ringbuf to bpf ringbuf #2579

Merged
merged 1 commit into from
Mar 20, 2024
Merged

Conversation

alban
Copy link
Member

@alban alban commented Mar 5, 2024

trace_dns: switch from perf ringbuf to bpf ringbuf

This requires to replace BPF_LD_[ABS|IND] instructions by explicit bpf helper bpf_skb_load_bytes().

Since bpf_skb_load_bytes() does not do automatic endianness conversion, it needs to be done explicitely as appropriate.

Previous comment explaining the issue:

	/*
	 * We cannot use the reserve/commit API due to using load_*() with skb:
	 * > Disallow usage of BPF_LD_[ABS|IND] with reference tracking, as
	 * > gen_ld_abs() may terminate the program at runtime, leading to
	 * > reference leak.
	 * See:
	 * https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=fd978bf7fd31
	 */

How to use

As before

Testing done

Compile:

clang-format -i include/gadget/sockets-map.h gadgets/trace_dns/program.bpf.c
docker build -f Dockerfiles/ebpf-builder.Dockerfile -t ghcr.io/inspektor-gadget/ebpf-builder:alban_dns_ringbuf .
sudo -E ./ig image build -t trace_dns:alban_dns_ringbuf --builder-image=ghcr.io/inspektor-gadget/ebpf-builder:alban_dns_ringbuf gadgets/trace_dns/

Test:

sudo -E ./ig run trace_dns:alban_dns_ringbuf -v

Check that it uses the ringbuf map:

sudo bpftool map show name events
7676: ringbuf  name events  flags 0x0

TODO, in a future PR

  • Update builtins gadgets too.

@alban alban changed the title [WIP] trace_dns: switch from perf ringbuf to bpf ringbuf trace_dns: switch from perf ringbuf to bpf ringbuf Mar 7, 2024
@alban alban marked this pull request as ready for review March 7, 2024 10:34
@alban
Copy link
Member Author

alban commented Mar 7, 2024

I restricted the changes in this PR to only image-based gadgets (and the socket enricher because it is a dependency). The builtins gadgets can be converted later. In this way, the conflict with #2574 will be easier to manager.

This should be ready for reviews.

@alban alban force-pushed the alban_dns_ringbuf branch 2 times, most recently from 8155efb to b59645a Compare March 13, 2024 12:57
@alban
Copy link
Member Author

alban commented Mar 13, 2024

Rebased to fix conflicts with #2574

@alban
Copy link
Member Author

alban commented Mar 14, 2024

Rebased, and removed unused variable.

Even if the dns might change in the future (switch to a userspace parsing with wasm?), it is still worth merging this change: thanks to the changes in the socket enricher, it enables network gadgets to use the ringbuf map.

Copy link
Member

@eiffel-fl eiffel-fl left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi!

Thank you! This is a really cool to have found a solution to use the buffer.h API.
I have some comments nonetheless.

Best regards.

gadgets/trace_dns/program.bpf.c Outdated Show resolved Hide resolved
gadgets/trace_dns/program.bpf.c Outdated Show resolved Hide resolved
gadgets/trace_dns/program.bpf.c Outdated Show resolved Hide resolved
Copy link
Member

@mauriciovasquezbernal mauriciovasquezbernal left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some initial comments.

include/gadget/sockets-map.h Outdated Show resolved Hide resolved
include/gadget/sockets-map.h Outdated Show resolved Hide resolved
include/gadget/sockets-map.h Outdated Show resolved Hide resolved
gadgets/trace_dns/program.bpf.c Outdated Show resolved Hide resolved
gadgets/trace_dns/program.bpf.c Outdated Show resolved Hide resolved
gadgets/trace_dns/program.bpf.c Show resolved Hide resolved
gadgets/trace_dns/program.bpf.c Outdated Show resolved Hide resolved
include/gadget/sockets-map.h Show resolved Hide resolved

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm wondering if we should store the data in the sockets map in network byte order (at least for the key), so we don't need to perform a lot of useless network to host endianess conversions. (This can be handled in another PR, but this fact is more obvious now that the conversions need to be done manually).

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes. Note that it would break the ABI between image-based gadgets compiled for a previous version of IG when in use in a new version of IG...

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes. Note that it would break the ABI between image-based gadgets compiled for a previous version of IG when in use in a new version of IG...

For now, this sounds OK.
But if we do such breaking changes in the future, we should definitely advertise about them as this is the kind of really nasty behavior to debug/understand.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think ABI is very important now. That's why image-based gadgets is marked as experimental, to allow us to perform these kind of changes until the whole thing is more stable.

@alban alban force-pushed the alban_dns_ringbuf branch 2 times, most recently from bcd9f77 to f589f46 Compare March 19, 2024 09:22
Copy link
Member

@eiffel-fl eiffel-fl left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi!

I tested it and it works fine:

$ sudo -E ./ig run trace_dns                                    alban_dns_ringbuf % u=
INFO[0000] Experimental features enabled                
RUNTIME.CONTAINERNA… SRC                      DST                      PID        TASK       NAME                … PKT_… RCODE QTYPE     
test-trace-dns       10.10.0.3:59587          8.8.4.4:53               113459     isc-net-0… inspektor-gadget… 0 4     0     1         
test-trace-dns       8.8.4.4:53               10.10.0.3:59587          113459     isc-net-0… inspektor-gadget… 1 0     0     1         
^Z
$ sudo bpftool map show name events                             alban_dns_ringbuf % u=
274: ringbuf  name events  flags 0x0
        key 0B  value 0B  max_entries 262144  memlock 275800B

Please, see my comment regarding to breaking changes.
With regard to the built-in flavor, I will not enforce having it ported here, we should rather put all our efforts on image based gadgets to deprecate as soon as possible the built-in ones.

Best regards.

Copy link
Member

@mauriciovasquezbernal mauriciovasquezbernal left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Which kernel are you testing it on? It fails for me on 5.15:

        ; int ig_trace_dns(struct __sk_buff *skb)
        0: (bf) r6 = r1
        1: (bf) r3 = r10
        ;
        2: (07) r3 += -28
        ; err = bpf_skb_load_bytes(skb, offsetof(struct ethhdr, h_proto),
        3: (b7) r2 = 12
        4: (b7) r4 = 2
        5: (85) call bpf_skb_load_bytes#26
        last_idx 5 first_idx 0
        regs=10 stack=0 before 4: (b7) r4 = 2
        6: (b7) r1 = 0
        ; if (err < 0 || h_proto != bpf_htons(ETH_P_IP))
        7: (6d) if r1 s> r0 goto pc+291
         R0_w=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv0 R6_w=ctx(id=0,off=0,imm=0) R10=fp0 fp-32=??mm????
        8: (69) r1 = *(u16 *)(r10 -28)
        9: (55) if r1 != 0x8 goto pc+289
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1=inv8 R6=ctx(id=0,off=0,imm=0) R10=fp0 fp-32=??mm????
        10: (bf) r3 = r10
        ;
        11: (07) r3 += -29
        ; err = bpf_skb_load_bytes(skb,
        12: (bf) r1 = r6
        13: (b7) r2 = 23
        14: (b7) r4 = 1
        15: (85) call bpf_skb_load_bytes#26
        last_idx 15 first_idx 9
        regs=10 stack=0 before 14: (b7) r4 = 1
        16: (b7) r1 = 0
        ; if (err < 0 || proto != IPPROTO_UDP)
        17: (6d) if r1 s> r0 goto pc+281
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1=inv0 R6=ctx(id=0,off=0,imm=0) R10=fp0 fp-32=??mmm???
        18: (71) r1 = *(u8 *)(r10 -29)
        19: (55) if r1 != 0x11 goto pc+279
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv17 R6=ctx(id=0,off=0,imm=0) R10=fp0 fp-32=??mmm???
        20: (bf) r3 = r10
        ; err = bpf_skb_load_bytes(skb, DNS_OFF + offsetof(struct dnshdr, flags),
        21: (07) r3 += -32
        22: (bf) r1 = r6
        23: (b7) r2 = 44
        24: (b7) r4 = 2
        25: (85) call bpf_skb_load_bytes#26
        last_idx 25 first_idx 17
        regs=10 stack=0 before 24: (b7) r4 = 2
        26: (b7) r7 = 0
        ; if (err < 0)
        27: (6d) if r7 s> r0 goto pc+271
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R6=ctx(id=0,off=0,imm=0) R7_w=inv0 R10=fp0 fp-32=??mmm?mm
        ; flags.flags = bpf_ntohs(flags.flags);
        28: (69) r1 = *(u16 *)(r10 -32)
        29: (dc) r1 = be16 r1
        ; flags.flags = bpf_ntohs(flags.flags);
        30: (6b) *(u16 *)(r10 -32) = r1
        31: (bf) r3 = r10
        ; flags.flags = bpf_ntohs(flags.flags);
        32: (07) r3 += -34
        ; err = bpf_skb_load_bytes(skb,
        33: (bf) r1 = r6
        34: (b7) r2 = 46
        35: (b7) r4 = 2
        36: (85) call bpf_skb_load_bytes#26
        last_idx 36 first_idx 26
        regs=10 stack=0 before 35: (b7) r4 = 2
        ; if (err < 0)
        37: (6d) if r7 s> r0 goto pc+261
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R10=fp0 fp-32=??mmm?mm fp-40=mm??????
        ; qdcount = bpf_ntohs(qdcount);
        38: (69) r1 = *(u16 *)(r10 -34)
        39: (bf) r2 = r1
        40: (dc) r2 = be16 r2
        ; qdcount = bpf_ntohs(qdcount);
        41: (6b) *(u16 *)(r10 -34) = r2
        ; if (qdcount != 1)
        42: (55) if r1 != 0x100 goto pc+256
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv256 R2_w=inv(id=0) R6=ctx(id=0,off=0,imm=0) R7=inv0 R10=fp0 fp-32=??mmm?mm fp-40=mm??????
        43: (bf) r3 = r10
        ;
        44: (07) r3 += -36
        ; err = bpf_skb_load_bytes(skb,
        45: (bf) r1 = r6
        46: (b7) r2 = 48
        47: (b7) r4 = 2
        48: (85) call bpf_skb_load_bytes#26
        last_idx 48 first_idx 37
        regs=10 stack=0 before 47: (b7) r4 = 2
        49: (b7) r7 = 0
        ; if (err < 0)
        50: (6d) if r7 s> r0 goto pc+248
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R6=ctx(id=0,off=0,imm=0) R7_w=inv0 R10=fp0 fp-32=??mmm?mm fp-40=mmmm????
        ; ancount = bpf_ntohs(ancount);
        51: (69) r1 = *(u16 *)(r10 -36)
        52: (dc) r1 = be16 r1
        ; ancount = bpf_ntohs(ancount);
        53: (6b) *(u16 *)(r10 -36) = r1
        54: (bf) r3 = r10
        ; ancount = bpf_ntohs(ancount);
        55: (07) r3 += -38
        ; err = bpf_skb_load_bytes(skb,
        56: (bf) r1 = r6
        57: (b7) r2 = 50
        58: (b7) r4 = 2
        59: (85) call bpf_skb_load_bytes#26
        last_idx 59 first_idx 49
        regs=10 stack=0 before 58: (b7) r4 = 2
        ; if (err < 0)
        60: (6d) if r7 s> r0 goto pc+238
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R10=fp0 fp-32=??mmm?mm fp-40=mmmmmm??
        ; nscount = bpf_ntohs(nscount);
        61: (69) r1 = *(u16 *)(r10 -38)
        62: (dc) r1 = be16 r1
        ; nscount = bpf_ntohs(nscount);
        63: (6b) *(u16 *)(r10 -38) = r1
        ; if (flags.qr == 0 && ancount + nscount != 0)
        64: (69) r2 = *(u16 *)(r10 -32)
        65: (67) r2 <<= 48
        66: (c7) r2 s>>= 48
        67: (b7) r7 = 0
        ; if (flags.qr == 0 && ancount + nscount != 0)
        68: (6d) if r7 s> r2 goto pc+3
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=0) R2_w=inv(id=0,umax_value=32767,var_off=(0x0; 0x7fff)) R6=ctx(id=0,off=0,imm=0) R7_w=inv0 R10=fp0 fp-32=??mmm?mm fp-40=mmmmmm??
        ; if (flags.qr == 0 && ancount + nscount != 0)
        69: (87) r1 = -r1
        ; if (flags.qr == 0 && ancount + nscount != 0)
        70: (69) r2 = *(u16 *)(r10 -36)
        ; if (flags.qr == 0 && ancount + nscount != 0)
        71: (5d) if r2 != r1 goto pc+227
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1=inv(id=0,umax_value=65535,var_off=(0x0; 0xffff)) R2=inv(id=0,umax_value=65535,var_off=(0x0; 0xffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R10=fp0 fp-32=??mmm?mm fp-40=mmmmmm??
        72: (b7) r1 = 0
        73: (b7) r9 = 0
        74: (05) goto pc+24
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
        last_idx 102 first_idx 71
        regs=4 stack=0 before 101: (77) r2 >>= 32
        regs=4 stack=0 before 100: (67) r2 <<= 32
        regs=4 stack=0 before 99: (bf) r2 = r1
        regs=2 stack=0 before 74: (05) goto pc+24
        regs=2 stack=0 before 73: (b7) r9 = 0
        regs=2 stack=0 before 72: (b7) r1 = 0
        ; err = bpf_skb_load_bytes(
        75: (bf) r2 = r9
        76: (07) r2 += 54
        77: (bf) r3 = r10
        ;
        78: (07) r3 += -24
        ; err = bpf_skb_load_bytes(
        79: (bf) r1 = r6
        80: (b7) r4 = 1
        81: (85) call bpf_skb_load_bytes#26
        last_idx 81 first_idx 75
        regs=10 stack=0 before 80: (b7) r4 = 1
        82: (bf) r8 = r9
        83: (6d) if r7 s> r0 goto pc+9
         R0_w=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv0 R9=inv0 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        84: (71) r1 = *(u8 *)(r10 -24)
        85: (bf) r8 = r9
        86: (15) if r1 == 0x0 goto pc+6
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1=inv(id=0,umax_value=255,var_off=(0x0; 0xff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8=inv0 R9=inv0 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 86
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
        regs=200 stack=0 before 86: (15) if r1 == 0x0 goto pc+6
         R0_w=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,umax_value=255,var_off=(0x0; 0xff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv0 R9_r=invP0 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent didn't have regs=200 stack=0 marks
        last_idx 85 first_idx 75
        regs=200 stack=0 before 85: (bf) r8 = r9
        regs=200 stack=0 before 84: (71) r1 = *(u8 *)(r10 -24)
        regs=200 stack=0 before 83: (6d) if r7 s> r0 goto pc+9
        regs=200 stack=0 before 82: (bf) r8 = r9
        regs=200 stack=0 before 81: (85) call bpf_skb_load_bytes#26
        regs=200 stack=0 before 80: (b7) r4 = 1
        regs=200 stack=0 before 79: (bf) r1 = r6
        regs=200 stack=0 before 78: (07) r3 += -24
        regs=200 stack=0 before 77: (bf) r3 = r10
        regs=200 stack=0 before 76: (07) r2 += 54
        regs=200 stack=0 before 75: (bf) r2 = r9
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv0 R2_w=inv0 R6_r=ctx(id=0,off=0,imm=0) R7_r=inv0 R9_rw=invP0 R10=fp0 fp-32=??mmm?mm fp-40=mmmmmm??
        parent didn't have regs=200 stack=0 marks
        last_idx 102 first_idx 71
        regs=200 stack=0 before 102: (15) if r2 == 0x0 goto pc-28
        regs=200 stack=0 before 101: (77) r2 >>= 32
        regs=200 stack=0 before 100: (67) r2 <<= 32
        regs=200 stack=0 before 99: (bf) r2 = r1
        regs=200 stack=0 before 74: (05) goto pc+24
        regs=200 stack=0 before 73: (b7) r9 = 0
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1=inv(id=5,umax_value=255,var_off=(0x0; 0xff)) R2=inv(id=0,umax_value=255,var_off=(0x0; 0xff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8=inv255 R9=inv1 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 92
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=0,smin_value=-1,smax_value=254) R2_rw=invP2 R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv2 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent didn't have regs=4 stack=0 marks
        last_idx 91 first_idx 102
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
        regs=200 stack=0 before 104: (05) goto pc-18
        regs=200 stack=0 before 103: (07) r1 += -1
        regs=200 stack=0 before 102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_r=inv(id=5,umax_value=255,var_off=(0x0; 0xff)) R2_rw=inv(id=0,umax_value=255,var_off=(0x0; 0xff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP1 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent didn't have regs=200 stack=0 marks
        last_idx 101 first_idx 86
        regs=200 stack=0 before 101: (77) r2 >>= 32
        regs=200 stack=0 before 100: (67) r2 <<= 32
        regs=200 stack=0 before 99: (bf) r2 = r1
        regs=200 stack=0 before 92: (55) if r2 != 0xff goto pc+6
        regs=200 stack=0 before 91: (77) r2 >>= 32
        regs=200 stack=0 before 90: (67) r2 <<= 32
        regs=200 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
        regs=200 stack=0 before 86: (15) if r1 == 0x0 goto pc+6
         R0_w=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,umax_value=255,var_off=(0x0; 0xff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv0 R9_r=invP0 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1=inv(id=7,smin_value=-1,smax_value=254) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8=inv255 R9=inv2 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 92
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-1,smax_value=254) R2_rw=invP2 R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=inv2 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=4 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1=inv(id=9,smin_value=-2,smax_value=253) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8=inv255 R9=inv3 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 99
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
        regs=200 stack=0 before 104: (05) goto pc-18
        regs=200 stack=0 before 103: (07) r1 += -1
        regs=200 stack=0 before 102: (15) if r2 == 0x0 goto pc-28
        regs=200 stack=0 before 101: (77) r2 >>= 32
        regs=200 stack=0 before 100: (67) r2 <<= 32
        regs=200 stack=0 before 99: (bf) r2 = r1
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-2,smax_value=253) R2_w=inv3 R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP3 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent didn't have regs=200 stack=0 marks
        last_idx 92 first_idx 92
        regs=200 stack=0 before 92: (55) if r2 != 0xff goto pc+6
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-1,smax_value=254) R2_rw=invP2 R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP2 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent didn't have regs=200 stack=0 marks
        last_idx 91 first_idx 102
        regs=200 stack=0 before 91: (77) r2 >>= 32
        regs=200 stack=0 before 90: (67) r2 <<= 32
        regs=200 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
        regs=200 stack=0 before 104: (05) goto pc-18
        regs=200 stack=0 before 103: (07) r1 += -1
        regs=200 stack=0 before 102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_r=inv(id=5,umax_value=255,var_off=(0x0; 0xff)) R2_rw=inv(id=0,umax_value=255,var_off=(0x0; 0xff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP1 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=11,smin_value=-3,smax_value=252) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv4 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 87
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=0,smin_value=-4,smax_value=251) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP4 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent didn't have regs=200 stack=0 marks
        last_idx 104 first_idx 99
        regs=200 stack=0 before 104: (05) goto pc-18
        regs=200 stack=0 before 103: (07) r1 += -1
        regs=200 stack=0 before 102: (15) if r2 == 0x0 goto pc-28
        regs=200 stack=0 before 101: (77) r2 >>= 32
        regs=200 stack=0 before 100: (67) r2 <<= 32
        regs=200 stack=0 before 99: (bf) r2 = r1
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-2,smax_value=253) R2_w=inv3 R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP3 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1=inv(id=13,smin_value=-4,smax_value=251) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv5 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 87
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-4,smax_value=251) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP4 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=15,smin_value=-5,smax_value=250) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv6 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 87
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-4,smax_value=251) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP4 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=17,smin_value=-6,smax_value=249) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv7 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 87
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-4,smax_value=251) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP4 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=19,smin_value=-7,smax_value=248) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv8 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 87
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-4,smax_value=251) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP4 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=21,smin_value=-8,smax_value=247) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv9 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 87
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-4,smax_value=251) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP4 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=23,smin_value=-9,smax_value=246) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv10 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 87
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-4,smax_value=251) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP4 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=25,smin_value=-10,smax_value=245) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv11 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 87
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=0,smin_value=-11,smax_value=244) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP11 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent didn't have regs=200 stack=0 marks
        last_idx 104 first_idx 87
        regs=200 stack=0 before 104: (05) goto pc-18
        regs=200 stack=0 before 103: (07) r1 += -1
        regs=200 stack=0 before 102: (15) if r2 == 0x0 goto pc-28
        regs=200 stack=0 before 101: (77) r2 >>= 32
        regs=200 stack=0 before 100: (67) r2 <<= 32
        regs=200 stack=0 before 99: (bf) r2 = r1
        regs=200 stack=0 before 92: (55) if r2 != 0xff goto pc+6
        regs=200 stack=0 before 91: (77) r2 >>= 32
        regs=200 stack=0 before 90: (67) r2 <<= 32
        regs=200 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-4,smax_value=251) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP4 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1=inv(id=27,smin_value=-11,smax_value=244) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv12 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 87
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-11,smax_value=244) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP11 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=29,smin_value=-12,smax_value=243) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv13 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 87
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-11,smax_value=244) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP11 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=31,smin_value=-13,smax_value=242) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv14 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 87
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-11,smax_value=244) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP11 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=33,smin_value=-14,smax_value=241) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv15 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 87
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-11,smax_value=244) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP11 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=35,smin_value=-15,smax_value=240) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv16 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 87
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-11,smax_value=244) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP11 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=37,smin_value=-16,smax_value=239) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv17 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 87
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-11,smax_value=244) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP11 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=39,smin_value=-17,smax_value=238) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv18 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 87
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=0,smin_value=-18,smax_value=237) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP18 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent didn't have regs=200 stack=0 marks
        last_idx 104 first_idx 87
        regs=200 stack=0 before 104: (05) goto pc-18
        regs=200 stack=0 before 103: (07) r1 += -1
        regs=200 stack=0 before 102: (15) if r2 == 0x0 goto pc-28
        regs=200 stack=0 before 101: (77) r2 >>= 32
        regs=200 stack=0 before 100: (67) r2 <<= 32
        regs=200 stack=0 before 99: (bf) r2 = r1
        regs=200 stack=0 before 92: (55) if r2 != 0xff goto pc+6
        regs=200 stack=0 before 91: (77) r2 >>= 32
        regs=200 stack=0 before 90: (67) r2 <<= 32
        regs=200 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-11,smax_value=244) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP11 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1=inv(id=41,smin_value=-18,smax_value=237) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv19 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 87
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-18,smax_value=237) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP18 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=43,smin_value=-19,smax_value=236) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv20 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 87
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-18,smax_value=237) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP18 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=45,smin_value=-20,smax_value=235) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv21 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 87
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-18,smax_value=237) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP18 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=47,smin_value=-21,smax_value=234) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv22 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 87
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-18,smax_value=237) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP18 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=49,smin_value=-22,smax_value=233) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv23 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 87
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-18,smax_value=237) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP18 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=51,smin_value=-23,smax_value=232) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv24 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 87
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-18,smax_value=237) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP18 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=53,smin_value=-24,smax_value=231) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv25 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 87
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=0,smin_value=-25,smax_value=230) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP25 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent didn't have regs=200 stack=0 marks
        last_idx 104 first_idx 87
        regs=200 stack=0 before 104: (05) goto pc-18
        regs=200 stack=0 before 103: (07) r1 += -1
        regs=200 stack=0 before 102: (15) if r2 == 0x0 goto pc-28
        regs=200 stack=0 before 101: (77) r2 >>= 32
        regs=200 stack=0 before 100: (67) r2 <<= 32
        regs=200 stack=0 before 99: (bf) r2 = r1
        regs=200 stack=0 before 92: (55) if r2 != 0xff goto pc+6
        regs=200 stack=0 before 91: (77) r2 >>= 32
        regs=200 stack=0 before 90: (67) r2 <<= 32
        regs=200 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-18,smax_value=237) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP18 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1=inv(id=55,smin_value=-25,smax_value=230) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv26 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 87
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-25,smax_value=230) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP25 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=57,smin_value=-26,smax_value=229) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv27 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 87
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-25,smax_value=230) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP25 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=59,smin_value=-27,smax_value=228) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv28 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 87
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-25,smax_value=230) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP25 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=61,smin_value=-28,smax_value=227) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv29 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 87
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-25,smax_value=230) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP25 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=63,smin_value=-29,smax_value=226) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv30 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 87
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-25,smax_value=230) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP25 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=65,smin_value=-30,smax_value=225) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv31 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 87
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-25,smax_value=230) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP25 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=67,smin_value=-31,smax_value=224) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv32 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 87
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=0,smin_value=-32,smax_value=223) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP32 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent didn't have regs=200 stack=0 marks
        last_idx 104 first_idx 87
        regs=200 stack=0 before 104: (05) goto pc-18
        regs=200 stack=0 before 103: (07) r1 += -1
        regs=200 stack=0 before 102: (15) if r2 == 0x0 goto pc-28
        regs=200 stack=0 before 101: (77) r2 >>= 32
        regs=200 stack=0 before 100: (67) r2 <<= 32
        regs=200 stack=0 before 99: (bf) r2 = r1
        regs=200 stack=0 before 92: (55) if r2 != 0xff goto pc+6
        regs=200 stack=0 before 91: (77) r2 >>= 32
        regs=200 stack=0 before 90: (67) r2 <<= 32
        regs=200 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-25,smax_value=230) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP25 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1=inv(id=69,smin_value=-32,smax_value=223) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv33 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 87
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-32,smax_value=223) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP32 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=71,smin_value=-33,smax_value=222) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv34 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 87
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-32,smax_value=223) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP32 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=73,smin_value=-34,smax_value=221) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv35 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 87
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-32,smax_value=223) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP32 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=75,smin_value=-35,smax_value=220) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv36 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 87
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-32,smax_value=223) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP32 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=77,smin_value=-36,smax_value=219) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv37 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 87
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-32,smax_value=223) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP32 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=79,smin_value=-37,smax_value=218) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv38 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 87
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-32,smax_value=223) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP32 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=81,smin_value=-38,smax_value=217) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv39 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err = bpf_skb_load_bytes(
        87: (b7) r8 = 255
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        88: (07) r9 += 1
        89: (bf) r2 = r9
        90: (67) r2 <<= 32
        91: (77) r2 >>= 32
        ; for (i = 0; i < MAX_DNS_NAME; i++) {
        92: (55) if r2 != 0xff goto pc+6
        last_idx 92 first_idx 87
        regs=4 stack=0 before 91: (77) r2 >>= 32
        regs=4 stack=0 before 90: (67) r2 <<= 32
        regs=4 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_w=inv(id=0,smin_value=-39,smax_value=216) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP39 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent didn't have regs=200 stack=0 marks
        last_idx 104 first_idx 87
        regs=200 stack=0 before 104: (05) goto pc-18
        regs=200 stack=0 before 103: (07) r1 += -1
        regs=200 stack=0 before 102: (15) if r2 == 0x0 goto pc-28
        regs=200 stack=0 before 101: (77) r2 >>= 32
        regs=200 stack=0 before 100: (67) r2 <<= 32
        regs=200 stack=0 before 99: (bf) r2 = r1
        regs=200 stack=0 before 92: (55) if r2 != 0xff goto pc+6
        regs=200 stack=0 before 91: (77) r2 >>= 32
        regs=200 stack=0 before 90: (67) r2 <<= 32
        regs=200 stack=0 before 89: (bf) r2 = r9
        regs=200 stack=0 before 88: (07) r9 += 1
        regs=200 stack=0 before 87: (b7) r8 = 255
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1_rw=inv(id=0,smin_value=-32,smax_value=223) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_rw=invP32 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        parent already had regs=200 stack=0 marks
        ; if (skip != 0) {
        99: (bf) r2 = r1
        100: (67) r2 <<= 32
        101: (77) r2 >>= 32
        ; if (skip != 0) {
        102: (15) if r2 == 0x0 goto pc-28
         R0=inv(id=0,umax_value=9223372036854775807,var_off=(0x0; 0x7fffffffffffffff)) R1=inv(id=83,smin_value=-39,smax_value=216) R2_w=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R6=ctx(id=0,off=0,imm=0) R7=inv0 R8_w=inv255 R9_w=inv40 R10=fp0 fp-24=???????m fp-32=??mmm?mm fp-40=mmmmmm??
        ; skip--;
        103: (07) r1 += -1
        104: (05) goto pc-18
        ; err =
        (truncated)

Even if this log doesn't seem to be useful at all.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think ABI is very important now. That's why image-based gadgets is marked as experimental, to allow us to perform these kind of changes until the whole thing is more stable.

@eiffel-fl
Copy link
Member

Which kernel are you testing it on? It fails for me on 5.15:

$ uname -a
Linux pwmachine 6.5.0-25-generic #25~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Tue Feb 20 16:09:15 UTC 2 x86_64 x86_64 x86_64 GNU/Linux

You can try to reduce the MAX_DNS_NAME to see the interesting part of the log.

@alban
Copy link
Member Author

alban commented Mar 19, 2024

I use 6.6.13-100.fc38.x86_64

@mauriciovasquezbernal
Copy link
Member

I can confirm it doesn't work for me on 5.15.0-100-generic. Full verifier log -> https://gist.github.com/mauriciovasquezbernal/2af889da4ee1d098c96af8cbefc96770

@alban
Copy link
Member Author

alban commented Mar 20, 2024

The code that causes problem to the verifier:

bpf_map_update_elem(&query_map, &query_key,
		    &event->timestamp, BPF_NOEXIST);

The error:

812: (85) call bpf_map_update_elem#2
R3 type=mem expected=fp, pkt, pkt_meta, map_key, map_value

It complains that &event->timestamp is a pointer to a buffer allocated with bpf_ringbuf_reserve.

type=mem refers to a buffer allocated with bpf_ringbuf_reserve.

It is a kernel bug that was fixed in Linux 5.17:
torvalds/linux@a672b2e

See also patch "bpf: Rename MEM_ALLOC to MEM_RINGBUF" introduced in v6.2.

I'll copy event->timestamp on the stack before using bpf_map_update_elem. Maybe that will help.

This requires to replace BPF_LD_[ABS|IND] instructions by explicit bpf
helper bpf_skb_load_bytes().

Since bpf_skb_load_bytes() does not do automatic endianness conversion,
it needs to be done explicitely as appropriate.

Signed-off-by: Alban Crequy <albancrequy@linux.microsoft.com>
Copy link
Member

@mauriciovasquezbernal mauriciovasquezbernal left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It works now for me. Thanks for investigating and fixing it.

@alban alban merged commit 54fd144 into main Mar 20, 2024
59 checks passed
@alban alban deleted the alban_dns_ringbuf branch March 20, 2024 15:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants