OSDN Git Service

vhost-user: unregister slave req handler at cleanup time
authorMaxime Coquelin <maxime.coquelin@redhat.com>
Fri, 30 Jun 2017 16:04:22 +0000 (18:04 +0200)
committerMichael S. Tsirkin <mst@redhat.com>
Mon, 3 Jul 2017 19:29:49 +0000 (22:29 +0300)
If the backend sends a request just before closing the socket,
the aio dispatcher might schedule its reading after the vhost
device has been cleaned, leading to a NULL pointer dereference
in slave_read();

vhost_user_cleanup() already closes the socket but it is not
enough, the handler has to be unregistered.

Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
hw/virtio/vhost-user.c

index 958ee09..2203011 100644 (file)
@@ -779,6 +779,7 @@ static int vhost_user_cleanup(struct vhost_dev *dev)
 
     u = dev->opaque;
     if (u->slave_fd >= 0) {
+        qemu_set_fd_handler(u->slave_fd, NULL, NULL, NULL);
         close(u->slave_fd);
         u->slave_fd = -1;
     }