]> xenbits.xensource.com Git - libvirt.git/commitdiff
libxl: Set disk format for empty cdrom device
authorStefan Bader <stefan.bader@canonical.com>
Thu, 27 Mar 2014 16:55:03 +0000 (17:55 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Thu, 3 Apr 2014 15:27:46 +0000 (17:27 +0200)
The XML config for a CDROM device can be without a source path,
indicating that there is no media present. Without this change
the libxl driver fails to start a guest in that case because
the libxl library checks for the LIBXL_DISK_FORMAT_EMPTY format
type and tries to stat the NULL pointer that gets passed on.

> libxl: error: libxl_device.c:265:libxl__device_disk_set_backend:
> Disk vdev=hdc failed to stat: (null): Bad address

Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
src/libxl/libxl_conf.c

index de6f7ce5ad7d6abdc5bf9fea21e7c504fa9f1dc9..b8de72a7c72013a09fd12040fcb68ade67a7af23 100644 (file)
@@ -827,6 +827,9 @@ libxlMakeDisk(virDomainDiskDefPtr l_disk, libxl_device_disk *x_disk)
     x_disk->removable = 1;
     x_disk->readwrite = !l_disk->readonly;
     x_disk->is_cdrom = l_disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM ? 1 : 0;
+    /* An empty CDROM must have the empty format, otherwise libxl fails. */
+    if (x_disk->is_cdrom && !x_disk->pdev_path)
+        x_disk->format = LIBXL_DISK_FORMAT_EMPTY;
     if (l_disk->transient) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                        _("libxenlight does not support transient disks"));