diff --git a/src/conf/node_device_conf.c b/src/conf/node_device_conf.c index b244a1f0c8..78bc63f13d 100644 --- a/src/conf/node_device_conf.c +++ b/src/conf/node_device_conf.c @@ -1291,7 +1291,7 @@ virNodeDevCapPCIDevParseXML(xmlXPathContextPtr ctxt, ret = 0; out: - VIR_FREE(pci_express); + virPCIEDeviceInfoFree(pci_express); ctxt->node = orignode; return ret; } @@ -1664,6 +1664,7 @@ void virNodeDevCapsDefFree(virNodeDevCapsDefPtr caps) VIR_FREE(data->pci_dev.iommuGroupDevices[i]); } VIR_FREE(data->pci_dev.iommuGroupDevices); + virPCIEDeviceInfoFree(data->pci_dev.pci_express); break; case VIR_NODE_DEV_CAP_USB_DEV: VIR_FREE(data->usb_dev.product_name); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index b1fb7c9443..cafe86689d 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1753,6 +1753,7 @@ virPCIDeviceSetUnbindFromStub; virPCIDeviceSetUsedBy; virPCIDeviceUnbind; virPCIDeviceWaitForCleanup; +virPCIEDeviceInfoFree; virPCIGetNetName; virPCIGetPhysicalFunction; virPCIGetVirtualFunctionIndex; diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c index 28d2953e66..0fe474d4e3 100644 --- a/src/node_device/node_device_udev.c +++ b/src/node_device/node_device_udev.c @@ -570,7 +570,7 @@ static int udevProcessPCI(struct udev_device *device, out: virPCIDeviceFree(pciDev); - VIR_FREE(pci_express); + virPCIEDeviceInfoFree(pci_express); return ret; } diff --git a/src/util/virpci.c b/src/util/virpci.c index b7400e994f..0098d6c472 100644 --- a/src/util/virpci.c +++ b/src/util/virpci.c @@ -2847,3 +2847,15 @@ virPCIDeviceGetLinkCapSta(virPCIDevicePtr dev, virPCIDeviceConfigClose(dev, fd); return ret; } + + +void +virPCIEDeviceInfoFree(virPCIEDeviceInfoPtr dev) +{ + if (!dev) + return; + + VIR_FREE(dev->link_cap); + VIR_FREE(dev->link_sta); + VIR_FREE(dev); +} diff --git a/src/util/virpci.h b/src/util/virpci.h index 3d274878e1..1ce9821e00 100644 --- a/src/util/virpci.h +++ b/src/util/virpci.h @@ -212,4 +212,7 @@ int virPCIDeviceGetLinkCapSta(virPCIDevicePtr dev, unsigned int *cap_width, unsigned int *sta_speed, unsigned int *sta_width); + +void virPCIEDeviceInfoFree(virPCIEDeviceInfoPtr dev); + #endif /* __VIR_PCI_H__ */