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 ca511c4f388a..7f93e2a42d7a 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) | |||
| 207 | struct vsock_sock *vsk; | 207 | struct vsock_sock *vsk; |
| 208 | 208 | ||
| 209 | list_for_each_entry(vsk, vsock_bound_sockets(addr), bound_table) | 209 | list_for_each_entry(vsk, vsock_bound_sockets(addr), bound_table) |
| 210 | if (vsock_addr_equals_addr_any(addr, &vsk->local_addr)) | 210 | if (addr->svm_port == vsk->local_addr.svm_port) |
| 211 | return sk_vsock(vsk); | 211 | return sk_vsock(vsk); |
| 212 | 212 | ||
| 213 | return NULL; | 213 | return NULL; |
| @@ -220,8 +220,8 @@ static struct sock *__vsock_find_connected_socket(struct sockaddr_vm *src, | |||
| 220 | 220 | ||
| 221 | list_for_each_entry(vsk, vsock_connected_sockets(src, dst), | 221 | list_for_each_entry(vsk, vsock_connected_sockets(src, dst), |
| 222 | connected_table) { | 222 | connected_table) { |
| 223 | if (vsock_addr_equals_addr(src, &vsk->remote_addr) | 223 | if (vsock_addr_equals_addr(src, &vsk->remote_addr) && |
| 224 | && vsock_addr_equals_addr(dst, &vsk->local_addr)) { | 224 | dst->svm_port == vsk->local_addr.svm_port) { |
| 225 | return sk_vsock(vsk); | 225 | return sk_vsock(vsk); |
| 226 | } | 226 | } |
| 227 | } | 227 | } |
| @@ -1670,6 +1670,8 @@ vsock_stream_recvmsg(struct kiocb *kiocb, | |||
| 1670 | vsk = vsock_sk(sk); | 1670 | vsk = vsock_sk(sk); |
| 1671 | err = 0; | 1671 | err = 0; |
| 1672 | 1672 | ||
| 1673 | msg->msg_namelen = 0; | ||
| 1674 | |||
| 1673 | lock_sock(sk); | 1675 | lock_sock(sk); |
| 1674 | 1676 | ||
| 1675 | if (sk->sk_state != SS_CONNECTED) { | 1677 | if (sk->sk_state != SS_CONNECTED) { |
