lkml.org 
[lkml]   [2019]   [Feb]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 284/313] fuse: call pipe_buf_release() under pipe lock
    Date
    4.19-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Jann Horn <jannh@google.com>

    commit 9509941e9c534920ccc4771ae70bd6cbbe79df1c upstream.

    Some of the pipe_buf_release() handlers seem to assume that the pipe is
    locked - in particular, anon_pipe_buf_release() accesses pipe->tmp_page
    without taking any extra locks. From a glance through the callers of
    pipe_buf_release(), it looks like FUSE is the only one that calls
    pipe_buf_release() without having the pipe locked.

    This bug should only lead to a memory leak, nothing terrible.

    Fixes: dd3bb14f44a6 ("fuse: support splice() writing to fuse device")
    Cc: stable@vger.kernel.org
    Signed-off-by: Jann Horn <jannh@google.com>
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    fs/fuse/dev.c | 2 ++
    1 file changed, 2 insertions(+)

    --- a/fs/fuse/dev.c
    +++ b/fs/fuse/dev.c
    @@ -2032,8 +2032,10 @@ static ssize_t fuse_dev_splice_write(str

    ret = fuse_dev_do_write(fud, &cs, len);

    + pipe_lock(pipe);
    for (idx = 0; idx < nbuf; idx++)
    pipe_buf_release(pipe, &bufs[idx]);
    + pipe_unlock(pipe);

    out:
    kvfree(bufs);

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