Fix correctness issues in BPF ring buffer handling. A zero record bound currently consumes one record. A NULL callback is accepted during manager construction but crashes when callback-based consumption reaches the ring.
Native-width position counters are also compared by magnitude in libbpf consumption and pending reservation tracking. The kernel user-ring drain widens them before arithmetic. On native 32-bit systems these paths fail after counter wrap. The libbpf consumer can also miss a readiness notification after publishing its position and checking for new data without a full StoreLoad barrier. Use compiler atomics and add the missing barrier between publishing a consumer position and the next producer-position load, including across busy retries and early returns. Callback traversal does not follow the overwrite position maintained by BPF_F_RB_OVERWRITE maps. Reject callback consumption of those maps, as discussed here: https://lore.kernel.org/bpf/CAEf4Bzaq5drHWChXoRBnrmkb6reAsSVj8r=ubyfsup31fma...@mail.gmail.com/ Andrew Werner found the position-wrap and missed-wakeup failures while implementing Aya ring buffer support. The original implementation contains the equality reasoning and edge-triggered regression test: https://github.com/aya-rs/aya/commit/e2cf734490bc188bcedb1eac92d23d81123e42cd Aya later corrected the consumer ordering with the same explicit fence: https://github.com/aya-rs/aya/commit/7277a57ea8cdb74918d3096a4b22b6d814481973 Assisted-by: Codex:gpt-5.5 Signed-off-by: Tamir Duberstein <[email protected]> --- Changes in v2: - Fix additional native 32-bit wrap paths found by Sashiko review. - Explain modular position comparisons and leave mixed-bitness ABI work separate. - Preserve the wakeup handshake across bounded and callback returns. - Follow BPF comment style and simplify wakeup test cleanup. - Link to v1: https://patch.msgid.link/[email protected] --- Tamir Duberstein (8): libbpf: ringbuf: Honor zero consume bounds libbpf: ringbuf: Prevent NULL callback crash libbpf: ringbuf: Reject overwrite callback use libbpf: ringbuf: Handle position counter wrap bpf: ringbuf: Handle pending position wrap bpf: user_ringbuf: Handle position wrap libbpf: ringbuf: Use compiler atomics libbpf: ringbuf: Prevent missed wakeups kernel/bpf/ringbuf.c | 12 +- tools/lib/bpf/libbpf.h | 35 +++- tools/lib/bpf/ringbuf.c | 97 +++++++--- tools/testing/selftests/bpf/prog_tests/ringbuf.c | 228 +++++++++++++++++++++++ 4 files changed, 340 insertions(+), 32 deletions(-) --- base-commit: e7ae89a0c97ce2b68b0983cd01eda67cf373517d change-id: 20260613-bpf-ringbuf-fixes-e9a8b3c6125b Best regards, -- Tamir Duberstein <[email protected]>

