]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ring-buffer: Prevent subbuf order change when resizing is disabled
authorVincent Donnefort <vdonnefort@google.com>
Thu, 6 Aug 2026 21:13:02 +0000 (22:13 +0100)
committerSteven Rostedt <rostedt@goodmis.org>
Sun, 9 Aug 2026 02:23:45 +0000 (22:23 -0400)
Because ring_buffer_subbuf_order_set() frees buffer pages, we can't
allow it when resizing is disabled. A non-consuming reader is at risk of
use-after-free (rb_advance_iter()).

Return -EBUSY on resize_disabled, matching ring_buffer_resize()
behaviour.

Cc: stable@vger.kernel.org
Fixes: f9b94daa542a ("ring-buffer: Set new size of the ring buffer sub page")
Link: https://patch.msgid.link/20260806211306.3704194-3-vdonnefort@google.com
Reported-by: syzbot+e0cc44465d6bae735679@syzkaller.appspotmail.com
Signed-off-by: Vincent Donnefort <vdonnefort@google.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
kernel/trace/ring_buffer.c

index 09d502ef4c55861a586eb86e41a05c2606d6e954..6cbd80ccef37724bdf24335f6d54c64162cada1c 100644 (file)
@@ -7360,7 +7360,7 @@ int ring_buffer_subbuf_order_set(struct trace_buffer *buffer, int order)
 
                cpu_buffer = buffer->buffers[cpu];
 
-               if (cpu_buffer->mapped) {
+               if (atomic_read(&cpu_buffer->resize_disabled)) {
                        err = -EBUSY;
                        goto error;
                }