lkml.org 
[lkml]   [2018]   [Nov]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 099/124] fuse: fix leaked notify reply
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

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

    From: Miklos Szeredi <mszeredi@redhat.com>

    commit 7fabaf303458fcabb694999d6fa772cc13d4e217 upstream.

    fuse_request_send_notify_reply() may fail if the connection was reset for
    some reason (e.g. fs was unmounted). Don't leak request reference in this
    case. Besides leaking memory, this resulted in fc->num_waiting not being
    decremented and hence fuse_wait_aborted() left in a hanging and unkillable
    state.

    Fixes: 2d45ba381a74 ("fuse: add retrieve request")
    Fixes: b8f95e5d13f5 ("fuse: umount should wait for all requests")
    Reported-and-tested-by: syzbot+6339eda9cb4ebbc4c37b@syzkaller.appspotmail.com
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Cc: <stable@vger.kernel.org> #v2.6.36
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

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

    --- a/fs/fuse/dev.c
    +++ b/fs/fuse/dev.c
    @@ -1721,8 +1721,10 @@ static int fuse_retrieve(struct fuse_con
    req->in.args[1].size = total_len;

    err = fuse_request_send_notify_reply(fc, req, outarg->notify_unique);
    - if (err)
    + if (err) {
    fuse_retrieve_end(fc, req);
    + fuse_put_request(fc, req);
    + }

    return err;
    }

    \
     
     \ /
      Last update: 2018-11-19 19:19    [W:4.054 / U:1.044 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site