FAILED: patch "[PATCH] vsock: Set socket state back to SS_UNCONNECTED in" failed to apply to 4.9-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 4.9-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From a3e7b29e30854ed67be0d17687e744ad0c769c4b Mon Sep 17 00:00:00 2001
From: Peilin Ye <[email protected]>
Date: Mon, 8 Aug 2022 11:05:25 -0700
Subject: [PATCH] vsock: Set socket state back to SS_UNCONNECTED in
vsock_connect_timeout()
Imagine two non-blocking vsock_connect() requests on the same socket. The first request schedules @connect_work, and after it times out, vsock_connect_timeout() sets *sock* state back to TCP_CLOSE, but keeps *socket* state as SS_CONNECTING.
Later, the second request returns -EALREADY, meaning the socket "already has a pending connection in progress", even though the first request has already timed out.
As suggested by Stefano, fix it by setting *socket* state back to SS_UNCONNECTED, so that the second request will return -ETIMEDOUT.
net/vmw_vsock/af_vsock.c +1 -0
@@ -1286,6 +1286,7 @@ static void vsock_connect_timeout(struct work_struct *work)if (sk->sk_state ==TCP_SYN_SENT && (sk->sk_shutdown !=SHUTDOWN_MASK )) { sk->sk_state =TCP_CLOSE ; + sk->sk_socket->state =SS_UNCONNECTED ; sk->sk_err =ETIMEDOUT ;sk_error_report (sk);vsock_transport_cancel_pkt (vsk);