diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c index f04abf662ec6..b62801794d4a 100644 --- a/net/vmw_vsock/af_vsock.c +++ b/net/vmw_vsock/af_vsock.c @@ -1355,18 +1355,23 @@ static int vsock_connect(struct socket *sock, struct sockaddr *addr, !transport->stream_allow(remote_addr->svm_cid, remote_addr->svm_port)) { err = -ENETUNREACH; + kfree(vsk->trans); goto out; } err = vsock_auto_bind(vsk); - if (err) + if (err) { + kfree(vsk->trans); goto out; + } sk->sk_state = TCP_SYN_SENT; err = transport->connect(vsk); - if (err < 0) + if (err < 0) { + kfree(vsk->trans); goto out; + } /* Mark sock as connecting and set the error code to in * progress in case this is a non-blocking connect.