lkml.org 
[lkml]   [2020]   [Jun]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 4.4 15/60] nfsd: Fix svc_xprt refcnt leak when setup callback client failed
    Date
    From: Xiyu Yang <xiyuyang19@fudan.edu.cn>

    [ Upstream commit a4abc6b12eb1f7a533c2e7484cfa555454ff0977 ]

    nfsd4_process_cb_update() invokes svc_xprt_get(), which increases the
    refcount of the "c->cn_xprt".

    The reference counting issue happens in one exception handling path of
    nfsd4_process_cb_update(). When setup callback client failed, the
    function forgets to decrease the refcnt increased by svc_xprt_get(),
    causing a refcnt leak.

    Fix this issue by calling svc_xprt_put() when setup callback client
    failed.

    Signed-off-by: Xiyu Yang <xiyuyang19@fudan.edu.cn>
    Signed-off-by: Xin Tan <tanxin.ctf@gmail.com>
    Signed-off-by: J. Bruce Fields <bfields@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    fs/nfsd/nfs4callback.c | 2 ++
    1 file changed, 2 insertions(+)

    diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c
    index 4fa3f0ba9ab3..0a0b41071ed7 100644
    --- a/fs/nfsd/nfs4callback.c
    +++ b/fs/nfsd/nfs4callback.c
    @@ -1096,6 +1096,8 @@ static void nfsd4_process_cb_update(struct nfsd4_callback *cb)
    err = setup_callback_client(clp, &conn, ses);
    if (err) {
    nfsd4_mark_cb_down(clp, err);
    + if (c)
    + svc_xprt_put(c->cn_xprt);
    return;
    }
    }
    --
    2.25.1
    \
     
     \ /
      Last update: 2020-06-18 03:39    [W:4.804 / U:0.872 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site