]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
libxl: Allocate @libxldisk in xenParseXLDisk() on stack
authorMichal Privoznik <mprivozn@redhat.com>
Fri, 14 Jan 2022 08:51:39 +0000 (09:51 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Mon, 17 Jan 2022 08:53:45 +0000 (09:53 +0100)
In xenParseXLDisk() the @libxldisk variable (which is type of
libxl_device_disk) is allocated on heap. But this is not
necessary as nothing in the function needs that approach.

Allocate the variable on the stack and drop corresponding
VIR_FREE() call.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/libxl/xen_xl.c

index 3a4e21ee0eb20953a06b222239cc3cde895610ed..f32a6cd65a3b6e8af4ed376bd7ddc892919e668a 100644 (file)
@@ -641,11 +641,9 @@ xenParseXLDisk(virConf *conf, virDomainDef *def)
     int ret = -1;
     virConfValue *list = virConfGetValue(conf, "disk");
     XLU_Config *xluconf;
-    libxl_device_disk *libxldisk;
+    libxl_device_disk libxldisk;
     virDomainDiskDef *disk = NULL;
 
-    libxldisk = g_new0(libxl_device_disk, 1);
-
     if (!(xluconf = xlu_cfg_init(stderr, "command line")))
         goto cleanup;
 
@@ -657,23 +655,23 @@ xenParseXLDisk(virConf *conf, virDomainDef *def)
             if (list->type != VIR_CONF_STRING || list->str == NULL)
                 goto skipdisk;
 
-            libxl_device_disk_init(libxldisk);
+            libxl_device_disk_init(&libxldisk);
 
-            if (xlu_disk_parse(xluconf, 1, &disk_spec, libxldisk))
+            if (xlu_disk_parse(xluconf, 1, &disk_spec, &libxldisk))
                 goto fail;
 
             if (!(disk = virDomainDiskDefNew(NULL)))
                 goto fail;
 
-            if (xenParseXLDiskSrc(disk, libxldisk->pdev_path) < 0)
+            if (xenParseXLDiskSrc(disk, libxldisk.pdev_path) < 0)
                 goto fail;
 
-            disk->dst = g_strdup(libxldisk->vdev);
+            disk->dst = g_strdup(libxldisk.vdev);
 
-            disk->src->readonly = !libxldisk->readwrite;
-            disk->removable = libxldisk->removable;
+            disk->src->readonly = !libxldisk.readwrite;
+            disk->removable = libxldisk.removable;
 
-            if (libxldisk->is_cdrom) {
+            if (libxldisk.is_cdrom) {
                 virDomainDiskSetDriver(disk, "qemu");
 
                 virDomainDiskSetType(disk, VIR_STORAGE_TYPE_FILE);
@@ -683,7 +681,7 @@ xenParseXLDisk(virConf *conf, virDomainDef *def)
                 else
                     disk->src->format = VIR_STORAGE_FILE_RAW;
             } else {
-                switch (libxldisk->format) {
+                switch (libxldisk.format) {
                 case LIBXL_DISK_FORMAT_QCOW:
                     disk->src->format = VIR_STORAGE_FILE_QCOW;
                     break;
@@ -711,11 +709,11 @@ xenParseXLDisk(virConf *conf, virDomainDef *def)
                 default:
                     virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
                                    _("disk image format not supported: %s"),
-                                   libxl_disk_format_to_string(libxldisk->format));
+                                   libxl_disk_format_to_string(libxldisk.format));
                     goto fail;
                 }
 
-                switch (libxldisk->backend) {
+                switch (libxldisk.backend) {
                 case LIBXL_DISK_BACKEND_QDISK:
                 case LIBXL_DISK_BACKEND_UNKNOWN:
                     virDomainDiskSetDriver(disk, "qemu");
@@ -735,22 +733,22 @@ xenParseXLDisk(virConf *conf, virDomainDef *def)
                 default:
                     virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
                                    _("disk backend not supported: %s"),
-                                   libxl_disk_backend_to_string(libxldisk->backend));
+                                   libxl_disk_backend_to_string(libxldisk.backend));
                     goto fail;
                 }
             }
 
-            if (STRPREFIX(libxldisk->vdev, "xvd") ||
+            if (STRPREFIX(libxldisk.vdev, "xvd") ||
                 def->os.type != VIR_DOMAIN_OSTYPE_HVM)
                 disk->bus = VIR_DOMAIN_DISK_BUS_XEN;
-            else if (STRPREFIX(libxldisk->vdev, "sd"))
+            else if (STRPREFIX(libxldisk.vdev, "sd"))
                 disk->bus = VIR_DOMAIN_DISK_BUS_SCSI;
             else
                 disk->bus = VIR_DOMAIN_DISK_BUS_IDE;
 
             VIR_APPEND_ELEMENT(def->disks, def->ndisks, disk);
 
-            libxl_device_disk_dispose(libxldisk);
+            libxl_device_disk_dispose(&libxldisk);
 
         skipdisk:
             list = list->next;
@@ -761,11 +759,10 @@ xenParseXLDisk(virConf *conf, virDomainDef *def)
  cleanup:
     virDomainDiskDefFree(disk);
     xlu_cfg_destroy(xluconf);
-    VIR_FREE(libxldisk);
     return ret;
 
  fail:
-    libxl_device_disk_dispose(libxldisk);
+    libxl_device_disk_dispose(&libxldisk);
     goto cleanup;
 }