mirror of
https://github.com/libvirt/libvirt.git
synced 2025-01-08 07:03:19 -06:00
conf: net: Correctly switch how to format address fields
When formatting the forward mode addresses or interfaces the switch was done based on the type of the network rather than of the type of the individual <interface>/<address> element. In case a user would specify an incorrect network type ("passhtrough") with <address> elements, libvirtd would crash as it would attempt to format an <interface>. Use the type of the individual element to format the XML. Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1132347
This commit is contained in:
parent
b2e87c3628
commit
4cf1c3fab1
@ -2731,7 +2731,7 @@ virNetworkDefFormatBuf(virBufferPtr buf,
|
||||
if (def->forward.nifs &&
|
||||
(!def->forward.npfs || !(flags & VIR_NETWORK_XML_INACTIVE))) {
|
||||
for (i = 0; i < def->forward.nifs; i++) {
|
||||
if (def->forward.type != VIR_NETWORK_FORWARD_HOSTDEV) {
|
||||
if (def->forward.ifs[i].type == VIR_NETWORK_FORWARD_HOSTDEV_DEVICE_NETDEV) {
|
||||
virBufferEscapeString(buf, "<interface dev='%s'",
|
||||
def->forward.ifs[i].device.dev);
|
||||
if (!(flags & VIR_NETWORK_XML_INACTIVE) &&
|
||||
@ -2740,8 +2740,7 @@ virNetworkDefFormatBuf(virBufferPtr buf,
|
||||
def->forward.ifs[i].connections);
|
||||
}
|
||||
virBufferAddLit(buf, "/>\n");
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
if (def->forward.ifs[i].type == VIR_NETWORK_FORWARD_HOSTDEV_DEVICE_PCI) {
|
||||
if (virDevicePCIAddressFormat(buf,
|
||||
def->forward.ifs[i].device.pci,
|
||||
|
7
tests/networkxml2xmlin/passthrough-address-crash.xml
Normal file
7
tests/networkxml2xmlin/passthrough-address-crash.xml
Normal file
@ -0,0 +1,7 @@
|
||||
<network>
|
||||
<name>passthrough_001</name>
|
||||
<uuid>50e92386-8dd1-4a95-8a4b-9a888274eb66</uuid>
|
||||
<forward mode='passthrough'>
|
||||
<address type='pci' domain='0x0000' bus='0x11' slot='0x10' function='0x1'/>
|
||||
</forward>
|
||||
</network>
|
7
tests/networkxml2xmlout/passthrough-address-crash.xml
Normal file
7
tests/networkxml2xmlout/passthrough-address-crash.xml
Normal file
@ -0,0 +1,7 @@
|
||||
<network>
|
||||
<name>passthrough_001</name>
|
||||
<uuid>50e92386-8dd1-4a95-8a4b-9a888274eb66</uuid>
|
||||
<forward mode='passthrough'>
|
||||
<address type='pci' domain='0x0000' bus='0x11' slot='0x10' function='0x1'/>
|
||||
</forward>
|
||||
</network>
|
@ -119,6 +119,7 @@ mymain(void)
|
||||
DO_TEST_FULL("passthrough-pf", VIR_NETWORK_XML_INACTIVE);
|
||||
DO_TEST("hostdev");
|
||||
DO_TEST_FULL("hostdev-pf", VIR_NETWORK_XML_INACTIVE);
|
||||
DO_TEST("passthrough-address-crash");
|
||||
|
||||
return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user