mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-21 20:15:17 +00:00
conf: correct false boot order error during domain parse
virDomainDefCollectBootOrder() is called for every item on the list for each type of device. One of the checks it makes is to gather the order attributes from the <boot> element of all devices, and assure that no two devices have been given the same order. Since (internally to libvirt, *not* in the domain XML) an <interface type='hostdev'> is on both the list of hostdev devices and the list of network devices, it will be counted twice, and the code that checks for multiple devices with the same boot order will give a false positive. To remedy this, we make sure to return early for hostdev devices that have a parent.type != NONE. This was introduced in commit 5b75a4, which was first in libvirt-4.4.0. Resolves: https://bugzilla.redhat.com/1601318 Signed-off-by: Laine Stump <laine@laine.org> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
36504033ae
commit
7ea7342996
@ -5016,6 +5016,14 @@ virDomainDefCollectBootOrder(virDomainDefPtr def ATTRIBUTE_UNUSED,
|
||||
if (info->bootIndex == 0)
|
||||
return 0;
|
||||
|
||||
if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV &&
|
||||
dev->data.hostdev->parent.type != VIR_DOMAIN_DEVICE_NONE) {
|
||||
/* This hostdev is a child of a higher level device
|
||||
* (e.g. interface), and thus already being counted on the
|
||||
* list for the other device type.
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
if (virAsprintf(&order, "%u", info->bootIndex) < 0)
|
||||
goto cleanup;
|
||||
|
||||
|
27
tests/qemuxml2argvdata/net-hostdev-bootorder.args
Normal file
27
tests/qemuxml2argvdata/net-hostdev-bootorder.args
Normal file
@ -0,0 +1,27 @@
|
||||
LC_ALL=C \
|
||||
PATH=/bin \
|
||||
HOME=/home/test \
|
||||
USER=test \
|
||||
LOGNAME=test \
|
||||
QEMU_AUDIO_DRV=none \
|
||||
/usr/bin/qemu-system-i686 \
|
||||
-name QEMUGuest1 \
|
||||
-S \
|
||||
-machine pc,accel=tcg,usb=off,dump-guest-core=off \
|
||||
-m 214 \
|
||||
-smp 1,sockets=1,cores=1,threads=1 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
-nodefaults \
|
||||
-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\
|
||||
server,nowait \
|
||||
-mon chardev=charmonitor,id=monitor,mode=control \
|
||||
-rtc base=utc \
|
||||
-no-shutdown \
|
||||
-no-acpi \
|
||||
-usb \
|
||||
-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
|
||||
-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,\
|
||||
bootindex=2 \
|
||||
-device pci-assign,host=03:07.1,id=hostdev0,bootindex=1,bus=pci.0,addr=0x3
|
36
tests/qemuxml2argvdata/net-hostdev-bootorder.xml
Normal file
36
tests/qemuxml2argvdata/net-hostdev-bootorder.xml
Normal file
@ -0,0 +1,36 @@
|
||||
<domain type='qemu'>
|
||||
<name>QEMUGuest1</name>
|
||||
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||
<memory unit='KiB'>219136</memory>
|
||||
<currentMemory unit='KiB'>219136</currentMemory>
|
||||
<vcpu placement='static'>1</vcpu>
|
||||
<os>
|
||||
<type arch='i686' machine='pc'>hvm</type>
|
||||
</os>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
<on_reboot>restart</on_reboot>
|
||||
<on_crash>destroy</on_crash>
|
||||
<devices>
|
||||
<emulator>/usr/bin/qemu-system-i686</emulator>
|
||||
<disk type='block' device='disk'>
|
||||
<source dev='/dev/HostVG/QEMUGuest1'/>
|
||||
<target dev='hda' bus='ide'/>
|
||||
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
|
||||
<boot order='2'/>
|
||||
</disk>
|
||||
<controller type='usb' index='0'/>
|
||||
<controller type='ide' index='0'/>
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<interface type='hostdev' managed='yes'>
|
||||
<mac address='00:11:22:33:44:55'/>
|
||||
<source>
|
||||
<address type='pci' domain='0x0000' bus='0x03' slot='0x07' function='0x1'/>
|
||||
</source>
|
||||
<boot order='1'/>
|
||||
</interface>
|
||||
<input type='mouse' bus='ps2'/>
|
||||
<input type='keyboard' bus='ps2'/>
|
||||
<memballoon model='none'/>
|
||||
</devices>
|
||||
</domain>
|
@ -1376,6 +1376,7 @@ mymain(void)
|
||||
DO_TEST("net-mcast", NONE);
|
||||
DO_TEST("net-udp", NONE);
|
||||
DO_TEST("net-hostdev", NONE);
|
||||
DO_TEST("net-hostdev-bootorder", NONE);
|
||||
DO_TEST("net-hostdev-multidomain", NONE);
|
||||
DO_TEST("net-hostdev-vfio",
|
||||
QEMU_CAPS_DEVICE_VFIO_PCI);
|
||||
|
42
tests/qemuxml2xmloutdata/net-hostdev-bootorder.xml
Normal file
42
tests/qemuxml2xmloutdata/net-hostdev-bootorder.xml
Normal file
@ -0,0 +1,42 @@
|
||||
<domain type='qemu'>
|
||||
<name>QEMUGuest1</name>
|
||||
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||
<memory unit='KiB'>219136</memory>
|
||||
<currentMemory unit='KiB'>219136</currentMemory>
|
||||
<vcpu placement='static'>1</vcpu>
|
||||
<os>
|
||||
<type arch='i686' machine='pc'>hvm</type>
|
||||
</os>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
<on_reboot>restart</on_reboot>
|
||||
<on_crash>destroy</on_crash>
|
||||
<devices>
|
||||
<emulator>/usr/bin/qemu-system-i686</emulator>
|
||||
<disk type='block' device='disk'>
|
||||
<driver name='qemu' type='raw'/>
|
||||
<source dev='/dev/HostVG/QEMUGuest1'/>
|
||||
<target dev='hda' bus='ide'/>
|
||||
<boot order='2'/>
|
||||
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
|
||||
</disk>
|
||||
<controller type='usb' index='0'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
|
||||
</controller>
|
||||
<controller type='ide' index='0'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
|
||||
</controller>
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<interface type='hostdev' managed='yes'>
|
||||
<mac address='00:11:22:33:44:55'/>
|
||||
<source>
|
||||
<address type='pci' domain='0x0000' bus='0x03' slot='0x07' function='0x1'/>
|
||||
</source>
|
||||
<boot order='1'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
|
||||
</interface>
|
||||
<input type='mouse' bus='ps2'/>
|
||||
<input type='keyboard' bus='ps2'/>
|
||||
<memballoon model='none'/>
|
||||
</devices>
|
||||
</domain>
|
@ -433,6 +433,7 @@ mymain(void)
|
||||
DO_TEST("net-virtio-network-portgroup", NONE);
|
||||
DO_TEST("net-virtio-rxtxqueuesize", NONE);
|
||||
DO_TEST("net-hostdev", NONE);
|
||||
DO_TEST("net-hostdev-bootorder", NONE);
|
||||
DO_TEST("net-hostdev-vfio", NONE);
|
||||
DO_TEST("net-midonet", NONE);
|
||||
DO_TEST("net-openvswitch", NONE);
|
||||
|
Loading…
x
Reference in New Issue
Block a user