lkml.org 
[lkml]   [2022]   [Jun]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.18 527/879] net/smc: postpone sk_refcnt increment in connect()
    Date
    From: liuyacan <liuyacan@corp.netease.com>

    [ Upstream commit 75c1edf23b95a9c66923d9269d8e86e4dbde151f ]

    Same trigger condition as commit 86434744. When setsockopt runs
    in parallel to a connect(), and switch the socket into fallback
    mode. Then the sk_refcnt is incremented in smc_connect(), but
    its state stay in SMC_INIT (NOT SMC_ACTIVE). This cause the
    corresponding sk_refcnt decrement in __smc_release() will not be
    performed.

    Fixes: 86434744fedf ("net/smc: add fallback check to connect()")
    Signed-off-by: liuyacan <liuyacan@corp.netease.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    net/smc/af_smc.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/net/smc/af_smc.c b/net/smc/af_smc.c
    index fce16b9d6e1a..45a24d24210f 100644
    --- a/net/smc/af_smc.c
    +++ b/net/smc/af_smc.c
    @@ -1564,9 +1564,9 @@ static int smc_connect(struct socket *sock, struct sockaddr *addr,
    if (rc && rc != -EINPROGRESS)
    goto out;

    - sock_hold(&smc->sk); /* sock put in passive closing */
    if (smc->use_fallback)
    goto out;
    + sock_hold(&smc->sk); /* sock put in passive closing */
    if (flags & O_NONBLOCK) {
    if (queue_work(smc_hs_wq, &smc->connect_work))
    smc->connect_nonblock = 1;
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-06-08 03:41    [W:2.132 / U:0.300 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site