diff --git a/src/conf/node_device_conf.c b/src/conf/node_device_conf.c index 9e75f6f3a2..77dcd16359 100644 --- a/src/conf/node_device_conf.c +++ b/src/conf/node_device_conf.c @@ -277,25 +277,27 @@ virNodeDeviceCapPCIDefFormat(virBufferPtr buf, virPCIHeaderTypeToString(data->pci_dev.hdrType)); } if (data->pci_dev.flags & VIR_NODE_DEV_CAP_FLAG_PCI_MDEV) { - virBufferAddLit(buf, "\n"); - virBufferAdjustIndent(buf, 2); - for (i = 0; i < data->pci_dev.nmdev_types; i++) { - virMediatedDeviceTypePtr type = data->pci_dev.mdev_types[i]; - virBufferEscapeString(buf, "\n", type->id); + if (data->pci_dev.nmdev_types > 0) { + virBufferAddLit(buf, "\n"); virBufferAdjustIndent(buf, 2); - if (type->name) - virBufferEscapeString(buf, "%s\n", - type->name); - virBufferEscapeString(buf, "%s\n", - type->device_api); - virBufferAsprintf(buf, - "%u\n", - type->available_instances); + for (i = 0; i < data->pci_dev.nmdev_types; i++) { + virMediatedDeviceTypePtr type = data->pci_dev.mdev_types[i]; + virBufferEscapeString(buf, "\n", type->id); + virBufferAdjustIndent(buf, 2); + if (type->name) + virBufferEscapeString(buf, "%s\n", + type->name); + virBufferEscapeString(buf, "%s\n", + type->device_api); + virBufferAsprintf(buf, + "%u\n", + type->available_instances); + virBufferAdjustIndent(buf, -2); + virBufferAddLit(buf, "\n"); + } virBufferAdjustIndent(buf, -2); - virBufferAddLit(buf, "\n"); + virBufferAddLit(buf, "\n"); } - virBufferAdjustIndent(buf, -2); - virBufferAddLit(buf, "\n"); } if (data->pci_dev.nIommuGroupDevices) { virBufferAsprintf(buf, "\n", @@ -1531,6 +1533,12 @@ virNodeDevPCICapMdevTypesParseXML(xmlXPathContextPtr ctxt, if ((nmdev_types = virXPathNodeSet("./type", ctxt, &nodes)) < 0) goto cleanup; + if (nmdev_types == 0) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("missing element in element")); + goto cleanup; + } + orignode = ctxt->node; for (i = 0; i < nmdev_types; i++) { ctxt->node = nodes[i];