From: Michal Privoznik Date: Sat, 13 Jul 2019 07:17:06 +0000 (+0200) Subject: qemu: Relax os.loader->type check when validating domain X-Git-Tag: v5.6.0-rc1~215 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7711a7346a990810603c0715d3c6ba922eb88c51;p=thirdparty%2Flibvirt.git qemu: Relax os.loader->type check when validating domain When validating a domain among all the checks there are two that concern VIR_DOMAIN_LOADER_TYPE_PFLASH specifically. The first check ensures that on x86 ACPI is enabled when UEFI is requested, the second ensures that UEFI is used when ACPI is requested on aarch64. However, check for UEFI is done by plain comparison of def->os.loader->type which is insufficient because we have def->os.firmware too. NB, this wouldn't be a problem for active domain, because on startup process def->os.loader->type gets filled by qemuFirmwareEnableFeatures(), but that's not the case for inactive domains. Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1729604 Signed-off-by: Michal Privoznik Reviewed-by: Andrea Bolognani --- diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 00ac5e1307..670b928c4c 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -4221,8 +4221,9 @@ qemuDomainDefValidate(const virDomainDef *def, } /* On x86, UEFI requires ACPI */ - if (def->os.loader && - def->os.loader->type == VIR_DOMAIN_LOADER_TYPE_PFLASH && + if ((def->os.firmware == VIR_DOMAIN_OS_DEF_FIRMWARE_EFI || + (def->os.loader && + def->os.loader->type == VIR_DOMAIN_LOADER_TYPE_PFLASH)) && ARCH_IS_X86(def->os.arch) && def->features[VIR_DOMAIN_FEATURE_ACPI] != VIR_TRISTATE_SWITCH_ON) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", @@ -4233,8 +4234,9 @@ qemuDomainDefValidate(const virDomainDef *def, /* On aarch64, ACPI requires UEFI */ if (def->features[VIR_DOMAIN_FEATURE_ACPI] == VIR_TRISTATE_SWITCH_ON && def->os.arch == VIR_ARCH_AARCH64 && - (!def->os.loader || - def->os.loader->type != VIR_DOMAIN_LOADER_TYPE_PFLASH)) { + (def->os.firmware != VIR_DOMAIN_OS_DEF_FIRMWARE_EFI && + (!def->os.loader || + def->os.loader->type != VIR_DOMAIN_LOADER_TYPE_PFLASH))) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("ACPI requires UEFI on this architecture")); goto cleanup; diff --git a/tests/qemuxml2argvdata/aarch64-os-firmware-efi.aarch64-latest.args b/tests/qemuxml2argvdata/aarch64-os-firmware-efi.aarch64-latest.args index 9821e28358..3914b6bf6e 100644 --- a/tests/qemuxml2argvdata/aarch64-os-firmware-efi.aarch64-latest.args +++ b/tests/qemuxml2argvdata/aarch64-os-firmware-efi.aarch64-latest.args @@ -29,7 +29,6 @@ format=raw,unit=1 \ -mon chardev=charmonitor,id=monitor,mode=control \ -rtc base=utc \ -no-shutdown \ --no-acpi \ -boot strict=on \ -kernel /aarch64.kernel \ -initrd /aarch64.initrd \ diff --git a/tests/qemuxml2argvdata/aarch64-os-firmware-efi.xml b/tests/qemuxml2argvdata/aarch64-os-firmware-efi.xml index c3e25f3052..48605f7198 100644 --- a/tests/qemuxml2argvdata/aarch64-os-firmware-efi.xml +++ b/tests/qemuxml2argvdata/aarch64-os-firmware-efi.xml @@ -13,6 +13,7 @@ + diff --git a/tests/qemuxml2xmloutdata/aarch64-os-firmware-efi.aarch64-latest.xml b/tests/qemuxml2xmloutdata/aarch64-os-firmware-efi.aarch64-latest.xml index 529ce6f3c2..1e51d55305 100644 --- a/tests/qemuxml2xmloutdata/aarch64-os-firmware-efi.aarch64-latest.xml +++ b/tests/qemuxml2xmloutdata/aarch64-os-firmware-efi.aarch64-latest.xml @@ -13,6 +13,7 @@ +