[PATCH] ring-buffer: Annotate the speculative iterator event copy
From: Zhu Jun
Date: Wed Nov 11 2026 - 03:46:29 EST
A non-consuming iterator can copy an event while the writer overwrites
its page. The reader lock only excludes other readers, so KCSAN reports
the memcpy() racing with event reservation.
The iterator already checks the page stamp and committed size after the
copy and retries if the writer entered the page. Mark the speculative
copy as an intentional race; only the validated private copy is used.
Fixes: 785888c544e0 ("ring-buffer: Have rb_iter_head_event() handle concurrent writer")
Signed-off-by: Zhu Jun <zhujun2@xxxxxxxxxxxxxxxxxxxx>
---
kernel/trace/ring_buffer.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
index 18f023cf1d6f..197015ff715a 100644
--- a/kernel/trace/ring_buffer.c
+++ b/kernel/trace/ring_buffer.c
@@ -3566,7 +3566,8 @@ rb_iter_head_event(struct ring_buffer_iter *iter)
/* Writer corrupted the read? */
goto reset;
- memcpy(iter->event, event, length);
+ /* The page stamp below detects a concurrent overwrite of this copy. */
+ data_race(memcpy(iter->event, event, length));
/*
* If the page stamp is still the same after this rmb() then the
* event was safely copied without the writer entering the page.
--
2.51.0