• Steven Rostedt (Google)'s avatar
    ring-buffer: Have saved event hold the entire event · b0495258
    Steven Rostedt (Google) authored
    For the ring buffer iterator (non-consuming read), the event needs to be
    copied into the iterator buffer to make sure that a writer does not
    overwrite it while the user is reading it. If a write happens during the
    copy, the buffer is simply discarded.
    
    But the temp buffer itself was not big enough. The allocation of the
    buffer was only BUF_MAX_DATA_SIZE, which is the maximum data size that can
    be passed into the ring buffer and saved. But the temp buffer needs to
    hold the meta data as well. That would be BUF_PAGE_SIZE and not
    BUF_MAX_DATA_SIZE.
    
    Link: https://lore.kernel.org/linux-trace-kernel/20231212072558.61f76493@gandalf.local.home
    
    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Fixes: 785888c5
    
     ("ring-buffer: Have rb_iter_head_event() handle concurrent writer")
    Signed-off-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
    b0495258
ring_buffer.c 166 KB