From: Donggeun Yoo <donggeunyoo.kernel@gmail.com>
To: bpf@vger.kernel.org
Cc: ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org,
eddyz87@gmail.com, memxor@gmail.com, martin.lau@linux.dev,
song@kernel.org, yonghong.song@linux.dev, jolsa@kernel.org,
emil@etsalapatis.com, ihor.solodrai@linux.dev,
linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org,
donggeunyoo.kernel@gmail.com
Subject: [PATCH bpf 0/2] bpf: fix per-cpu initialization of a BPF_F_CPU created hash element
Date: Sun, 20 Sep 2026 18:31:51 +0900 [thread overview]
Message-ID: <20260920093153.439743-1-donggeunyoo.kernel@gmail.com> (raw)
A BPF_F_CPU update that creates a [lru_]percpu_hash element writes the
named CPU's slot and leaves the others holding the values of whatever
element was recycled into it, so a lookup of the new key returns a
deleted key's per-cpu values.
Patch 1 zero-fills the other CPUs. Patch 2 adds the selftest: the
existing cpu_flag subtests always prime a key with BPF_F_ALL_CPUS
first, so the element always exists by the time the flag is used and
the create path is not covered today.
Tested on x86_64 under QEMU/KVM, 4 vCPUs, on bpf/master a11212910cf0,
configured from the selftests' own fragments (config, config.vm,
config.x86_64):
test_progs -t percpu_alloc,map_init,htab_update,htab_mem,for_each,
map_kptr,map_ptr,map_in_map,lru_bug,map_lookup_percpu_elem,
map_percpu_stats,batch_map_ops,htab_reuse,timer,task_work
without patch 1 31/112 PASSED, 0 SKIPPED, 1/3 FAILED
with patch 1 32/115 PASSED, 0 SKIPPED, 0/0 FAILED
The three failures are the new subtests, one per allocation mode:
#304/18 percpu_alloc/cpu_flag_create_percpu_hash:FAIL
#304/19 percpu_alloc/cpu_flag_create_percpu_hash_malloc:FAIL
#304/20 percpu_alloc/cpu_flag_create_lru_percpu_hash:FAIL
test_percpu_map_cpu_flag_create:FAIL:value on specified cpu
unexpected value on specified cpu: actual 3735929054 != expected 0
3735929054 is 0xdeadc0de, the value the deleted key left behind. The
BPF_F_NO_PREALLOC case reproduces as reliably as the preallocated ones:
five runs of each arm, five failures without the patch and five passes
with it.
Donggeun Yoo (2):
bpf: Zero-fill other CPUs when BPF_F_CPU creates a per-cpu hash
element
selftests/bpf: Test per-cpu initialization of a BPF_F_CPU created
element
kernel/bpf/hashtab.c | 6 +-
.../selftests/bpf/prog_tests/percpu_alloc.c | 74 +++++++++++++++++++
2 files changed, 77 insertions(+), 3 deletions(-)
--
2.53.0
next reply other threads:[~2026-09-20 9:32 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-20 9:31 Donggeun Yoo [this message]
2026-09-20 9:31 ` [PATCH bpf 1/2] bpf: Zero-fill other CPUs when BPF_F_CPU creates a per-cpu hash element Donggeun Yoo
2026-09-20 10:19 ` bot+bpf-ci
2026-09-20 10:29 ` Donggeun Yoo
2026-09-20 16:21 ` Alexei Starovoitov
2026-09-20 9:31 ` [PATCH bpf 2/2] selftests/bpf: Test per-cpu initialization of a BPF_F_CPU created element Donggeun Yoo
2026-09-20 9:58 ` sashiko-bot
2026-09-20 10:21 ` Donggeun Yoo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260920093153.439743-1-donggeunyoo.kernel@gmail.com \
--to=donggeunyoo.kernel@gmail.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=eddyz87@gmail.com \
--cc=emil@etsalapatis.com \
--cc=ihor.solodrai@linux.dev \
--cc=jolsa@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=martin.lau@linux.dev \
--cc=memxor@gmail.com \
--cc=song@kernel.org \
--cc=yonghong.song@linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.