vsock/virtio: fix src/dst cid format
authorMichael S. Tsirkin <mst@redhat.com>
Tue, 6 Dec 2016 04:07:15 +0000 (06:07 +0200)
committerMichael S. Tsirkin <mst@redhat.com>
Thu, 15 Dec 2016 04:59:19 +0000 (06:59 +0200)
These fields are 64 bit, using le32_to_cpu and friends
on these will not do the right thing.
Fix this up.

Cc: stable@vger.kernel.org
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
net/vmw_vsock/virtio_transport_common.c

index 6fd923eaeba9a41ae12439f5c037463d72ed0640..849c4ad0411ee22bd322456c7ee69d257d011229 100644 (file)
@@ -605,9 +605,9 @@ static int virtio_transport_reset_no_sock(struct virtio_vsock_pkt *pkt)
                return 0;
 
        pkt = virtio_transport_alloc_pkt(&info, 0,
-                                        le32_to_cpu(pkt->hdr.dst_cid),
+                                        le64_to_cpu(pkt->hdr.dst_cid),
                                         le32_to_cpu(pkt->hdr.dst_port),
-                                        le32_to_cpu(pkt->hdr.src_cid),
+                                        le64_to_cpu(pkt->hdr.src_cid),
                                         le32_to_cpu(pkt->hdr.src_port));
        if (!pkt)
                return -ENOMEM;
@@ -822,7 +822,7 @@ virtio_transport_send_response(struct vsock_sock *vsk,
        struct virtio_vsock_pkt_info info = {
                .op = VIRTIO_VSOCK_OP_RESPONSE,
                .type = VIRTIO_VSOCK_TYPE_STREAM,
-               .remote_cid = le32_to_cpu(pkt->hdr.src_cid),
+               .remote_cid = le64_to_cpu(pkt->hdr.src_cid),
                .remote_port = le32_to_cpu(pkt->hdr.src_port),
                .reply = true,
        };
@@ -862,9 +862,9 @@ virtio_transport_recv_listen(struct sock *sk, struct virtio_vsock_pkt *pkt)
        child->sk_state = SS_CONNECTED;
 
        vchild = vsock_sk(child);
-       vsock_addr_init(&vchild->local_addr, le32_to_cpu(pkt->hdr.dst_cid),
+       vsock_addr_init(&vchild->local_addr, le64_to_cpu(pkt->hdr.dst_cid),
                        le32_to_cpu(pkt->hdr.dst_port));
-       vsock_addr_init(&vchild->remote_addr, le32_to_cpu(pkt->hdr.src_cid),
+       vsock_addr_init(&vchild->remote_addr, le64_to_cpu(pkt->hdr.src_cid),
                        le32_to_cpu(pkt->hdr.src_port));
 
        vsock_insert_connected(vchild);
@@ -903,9 +903,9 @@ void virtio_transport_recv_pkt(struct virtio_vsock_pkt *pkt)
        struct sock *sk;
        bool space_available;
 
-       vsock_addr_init(&src, le32_to_cpu(pkt->hdr.src_cid),
+       vsock_addr_init(&src, le64_to_cpu(pkt->hdr.src_cid),
                        le32_to_cpu(pkt->hdr.src_port));
-       vsock_addr_init(&dst, le32_to_cpu(pkt->hdr.dst_cid),
+       vsock_addr_init(&dst, le64_to_cpu(pkt->hdr.dst_cid),
                        le32_to_cpu(pkt->hdr.dst_port));
 
        trace_virtio_transport_recv_pkt(src.svm_cid, src.svm_port,