lkml.org 
[lkml]   [2020]   [Nov]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 008/191] chelsio/chtls: fix memory leaks in CPL handlers
    Date
    From: Vinay Kumar Yadav <vinay.yadav@chelsio.com>

    [ Upstream commit 6daa1da4e262b0cd52ef0acc1989ff22b5540264 ]

    CPL handler functions chtls_pass_open_rpl() and
    chtls_close_listsrv_rpl() should return CPL_RET_BUF_DONE
    so that caller function will do skb free to avoid leak.

    Fixes: cc35c88ae4db ("crypto : chtls - CPL handler definition")
    Signed-off-by: Vinay Kumar Yadav <vinay.yadav@chelsio.com>
    Link: https://lore.kernel.org/r/20201025194228.31271-1-vinay.yadav@chelsio.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/crypto/chelsio/chtls/chtls_cm.c | 27 ++++++++++++---------------
    1 file changed, 12 insertions(+), 15 deletions(-)

    --- a/drivers/crypto/chelsio/chtls/chtls_cm.c
    +++ b/drivers/crypto/chelsio/chtls/chtls_cm.c
    @@ -696,14 +696,13 @@ static int chtls_pass_open_rpl(struct ch
    if (rpl->status != CPL_ERR_NONE) {
    pr_info("Unexpected PASS_OPEN_RPL status %u for STID %u\n",
    rpl->status, stid);
    - return CPL_RET_BUF_DONE;
    + } else {
    + cxgb4_free_stid(cdev->tids, stid, listen_ctx->lsk->sk_family);
    + sock_put(listen_ctx->lsk);
    + kfree(listen_ctx);
    + module_put(THIS_MODULE);
    }
    - cxgb4_free_stid(cdev->tids, stid, listen_ctx->lsk->sk_family);
    - sock_put(listen_ctx->lsk);
    - kfree(listen_ctx);
    - module_put(THIS_MODULE);
    -
    - return 0;
    + return CPL_RET_BUF_DONE;
    }

    static int chtls_close_listsrv_rpl(struct chtls_dev *cdev, struct sk_buff *skb)
    @@ -720,15 +719,13 @@ static int chtls_close_listsrv_rpl(struc
    if (rpl->status != CPL_ERR_NONE) {
    pr_info("Unexpected CLOSE_LISTSRV_RPL status %u for STID %u\n",
    rpl->status, stid);
    - return CPL_RET_BUF_DONE;
    + } else {
    + cxgb4_free_stid(cdev->tids, stid, listen_ctx->lsk->sk_family);
    + sock_put(listen_ctx->lsk);
    + kfree(listen_ctx);
    + module_put(THIS_MODULE);
    }
    -
    - cxgb4_free_stid(cdev->tids, stid, listen_ctx->lsk->sk_family);
    - sock_put(listen_ctx->lsk);
    - kfree(listen_ctx);
    - module_put(THIS_MODULE);
    -
    - return 0;
    + return CPL_RET_BUF_DONE;
    }

    static void chtls_purge_wr_queue(struct sock *sk)

    \
     
     \ /
      Last update: 2020-11-03 22:25    [W:4.099 / U:1.064 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site