vhost-scsi: Call virtio_scsi_common_unrealize() when device realize failed
authorXie Yongji <xieyongji@baidu.com>
Wed, 17 Jul 2019 00:46:05 +0000 (08:46 +0800)
committerPaolo Bonzini <pbonzini@redhat.com>
Fri, 19 Jul 2019 17:04:49 +0000 (19:04 +0200)
This avoids memory leak when device hotplug is failed.

Signed-off-by: Xie Yongji <xieyongji@baidu.com>
Message-Id: <20190717004606.12444-1-xieyongji@baidu.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
hw/scsi/vhost-scsi.c

index 76bb875ca611237f338f1af6e1f9a808d622dddd..343ca8be7a43d4ead0df1c9f490f3306120fa406 100644 (file)
@@ -210,7 +210,7 @@ static void vhost_scsi_realize(DeviceState *dev, Error **errp)
         if (err) {
             error_propagate(errp, err);
             error_free(vsc->migration_blocker);
-            goto close_fd;
+            goto free_virtio;
         }
     }
 
@@ -240,6 +240,8 @@ static void vhost_scsi_realize(DeviceState *dev, Error **errp)
         migrate_del_blocker(vsc->migration_blocker);
     }
     g_free(vsc->dev.vqs);
+ free_virtio:
+    virtio_scsi_common_unrealize(dev);
  close_fd:
     close(vhostfd);
     return;