lkml.org 
[lkml]   [2020]   [Apr]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.5 035/106] NFS: direct.c: Fix memory leak of dreq when nfs_get_lock_context fails
    Date
    From: Misono Tomohiro <misono.tomohiro@jp.fujitsu.com>

    [ Upstream commit 8605cf0e852af3b2c771c18417499dc4ceed03d5 ]

    When dreq is allocated by nfs_direct_req_alloc(), dreq->kref is
    initialized to 2. Therefore we need to call nfs_direct_req_release()
    twice to release the allocated dreq. Usually it is called in
    nfs_file_direct_{read, write}() and nfs_direct_complete().

    However, current code only calls nfs_direct_req_relese() once if
    nfs_get_lock_context() fails in nfs_file_direct_{read, write}().
    So, that case would result in memory leak.

    Fix this by adding the missing call.

    Signed-off-by: Misono Tomohiro <misono.tomohiro@jp.fujitsu.com>
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    fs/nfs/direct.c | 2 ++
    1 file changed, 2 insertions(+)

    diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c
    index 29f00da8a0b7f..6b0bf4ebd8124 100644
    --- a/fs/nfs/direct.c
    +++ b/fs/nfs/direct.c
    @@ -571,6 +571,7 @@ ssize_t nfs_file_direct_read(struct kiocb *iocb, struct iov_iter *iter)
    l_ctx = nfs_get_lock_context(dreq->ctx);
    if (IS_ERR(l_ctx)) {
    result = PTR_ERR(l_ctx);
    + nfs_direct_req_release(dreq);
    goto out_release;
    }
    dreq->l_ctx = l_ctx;
    @@ -989,6 +990,7 @@ ssize_t nfs_file_direct_write(struct kiocb *iocb, struct iov_iter *iter)
    l_ctx = nfs_get_lock_context(dreq->ctx);
    if (IS_ERR(l_ctx)) {
    result = PTR_ERR(l_ctx);
    + nfs_direct_req_release(dreq);
    goto out_release;
    }
    dreq->l_ctx = l_ctx;
    --
    2.20.1
    \
     
     \ /
      Last update: 2020-04-15 13:54    [W:4.040 / U:0.256 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site