summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorEduard Zingerman <eddyz87@gmail.com>2026-09-03 10:15:39 -0700
committerAlexei Starovoitov <ast@kernel.org>2026-09-03 18:54:45 -0700
commit4814ed6406f3493bd554ad046da5f7fc04833571 (patch)
tree87f82f4c38d94aa694ec1f73ed5db133ec917176 /scripts
parente044668419b9c444282bd09521f7ea07edbc10b1 (diff)
downloadlinux-4814ed6406f3493bd554ad046da5f7fc04833571.tar.gz
linux-4814ed6406f3493bd554ad046da5f7fc04833571.zip
bpf: zero extend the result of an arena 32-bit cmpxchg
bpf_convert_ctx_accesses() rewrites an atomic on an arena pointer from BPF_STX | BPF_ATOMIC to BPF_STX | BPF_PROBE_ATOMIC, and it runs before bpf_opt_subreg_zext_lo32_rnd_hi32(). That pass emits an explicit zero extension for a 32-bit cmpxchg even when bpf_jit_needs_zext() is false. This is done because on some architectures 32-bit cmpxchg requires explicit zero extension for the dst register. E.g. on x86-64 'lock cmpxchg' does not change the %eax if comparison is successful, while BPF semantics declare that each operation on a 32-bit register zero extends it's upper half. is_cmpxchg_insn() matches BPF_MODE == BPF_ATOMIC only, so an arena cmpxchg misses said zero extension adjustment. This patch adjusts is_cmpxchg_insn() to match BPF_PROBE_ATOMIC alongside BPF_ATOMIC. Fixes: d503a04f8bc0 ("bpf: Add support for certain atomics in bpf_arena to x86 JIT") Reported-by: Nicholas Carlini <npc@anthropic.com> Suggested-by: Nicholas Carlini <npc@anthropic.com> Signed-off-by: Eduard Zingerman <eddyz87@gmail.com> Link: https://lore.kernel.org/r/20260903171542.1438050-1-eddyz87@gmail.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Diffstat (limited to 'scripts')
0 files changed, 0 insertions, 0 deletions