2020-05-27 10:31:00

by Stefano Garzarella

[permalink] [raw]
Subject: [PATCH net] vsock: fix timeout in vsock_accept()

The accept(2) is an "input" socket interface, so we should use
SO_RCVTIMEO instead of SO_SNDTIMEO to set the timeout.

So this patch replace sock_sndtimeo() with sock_rcvtimeo() to
use the right timeout in the vsock_accept().

Fixes: d021c344051a ("VSOCK: Introduce VM Sockets")
Signed-off-by: Stefano Garzarella <[email protected]>
---
net/vmw_vsock/af_vsock.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
index a5f28708e0e7..626bf9044418 100644
--- a/net/vmw_vsock/af_vsock.c
+++ b/net/vmw_vsock/af_vsock.c
@@ -1408,7 +1408,7 @@ static int vsock_accept(struct socket *sock, struct socket *newsock, int flags,
/* Wait for children sockets to appear; these are the new sockets
* created upon connection establishment.
*/
- timeout = sock_sndtimeo(listener, flags & O_NONBLOCK);
+ timeout = sock_rcvtimeo(listener, flags & O_NONBLOCK);
prepare_to_wait(sk_sleep(listener), &wait, TASK_INTERRUPTIBLE);

while ((connected = vsock_dequeue_accept(listener)) == NULL &&
--
2.25.4


2020-05-27 11:22:50

by Jorgen Hansen

[permalink] [raw]
Subject: RE: [PATCH net] vsock: fix timeout in vsock_accept()

> From: Stefano Garzarella <[email protected]>
> Sent: Wednesday, May 27, 2020 9:57 AM
>
> The accept(2) is an "input" socket interface, so we should use
> SO_RCVTIMEO instead of SO_SNDTIMEO to set the timeout.
>
> So this patch replace sock_sndtimeo() with sock_rcvtimeo() to
> use the right timeout in the vsock_accept().
>
> Fixes: d021c344051a ("VSOCK: Introduce VM Sockets")
> Signed-off-by: Stefano Garzarella <[email protected]>
> ---
> net/vmw_vsock/af_vsock.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
> index a5f28708e0e7..626bf9044418 100644
> --- a/net/vmw_vsock/af_vsock.c
> +++ b/net/vmw_vsock/af_vsock.c
> @@ -1408,7 +1408,7 @@ static int vsock_accept(struct socket *sock, struct
> socket *newsock, int flags,
> /* Wait for children sockets to appear; these are the new sockets
> * created upon connection establishment.
> */
> - timeout = sock_sndtimeo(listener, flags & O_NONBLOCK);
> + timeout = sock_rcvtimeo(listener, flags & O_NONBLOCK);
> prepare_to_wait(sk_sleep(listener), &wait, TASK_INTERRUPTIBLE);
>
> while ((connected = vsock_dequeue_accept(listener)) == NULL &&
> --
> 2.25.4

Thanks for fixing this!

Reviewed-by: Jorgen Hansen <[email protected]>

2020-05-27 21:52:45

by David Miller

[permalink] [raw]
Subject: Re: [PATCH net] vsock: fix timeout in vsock_accept()

From: Stefano Garzarella <[email protected]>
Date: Wed, 27 May 2020 09:56:55 +0200

> The accept(2) is an "input" socket interface, so we should use
> SO_RCVTIMEO instead of SO_SNDTIMEO to set the timeout.
>
> So this patch replace sock_sndtimeo() with sock_rcvtimeo() to
> use the right timeout in the vsock_accept().
>
> Fixes: d021c344051a ("VSOCK: Introduce VM Sockets")
> Signed-off-by: Stefano Garzarella <[email protected]>

Applied and queued up for -stable, thank you.