| From c8d25ed34fc3110ae7a94d3bd96e4ef76757d804 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 9 Nov 2021 00:15:02 +0000 |
| Subject: vsock: prevent unnecessary refcnt inc for nonblocking connect |
| |
| From: Eiichi Tsukata <eiichi.tsukata@nutanix.com> |
| |
| [ Upstream commit c7cd82b90599fa10915f41e3dd9098a77d0aa7b6 ] |
| |
| Currently vosck_connect() increments sock refcount for nonblocking |
| socket each time it's called, which can lead to memory leak if |
| it's called multiple times because connect timeout function decrements |
| sock refcount only once. |
| |
| Fixes it by making vsock_connect() return -EALREADY immediately when |
| sock state is already SS_CONNECTING. |
| |
| Fixes: d021c344051a ("VSOCK: Introduce VM Sockets") |
| Reviewed-by: Stefano Garzarella <sgarzare@redhat.com> |
| Signed-off-by: Eiichi Tsukata <eiichi.tsukata@nutanix.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| net/vmw_vsock/af_vsock.c | 2 ++ |
| 1 file changed, 2 insertions(+) |
| |
| diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c |
| index d4104144bab1b..bc8055f4571bc 100644 |
| --- a/net/vmw_vsock/af_vsock.c |
| +++ b/net/vmw_vsock/af_vsock.c |
| @@ -1151,6 +1151,8 @@ static int vsock_stream_connect(struct socket *sock, struct sockaddr *addr, |
| * non-blocking call. |
| */ |
| err = -EALREADY; |
| + if (flags & O_NONBLOCK) |
| + goto out; |
| break; |
| default: |
| if ((sk->sk_state == TCP_LISTEN) || |
| -- |
| 2.33.0 |
| |