diff options
Diffstat (limited to 'net/vmw_vsock/af_vsock.c')
| -rw-r--r-- | net/vmw_vsock/af_vsock.c | 8 | 
1 files changed, 5 insertions, 3 deletions
diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c index ca511c4f388..7f93e2a42d7 100644 --- a/net/vmw_vsock/af_vsock.c +++ b/net/vmw_vsock/af_vsock.c @@ -207,7 +207,7 @@ static struct sock *__vsock_find_bound_socket(struct sockaddr_vm *addr)  	struct vsock_sock *vsk;  	list_for_each_entry(vsk, vsock_bound_sockets(addr), bound_table) -		if (vsock_addr_equals_addr_any(addr, &vsk->local_addr)) +		if (addr->svm_port == vsk->local_addr.svm_port)  			return sk_vsock(vsk);  	return NULL; @@ -220,8 +220,8 @@ static struct sock *__vsock_find_connected_socket(struct sockaddr_vm *src,  	list_for_each_entry(vsk, vsock_connected_sockets(src, dst),  			    connected_table) { -		if (vsock_addr_equals_addr(src, &vsk->remote_addr) -		    && vsock_addr_equals_addr(dst, &vsk->local_addr)) { +		if (vsock_addr_equals_addr(src, &vsk->remote_addr) && +		    dst->svm_port == vsk->local_addr.svm_port) {  			return sk_vsock(vsk);  		}  	} @@ -1670,6 +1670,8 @@ vsock_stream_recvmsg(struct kiocb *kiocb,  	vsk = vsock_sk(sk);  	err = 0; +	msg->msg_namelen = 0; +  	lock_sock(sk);  	if (sk->sk_state != SS_CONNECTED) {  |