From 3ef9b51b10e52886e8fe8d75e36d0714957616b7 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Daniel=20P=2E=20Berrang=C3=A9?= Date: Mon, 7 Feb 2022 12:10:28 +0000 Subject: [PATCH] qemu: fix formatting of pflash readonly attribute MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit When the had an explicit readonly='no' attribute we accidentally still marked the plfash as readonly due to the bad conversion from virTristateBool to bool. This was missed because the test cases run with no capabilities set and thus are validated the -drive approach for pflash configuration, not the -blockdev approach. This affected the following config: /var/lib/libvirt/qemu/nvram/test-bios.fd for the sake of completeness, we also add a test XML config with no readonly attribute at all, to demonstrate that the default for pflash is intended to be r/w. Reviewed-by: Ján Tomko Signed-off-by: Daniel P. Berrangé --- src/qemu/qemu_domain.c | 3 +- .../bios-nvram-rw-implicit.x86_64-latest.args | 39 +++++++++++++++++++ .../bios-nvram-rw-implicit.xml | 35 +++++++++++++++++ .../bios-nvram-rw.x86_64-latest.args | 39 +++++++++++++++++++ tests/qemuxml2argvdata/bios-nvram-rw.xml | 35 +++++++++++++++++ tests/qemuxml2argvtest.c | 2 + 6 files changed, 152 insertions(+), 1 deletion(-) create mode 100644 tests/qemuxml2argvdata/bios-nvram-rw-implicit.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/bios-nvram-rw-implicit.xml create mode 100644 tests/qemuxml2argvdata/bios-nvram-rw.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/bios-nvram-rw.xml diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index dd8bb65d72..c764f6296c 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -11103,7 +11103,8 @@ qemuDomainInitializePflashStorageSource(virDomainObj *vm) pflash0->type = VIR_STORAGE_TYPE_FILE; pflash0->format = VIR_STORAGE_FILE_RAW; pflash0->path = g_strdup(def->os.loader->path); - pflash0->readonly = def->os.loader->readonly; + pflash0->readonly = false; + virTristateBoolToBool(def->os.loader->readonly, &pflash0->readonly); pflash0->nodeformat = g_strdup("libvirt-pflash0-format"); pflash0->nodestorage = g_strdup("libvirt-pflash0-storage"); diff --git a/tests/qemuxml2argvdata/bios-nvram-rw-implicit.x86_64-latest.args b/tests/qemuxml2argvdata/bios-nvram-rw-implicit.x86_64-latest.args new file mode 100644 index 0000000000..fde4c3f57f --- /dev/null +++ b/tests/qemuxml2argvdata/bios-nvram-rw-implicit.x86_64-latest.args @@ -0,0 +1,39 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/tmp/lib/domain--1-test-bios \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/tmp/lib/domain--1-test-bios/.local/share \ +XDG_CACHE_HOME=/tmp/lib/domain--1-test-bios/.cache \ +XDG_CONFIG_HOME=/tmp/lib/domain--1-test-bios/.config \ +/usr/bin/qemu-system-x86_64 \ +-name guest=test-bios,debug-threads=on \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/tmp/lib/domain--1-test-bios/master-key.aes"}' \ +-blockdev '{"driver":"file","filename":"/var/lib/libvirt/qemu/nvram/test-bios.fd","node-name":"libvirt-pflash0-storage","auto-read-only":true,"discard":"unmap"}' \ +-blockdev '{"node-name":"libvirt-pflash0-format","read-only":false,"driver":"raw","file":"libvirt-pflash0-storage"}' \ +-machine pc,usb=off,dump-guest-core=off,pflash0=libvirt-pflash0-format,memory-backend=pc.ram \ +-accel tcg \ +-cpu qemu64 \ +-m 1024 \ +-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":1073741824}' \ +-overcommit mem-lock=off \ +-smp 1,sockets=1,cores=1,threads=1 \ +-uuid 362d1fc1-df7d-193e-5c18-49a71bd1da66 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot menu=on,strict=on \ +-device '{"driver":"piix3-usb-uhci","id":"usb","bus":"pci.0","addr":"0x1.0x2"}' \ +-blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \ +-blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \ +-device '{"driver":"ide-hd","bus":"ide.0","unit":0,"drive":"libvirt-1-format","id":"ide0-0-0","bootindex":1}' \ +-device '{"driver":"usb-tablet","id":"input0","bus":"usb.0","port":"1"}' \ +-audiodev '{"id":"audio1","driver":"none"}' \ +-device '{"driver":"virtio-balloon-pci","id":"balloon0","bus":"pci.0","addr":"0x2"}' \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxml2argvdata/bios-nvram-rw-implicit.xml b/tests/qemuxml2argvdata/bios-nvram-rw-implicit.xml new file mode 100644 index 0000000000..ebcd3e5300 --- /dev/null +++ b/tests/qemuxml2argvdata/bios-nvram-rw-implicit.xml @@ -0,0 +1,35 @@ + + test-bios + 362d1fc1-df7d-193e-5c18-49a71bd1da66 + 1048576 + 1048576 + 1 + + hvm + /var/lib/libvirt/qemu/nvram/test-bios.fd + + + + + + + + destroy + restart + restart + + /usr/bin/qemu-system-x86_64 + + + +
+ + + + + + + + + + diff --git a/tests/qemuxml2argvdata/bios-nvram-rw.x86_64-latest.args b/tests/qemuxml2argvdata/bios-nvram-rw.x86_64-latest.args new file mode 100644 index 0000000000..fde4c3f57f --- /dev/null +++ b/tests/qemuxml2argvdata/bios-nvram-rw.x86_64-latest.args @@ -0,0 +1,39 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/tmp/lib/domain--1-test-bios \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/tmp/lib/domain--1-test-bios/.local/share \ +XDG_CACHE_HOME=/tmp/lib/domain--1-test-bios/.cache \ +XDG_CONFIG_HOME=/tmp/lib/domain--1-test-bios/.config \ +/usr/bin/qemu-system-x86_64 \ +-name guest=test-bios,debug-threads=on \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/tmp/lib/domain--1-test-bios/master-key.aes"}' \ +-blockdev '{"driver":"file","filename":"/var/lib/libvirt/qemu/nvram/test-bios.fd","node-name":"libvirt-pflash0-storage","auto-read-only":true,"discard":"unmap"}' \ +-blockdev '{"node-name":"libvirt-pflash0-format","read-only":false,"driver":"raw","file":"libvirt-pflash0-storage"}' \ +-machine pc,usb=off,dump-guest-core=off,pflash0=libvirt-pflash0-format,memory-backend=pc.ram \ +-accel tcg \ +-cpu qemu64 \ +-m 1024 \ +-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":1073741824}' \ +-overcommit mem-lock=off \ +-smp 1,sockets=1,cores=1,threads=1 \ +-uuid 362d1fc1-df7d-193e-5c18-49a71bd1da66 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot menu=on,strict=on \ +-device '{"driver":"piix3-usb-uhci","id":"usb","bus":"pci.0","addr":"0x1.0x2"}' \ +-blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \ +-blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \ +-device '{"driver":"ide-hd","bus":"ide.0","unit":0,"drive":"libvirt-1-format","id":"ide0-0-0","bootindex":1}' \ +-device '{"driver":"usb-tablet","id":"input0","bus":"usb.0","port":"1"}' \ +-audiodev '{"id":"audio1","driver":"none"}' \ +-device '{"driver":"virtio-balloon-pci","id":"balloon0","bus":"pci.0","addr":"0x2"}' \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxml2argvdata/bios-nvram-rw.xml b/tests/qemuxml2argvdata/bios-nvram-rw.xml new file mode 100644 index 0000000000..b03b4b5ecb --- /dev/null +++ b/tests/qemuxml2argvdata/bios-nvram-rw.xml @@ -0,0 +1,35 @@ + + test-bios + 362d1fc1-df7d-193e-5c18-49a71bd1da66 + 1048576 + 1048576 + 1 + + hvm + /var/lib/libvirt/qemu/nvram/test-bios.fd + + + + + + + + destroy + restart + restart + + /usr/bin/qemu-system-x86_64 + + + +
+ + + + + + + + + + diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index b9d8885912..6cf35a0ebf 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -1267,6 +1267,8 @@ mymain(void) DO_TEST("bios", QEMU_CAPS_DEVICE_ISA_SERIAL); DO_TEST_NOCAPS("bios-nvram"); + DO_TEST_CAPS_LATEST("bios-nvram-rw"); + DO_TEST_CAPS_LATEST("bios-nvram-rw-implicit"); DO_TEST("bios-nvram-secure", QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_DEVICE_PCI_BRIDGE, -- 2.47.2