lkml.org 
[lkml]   [2021]   [Nov]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.14 163/849] ring-buffer: Protect ring_buffer_reset() from reentrancy
    Date
    From: Steven Rostedt (VMware) <rostedt@goodmis.org>

    commit 51d157946666382e779f94c39891e8e9a020da78 upstream.

    The resetting of the entire ring buffer use to simply go through and reset
    each individual CPU buffer that had its own protection and synchronization.
    But this was very slow, due to performing a synchronization for each CPU.
    The code was reshuffled to do one disabling of all CPU buffers, followed
    by a single RCU synchronization, and then the resetting of each of the CPU
    buffers. But unfortunately, the mutex that prevented multiple occurrences
    of resetting the buffer was not moved to the upper function, and there is
    nothing to protect from it.

    Take the ring buffer mutex around the global reset.

    Cc: stable@vger.kernel.org
    Fixes: b23d7a5f4a07a ("ring-buffer: speed up buffer resets by avoiding synchronize_rcu for each CPU")
    Reported-by: "Tzvetomir Stoyanov (VMware)" <tz.stoyanov@gmail.com>
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    kernel/trace/ring_buffer.c | 5 +++++
    1 file changed, 5 insertions(+)

    --- a/kernel/trace/ring_buffer.c
    +++ b/kernel/trace/ring_buffer.c
    @@ -5233,6 +5233,9 @@ void ring_buffer_reset(struct trace_buff
    struct ring_buffer_per_cpu *cpu_buffer;
    int cpu;

    + /* prevent another thread from changing buffer sizes */
    + mutex_lock(&buffer->mutex);
    +
    for_each_buffer_cpu(buffer, cpu) {
    cpu_buffer = buffer->buffers[cpu];

    @@ -5251,6 +5254,8 @@ void ring_buffer_reset(struct trace_buff
    atomic_dec(&cpu_buffer->record_disabled);
    atomic_dec(&cpu_buffer->resize_disabled);
    }
    +
    + mutex_unlock(&buffer->mutex);
    }
    EXPORT_SYMBOL_GPL(ring_buffer_reset);


    \
     
     \ /
      Last update: 2021-11-15 23:02    [W:2.507 / U:0.096 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site