[libvirt PATCH 05/10] tests: don't permit NVRAM path when using firmware auto-select
Michal Prívozník
mprivozn at redhat.com
Wed Feb 16 13:17:56 UTC 2022
On 2/15/22 19:54, Daniel P. Berrangé wrote:
> When using <os firmware='...'/> we still parse the <nvram> path,
> but completely ignore it, replacing any user provided content with
> a custom generated path. This makes sense since when undefining the
> guest, the code to cleanup NVRAM also uses the same generated path.
>
> Instead of silently ignoring user config, we should report an
> explicit error message. This shows that some of our tests had the
> bogus config scenario present.
>
> Signed-off-by: Daniel P. Berrangé <berrange at redhat.com>
> ---
> src/conf/domain_conf.c | 8 +++
> tests/qemuxml2argvdata/os-firmware-bios.xml | 1 -
> .../os-firmware-efi-bad-nvram-path.err | 1 +
> .../os-firmware-efi-bad-nvram-path.xml | 68 +++++++++++++++++++
> .../os-firmware-efi-secboot.xml | 1 -
> tests/qemuxml2argvdata/os-firmware-efi.xml | 1 -
> tests/qemuxml2argvtest.c | 1 +
> .../os-firmware-bios.x86_64-latest.xml | 1 -
> .../os-firmware-efi-secboot.x86_64-latest.xml | 1 -
> .../os-firmware-efi.x86_64-latest.xml | 1 -
> 10 files changed, 78 insertions(+), 6 deletions(-)
> create mode 100644 tests/qemuxml2argvdata/os-firmware-efi-bad-nvram-path.err
> create mode 100644 tests/qemuxml2argvdata/os-firmware-efi-bad-nvram-path.xml
>
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index 31b49c4ec9..946a80c239 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -4827,6 +4827,14 @@ virDomainDefPostParseOs(virDomainDef *def)
> return -1;
> }
>
> + if (def->os.firmware != VIR_DOMAIN_OS_DEF_FIRMWARE_NONE) {
> + if (def->os.loader->nvram) {
> + virReportError(VIR_ERR_XML_ERROR, "%s",
> + _("NVRAM path is not permitted with firmware attribute"));
> + return -1;
> + }
> + }
> +
> return 0;
Again, virDomainDefOSValidate(), ...
> }
>
> diff --git a/tests/qemuxml2argvdata/os-firmware-bios.xml b/tests/qemuxml2argvdata/os-firmware-bios.xml
> index 63886666dd..d89fcb6c58 100644
> --- a/tests/qemuxml2argvdata/os-firmware-bios.xml
> +++ b/tests/qemuxml2argvdata/os-firmware-bios.xml
> @@ -7,7 +7,6 @@
> <os firmware='bios'>
> <type arch='x86_64' machine='pc-q35-4.0'>hvm</type>
> <loader secure='no'/>
> - <nvram>/var/lib/libvirt/qemu/nvram/fedora_VARS.fd</nvram>
> <boot dev='hd'/>
> <bootmenu enable='yes'/>
> </os>
> diff --git a/tests/qemuxml2argvdata/os-firmware-efi-bad-nvram-path.err b/tests/qemuxml2argvdata/os-firmware-efi-bad-nvram-path.err
> new file mode 100644
> index 0000000000..2ba8135ad4
> --- /dev/null
> +++ b/tests/qemuxml2argvdata/os-firmware-efi-bad-nvram-path.err
> @@ -0,0 +1 @@
> +XML error: NVRAM path is not permitted with firmware attribute
... which will have unfortunate result that this error message will look
different, because one of earlier validators reports an error.
> diff --git a/tests/qemuxml2argvdata/os-firmware-efi-bad-nvram-path.xml b/tests/qemuxml2argvdata/os-firmware-efi-bad-nvram-path.xml
> new file mode 100644
> index 0000000000..a4afdb6d0b
> --- /dev/null
> +++ b/tests/qemuxml2argvdata/os-firmware-efi-bad-nvram-path.xml
> @@ -0,0 +1,68 @@
> +<domain type='kvm'>
> + <name>fedora</name>
> + <uuid>63840878-0deb-4095-97e6-fc444d9bc9fa</uuid>
> + <memory unit='KiB'>8192</memory>
> + <currentMemory unit='KiB'>8192</currentMemory>
> + <vcpu placement='static'>1</vcpu>
> + <os firmware='efi'>
> + <type arch='x86_64' machine='pc-q35-4.0'>hvm</type>
> + <loader secure='no'/>
> + <nvram>/some/path</nvram>
> + <boot dev='hd'/>
> + <bootmenu enable='yes'/>
> + </os>
> + <features>
> + <acpi/>
> + <apic/>
> + <pae/>
> + </features>
> + <clock offset='utc'/>
> + <on_poweroff>destroy</on_poweroff>
> + <on_reboot>restart</on_reboot>
> + <on_crash>restart</on_crash>
> + <pm>
> + <suspend-to-mem enabled='yes'/>
> + <suspend-to-disk enabled='no'/>
> + </pm>
> + <devices>
> + <emulator>/usr/bin/qemu-system-x86_64</emulator>
> + <controller type='usb' index='0' model='ich9-ehci1'>
> + <address type='pci' domain='0x0000' bus='0x00' slot='0x1d' function='0x7'/>
> + </controller>
> + <controller type='usb' index='0' model='ich9-uhci1'>
> + <master startport='0'/>
> + <address type='pci' domain='0x0000' bus='0x00' slot='0x1d' function='0x0' multifunction='on'/>
> + </controller>
> + <controller type='usb' index='0' model='ich9-uhci2'>
> + <master startport='2'/>
> + <address type='pci' domain='0x0000' bus='0x00' slot='0x1d' function='0x1'/>
> + </controller>
> + <controller type='usb' index='0' model='ich9-uhci3'>
> + <master startport='4'/>
> + <address type='pci' domain='0x0000' bus='0x00' slot='0x1d' function='0x2'/>
> + </controller>
> + <controller type='sata' index='0'>
> + <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
> + </controller>
> + <controller type='pci' index='0' model='pcie-root'/>
> + <controller type='pci' index='1' model='dmi-to-pci-bridge'>
> + <model name='i82801b11-bridge'/>
> + <address type='pci' domain='0x0000' bus='0x00' slot='0x1e' function='0x0'/>
> + </controller>
> + <controller type='pci' index='2' model='pci-bridge'>
> + <model name='pci-bridge'/>
> + <target chassisNr='2'/>
> + <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
> + </controller>
> + <controller type='pci' index='3' model='pcie-root-port'>
> + <model name='ioh3420'/>
> + <target chassis='3' port='0x8'/>
> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
> + </controller>
> + <input type='mouse' bus='ps2'/>
> + <input type='keyboard' bus='ps2'/>
> + <memballoon model='virtio'>
> + <address type='pci' domain='0x0000' bus='0x02' slot='0x01' function='0x0'/>
> + </memballoon>
Nit pick, I've gotten so far that machine type is plain 'q35' and
removed all these devices. They are not needed since this test is bound
to fail anyway.
> + </devices>
> +</domain>
Michal
More information about the libvir-list
mailing list