Skip to content

Commit a24009b

Browse files
stefano-garzarellaPaolo Abeni
authored andcommitted
vsock: reset socket state when de-assigning the transport
Transport's release() and destruct() are called when de-assigning the vsock transport. These callbacks can touch some socket state like sock flags, sk_state, and peer_shutdown. Since we are reassigning the socket to a new transport during vsock_connect(), let's reset these fields to have a clean state with the new transport. Fixes: c0cfa2d ("vsock: add multi-transports support") Cc: [email protected] Signed-off-by: Stefano Garzarella <[email protected]> Reviewed-by: Luigi Leonardi <[email protected]> Signed-off-by: Paolo Abeni <[email protected]>
1 parent df137da commit a24009b

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

net/vmw_vsock/af_vsock.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -491,6 +491,15 @@ int vsock_assign_transport(struct vsock_sock *vsk, struct vsock_sock *psk)
491491
*/
492492
vsk->transport->release(vsk);
493493
vsock_deassign_transport(vsk);
494+
495+
/* transport's release() and destruct() can touch some socket
496+
* state, since we are reassigning the socket to a new transport
497+
* during vsock_connect(), let's reset these fields to have a
498+
* clean state.
499+
*/
500+
sock_reset_flag(sk, SOCK_DONE);
501+
sk->sk_state = TCP_CLOSE;
502+
vsk->peer_shutdown = 0;
494503
}
495504

496505
/* We increase the module refcnt to prevent the transport unloading

0 commit comments

Comments
 (0)