• Steven Rostedt (VMware)'s avatar
    ring-buffer: Do no reuse reader page if still in use · ae415fa4
    Steven Rostedt (VMware) authored
    To free the reader page that is allocated with ring_buffer_alloc_read_page(),
    ring_buffer_free_read_page() must be called. For faster performance, this
    page can be reused by the ring buffer to avoid having to free and allocate
    new pages.
    
    The issue arises when the page is used with a splice pipe into the
    networking code. The networking code may up the page counter for the page,
    and keep it active while sending it is queued to go to the network. The
    incrementing of the page ref does not prevent it from being reused in the
    ring buffer, and this can cause the page that is being sent out to the
    network to be modified before it is sent by reading new data.
    
    Add a check to the page ref counter, and only reuse the page if it is not
    being used anywhere else.
    
    Cc: stable@vger.kernel.org
    Fixes: 73a757e6 ("ring-buffer: Return reader page back into existing ring buffer")
    Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
    ae415fa4
ring_buffer.c 130 KB