From: Tung Nguyen Date: Thu, 28 Nov 2019 03:10:06 +0000 (+0700) Subject: tipc: fix wrong socket reference counter after tipc_sk_timeout() returns X-Git-Tag: v5.10.7~3744^2~10^2~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=91a4a3eb433e4d786420c41f3c08d1d16c605962;p=platform%2Fkernel%2Flinux-rpi.git tipc: fix wrong socket reference counter after tipc_sk_timeout() returns When tipc_sk_timeout() is executed but user space is grabbing ownership, this function rearms itself and returns. However, the socket reference counter is not reduced. This causes potential unexpected behavior. This commit fixes it by calling sock_put() before tipc_sk_timeout() returns in the above-mentioned case. Fixes: afe8792fec69 ("tipc: refactor function tipc_sk_timeout()") Signed-off-by: Tung Nguyen Acked-by: Ying Xue Acked-by: Jon Maloy Signed-off-by: David S. Miller --- diff --git a/net/tipc/socket.c b/net/tipc/socket.c index 7baed2c..fb55950 100644 --- a/net/tipc/socket.c +++ b/net/tipc/socket.c @@ -2759,6 +2759,7 @@ static void tipc_sk_timeout(struct timer_list *t) if (sock_owned_by_user(sk)) { sk_reset_timer(sk, &sk->sk_timer, jiffies + HZ / 20); bh_unlock_sock(sk); + sock_put(sk); return; }