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

bpf: Test DEBUG configurations, fix a newly exposed verifier error #32170

Merged
merged 2 commits into from May 7, 2024

Conversation

gentoo-root
Copy link
Contributor

@gentoo-root gentoo-root commented Apr 24, 2024

Run the verifier tests on the debug configurations, because it may expose verifier errors.

Fix one error exposed with the new test that happens after the upgrade to LLVM 17.

Ref: #32169

Improve BPF complexity test coverage, fix a verifier error after LLVM upgrade.

@gentoo-root gentoo-root added the release-note/ci This PR makes changes to the CI. label Apr 24, 2024
@gentoo-root
Copy link
Contributor Author

/test

@gentoo-root
Copy link
Contributor Author

/test

@gentoo-root gentoo-root force-pushed the pr/max/complexity-with-debug branch 2 times, most recently from 3638663 to f5e8005 Compare May 3, 2024 22:02
@gentoo-root
Copy link
Contributor Author

/test

When DEBUG is enabled, Clang 17 optimizes the final part of
assign_socket_tcp and assign_socket_udp by keeping only one instance of
the code and jumping to it from two places. It means that the same
struct bpf_sock *sk pointer can point to the return value of either
skc_lookup_tcp or sk_lookup_udp. Unfortunately, for the verifier these
pointer types are different (PTR_TO_SOCK_COMMON and PTR_TO_SOCKET), and
it doesn't allow such pattern with the following error:

; sk = sk_lookup_udp(ctx, tuple, len, BPF_F_CURRENT_NETNS, 0);
829: (bf) r1 = r6
830: (b4) w3 = 36
831: (b7) r4 = -1
832: (b7) r5 = 0
833: (85) call bpf_sk_lookup_udp#85
last_idx 833 first_idx 827
regs=8 stack=0 before 832: (b7) r5 = 0
regs=8 stack=0 before 831: (b7) r4 = -1
regs=8 stack=0 before 830: (b4) w3 = 36
834: (b4) w7 = -178
; if (!sk)
835: (15) if r0 == 0x0 goto pc+38
 R0_w=sock(id=0,ref_obj_id=29,off=0,imm=0) R6=ctx(id=0,off=0,imm=0) R7_w=inv4294967118 R8=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R9=inv(id=22,umax_value=65535,var_off=(0x0; 0xffff)) R10=fp0 fp-16=???mmmmm fp-24=mmmmmmmm fp-32=mmmmmmmm fp-40=mmmmmmmm fp-48=mmmmmmmm fp-72=????mmmm fp-80=mmmmmmmm fp-88=mmmmmmmm refs=29
;
836: (61) r1 = *(u32 *)(r6 +16)
837: (63) *(u32 *)(r10 -104) = r1
838: (61) r7 = *(u32 *)(r0 +4)
same insn cannot be used with different pointers
processed 1261 insns (limit 1000000) max_states_per_insn 4 total_states 68 peak_states 67 mark_read 19

Work around it by adding READ_ONCE to the problematic dereference.
Although it doesn't guarantee that the same problem won't happen, it
helps in this case.

Ref: #32169
Fixes: 673d481 ("images: Update LLVM to 17.0.6")
Reported-by: Marco Hofstetter <marco.hofstetter@isovalent.com>
Signed-off-by: Maxim Mikityanskiy <maxim@isovalent.com>
Co-developed-by: Marco Hofstetter <marco.hofstetter@isovalent.com>
Signed-off-by: Marco Hofstetter <marco.hofstetter@isovalent.com>
Run the verifier tests on the debug configurations, because it may
expose verifier errors.

Ref: #32169
Signed-off-by: Maxim Mikityanskiy <maxim@isovalent.com>
@gentoo-root gentoo-root force-pushed the pr/max/complexity-with-debug branch from f5e8005 to b4bd642 Compare May 3, 2024 22:08
@gentoo-root
Copy link
Contributor Author

/test

@gentoo-root gentoo-root marked this pull request as ready for review May 6, 2024 08:15
@gentoo-root gentoo-root requested a review from a team as a code owner May 6, 2024 08:15
@gentoo-root gentoo-root changed the title bpf: complexity-tests: Test DEBUG and LB_DEBUG configurations bpf: Test DEBUG configurations, fix a newly exposed verifier error May 6, 2024
Copy link
Member

@mhofstetter mhofstetter left a comment

Choose a reason for hiding this comment

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

LGTM ✔️ Thanks a lot @gentoo-root!

I verified my (previously) failing setup locally - it works with this PR! 🎉

@maintainer-s-little-helper maintainer-s-little-helper bot added the ready-to-merge This PR has passed all tests and received consensus from code owners to merge. label May 7, 2024
@ldelossa ldelossa added this pull request to the merge queue May 7, 2024
Merged via the queue into main with commit 1d679b6 May 7, 2024
279 checks passed
@ldelossa ldelossa deleted the pr/max/complexity-with-debug branch May 7, 2024 20:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
ready-to-merge This PR has passed all tests and received consensus from code owners to merge. release-note/ci This PR makes changes to the CI.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants