conf: Don't allow duplicated target names regardless of bus

https://bugzilla.redhat.com/show_bug.cgi?id=1142631

Commit id 'e0e290552' added a check to determine if the same bus
had the same target value.  It seems that's not quite good enough
as the check should check the target name value regardless of bus type.

Also added a DO_TEST_DIFFERENT to exhibit the issue
This commit is contained in:
John Ferlan 2015-06-18 16:00:53 -04:00
parent b563787192
commit 2e09729b1c
3 changed files with 39 additions and 2 deletions

View File

@ -12658,8 +12658,7 @@ virDomainDiskDefDstDuplicates(virDomainDefPtr def)
for (i = 1; i < def->ndisks; i++) {
for (j = 0; j < i; j++) {
if (def->disks[i]->bus == def->disks[j]->bus &&
STREQ(def->disks[i]->dst, def->disks[j]->dst)) {
if (STREQ(def->disks[i]->dst, def->disks[j]->dst)) {
virReportError(VIR_ERR_XML_ERROR,
_("target '%s' duplicated for disk sources "
"'%s' and '%s'"),

View File

@ -0,0 +1,35 @@
<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>
<boot dev='hd'/>
</os>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<devices>
<emulator>/usr/bin/qemu</emulator>
<disk type='block' device='disk'>
<source dev='/dev/HostVG/QEMUGuest1'/>
<target dev='hda' bus='ide'/>
</disk>
<disk type='file' device='disk'>
<source file='/tmp/usbdisk.img'/>
<target dev='sda' bus='usb'/>
</disk>
<disk type='file' device='disk'>
<source file='/tmp/idedisk.img'/>
<target dev='sda' bus='ide'/>
</disk>
<disk type='file' device='disk'>
<source file='/tmp/scsidisk.img'/>
<target dev='sda' bus='scsi'/>
</disk>
<memballoon model='virtio'/>
</devices>
</domain>

View File

@ -903,6 +903,9 @@ mymain(void)
QEMU_CAPS_DEVICE);
DO_TEST("disk-snapshot",
QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_CACHE_V2, QEMU_CAPS_DRIVE_FORMAT);
DO_TEST_FAILURE("disk-same-targets",
QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_SCSI_LSI,
QEMU_CAPS_DEVICE_USB_STORAGE, QEMU_CAPS_NODEFCONFIG);
DO_TEST("event_idx",
QEMU_CAPS_DRIVE,
QEMU_CAPS_VIRTIO_BLK_EVENT_IDX,