Multiple verifier tests validate the exact list of JITed instructions. Even if the test offers some flexibility in its checks (eg: not enforcing the first instruction to be verified right at the beginning of jited code, but rather searching where the expected JIT instructions could be located), it is confused by the new KASAN instrumentation JITed in programs: this instrumentation can be inserted anywhere in-between searched instructions, leading to test failures despite the correct instructions being generated.
Prevent those failures by skipping tests involving JITed instructions checks when kernel is built with KASAN _and_ JIT is enabled, as those two conditions lead the JITed code to contains KASAN checks. Signed-off-by: Alexis Lothoré (eBPF Foundation) <[email protected]> --- tools/testing/selftests/bpf/test_loader.c | 5 +++++ tools/testing/selftests/bpf/unpriv_helpers.c | 5 +++++ tools/testing/selftests/bpf/unpriv_helpers.h | 1 + 3 files changed, 11 insertions(+) diff --git a/tools/testing/selftests/bpf/test_loader.c b/tools/testing/selftests/bpf/test_loader.c index c4c34cae6102..d2c0062ef31a 100644 --- a/tools/testing/selftests/bpf/test_loader.c +++ b/tools/testing/selftests/bpf/test_loader.c @@ -1175,6 +1175,11 @@ void run_subtest(struct test_loader *tester, return; } + if (is_jit_enabled() && subspec->jited.cnt && get_kasan_jit_enabled()) { + test__skip(); + return; + } + if (unpriv) { if (!can_execute_unpriv(tester, spec)) { test__skip(); diff --git a/tools/testing/selftests/bpf/unpriv_helpers.c b/tools/testing/selftests/bpf/unpriv_helpers.c index f997d7ec8fd0..25bd08648f5f 100644 --- a/tools/testing/selftests/bpf/unpriv_helpers.c +++ b/tools/testing/selftests/bpf/unpriv_helpers.c @@ -142,3 +142,8 @@ bool get_unpriv_disabled(void) } return mitigations_off; } + +bool get_kasan_jit_enabled(void) +{ + return config_contains("CONFIG_BPF_JIT_KASAN=y"); +} diff --git a/tools/testing/selftests/bpf/unpriv_helpers.h b/tools/testing/selftests/bpf/unpriv_helpers.h index 151f67329665..bc5f4c953c9d 100644 --- a/tools/testing/selftests/bpf/unpriv_helpers.h +++ b/tools/testing/selftests/bpf/unpriv_helpers.h @@ -5,3 +5,4 @@ #define UNPRIV_SYSCTL "kernel/unprivileged_bpf_disabled" bool get_unpriv_disabled(void); +bool get_kasan_jit_enabled(void); -- 2.53.0

