]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
selftests/bpf: Fix off-by-one in bpf_cpumask_populate related selftest
authorMatt Bobrowski <mattbobrowski@google.com>
Mon, 20 Apr 2026 09:37:34 +0000 (09:37 +0000)
committerKumar Kartikeya Dwivedi <memxor@gmail.com>
Mon, 20 Apr 2026 14:22:20 +0000 (16:22 +0200)
The test_populate test uses >= instead of > when checking if the
runtime nr_cpus exceeds the bit capacity of a cpumask_t.

On a system where the physical CPU core count perfectly matches the
CONFIG_NR_CPUS upper bound (e.g. nr_cpus = 512 and CONFIG_NR_CPUS =
512), the condition nr_cpus >= CPUMASK_TEST_MASKLEN * 8 evaluates to
true (512 >= 512). This incorrectly causes the test to fail with an
error value of 3.

A 512-bit cpumask_t provides enough bits (indices 0 through 511) to
represent 512 CPUs. The subsequent bpf_for(i, 0, nr_cpus) loop
iterates up to nr_cpus - 1 (511), which perfectly aligns with the
maximum valid index of the bitmask.

Change the condition to nr_cpus > CPUMASK_TEST_MASKLEN * 8 to fix the
false positive failure on these systems.

Fixes: 918ba2636d4e ("selftests: bpf: add bpf_cpumask_populate selftests")
Signed-off-by: Matt Bobrowski <mattbobrowski@google.com>
Acked-by: Paul Chaignon <paul.chaignon@gmail.com>
Link: https://lore.kernel.org/bpf/20260420093734.2400330-1-mattbobrowski@google.com
Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
tools/testing/selftests/bpf/progs/cpumask_success.c

index 0e04c31b91c0c0078ec2e5045033f7e25d585311..774706e7b058b9f0b18432a9ca23b86c2fa5150f 100644 (file)
@@ -866,7 +866,7 @@ int BPF_PROG(test_populate, struct task_struct *task, u64 clone_flags)
         * access NR_CPUS, the upper bound for nr_cpus, so we infer
         * it from the size of cpumask_t.
         */
-       if (nr_cpus < 0 || nr_cpus >= CPUMASK_TEST_MASKLEN * 8) {
+       if (nr_cpus < 0 || nr_cpus > CPUMASK_TEST_MASKLEN * 8) {
                err = 3;
                goto out;
        }