]> xenbits.xensource.com Git - qemu-xen.git/commitdiff
vhost-vsock: fix double close() in the realize() error path
authorStefano Garzarella <sgarzare@redhat.com>
Tue, 31 Mar 2020 07:59:10 +0000 (09:59 +0200)
committerMichael S. Tsirkin <mst@redhat.com>
Tue, 31 Mar 2020 14:54:28 +0000 (10:54 -0400)
vhost_dev_cleanup() closes the vhostfd parameter passed to
vhost_dev_init(), so this patch avoids closing it twice in
the vhost_vsock_device_realize() error path.

Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
Message-Id: <20200331075910.42529-1-sgarzare@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
hw/virtio/vhost-vsock.c

index 9f9093e19644dc99cf66e30f763deed469d32cfa..09b6b07f9483029a523b8781fd28f372e0d57a91 100644 (file)
@@ -364,12 +364,16 @@ static void vhost_vsock_device_realize(DeviceState *dev, Error **errp)
 
 err_vhost_dev:
     vhost_dev_cleanup(&vsock->vhost_dev);
+    /* vhost_dev_cleanup() closes the vhostfd passed to vhost_dev_init() */
+    vhostfd = -1;
 err_virtio:
     virtio_delete_queue(vsock->recv_vq);
     virtio_delete_queue(vsock->trans_vq);
     virtio_delete_queue(vsock->event_vq);
     virtio_cleanup(vdev);
-    close(vhostfd);
+    if (vhostfd >= 0) {
+        close(vhostfd);
+    }
     return;
 }