1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-01-12 13:17:58 +03:00

libxl: Allocate @libxldisk in xenParseXLDisk() on stack

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>
This commit is contained in:
Michal Privoznik 2022-01-14 09:51:39 +01:00
parent 5a1bdcfbf0
commit 2645c66a6c

View 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;
}