]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
selftests/bpf: Fix flaky bpf_cookie selftest
authorMykyta Yatsenko <yatsenko@meta.com>
Thu, 25 Sep 2025 21:52:30 +0000 (22:52 +0100)
committerAndrii Nakryiko <andrii@kernel.org>
Thu, 25 Sep 2025 22:55:44 +0000 (15:55 -0700)
bpf_cookie can fail on perf_event_open(), when it runs after the task_work
selftest. The task_work test causes perf to lower
sysctl_perf_event_sample_rate, and bpf_cookie uses sample_freq,
which is validated against that sysctl. As a result,
perf_event_open() rejects the attr if the (now tighter) limit is
exceeded.

>From perf_event_open():
if (attr.freq) {
if (attr.sample_freq > sysctl_perf_event_sample_rate)
return -EINVAL;
} else {
if (attr.sample_period & (1ULL << 63))
return -EINVAL;
}

Switch bpf_cookie to use sample_period, which is not checked against
sysctl_perf_event_sample_rate.

Signed-off-by: Mykyta Yatsenko <yatsenko@meta.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20250925215230.265501-1-mykyta.yatsenko5@gmail.com
tools/testing/selftests/bpf/prog_tests/bpf_cookie.c

index 4a0670c056bad694076e20424a4b1e86f4f6ebde..75f4dff7d04220f589b71ca04850ef28d622830c 100644 (file)
@@ -450,8 +450,7 @@ static void pe_subtest(struct test_bpf_cookie *skel)
        attr.size = sizeof(attr);
        attr.type = PERF_TYPE_SOFTWARE;
        attr.config = PERF_COUNT_SW_CPU_CLOCK;
-       attr.freq = 1;
-       attr.sample_freq = 10000;
+       attr.sample_period = 100000;
        pfd = syscall(__NR_perf_event_open, &attr, -1, 0, -1, PERF_FLAG_FD_CLOEXEC);
        if (!ASSERT_GE(pfd, 0, "perf_fd"))
                goto cleanup;