** Description changed:
- It was reported that libvirt 1.3.1 running on Trusty (through
- UCA/Mitaka) is getting OOM'ed after a while - in our reports took 2
- years for the leak to trigger an out-of-memory situation, but this may
- change according to the user available memory.
+ [Impact]
+ * There's a long-term memory leak in libvirt related to the PCI information
gathering from sysfs in Linux, specially related with SR-IOV devices. This was
fixed by commit 38816336 ("node_device_conf: Don't leak @physical_function in
virNodeDeviceGetPCISRIOVCaps") [
libvirt.org/git/?p=libvirt.git;a=commit;h=38816336 ].
- Valgrind was executed in a similar environment, we were able to collect
- information about the "definitely lost" memory of libvirt process
- (attached) below.
+ * In comment #9 there is a detailed explanation of what's going on, but
+ the summary is that the variable physical_function (member of a PCI
+ structure), of type _virPCIDeviceAddress, is allocated on
+ virPCIGetDeviceAddressFromSysfsLink() and should be freed before reuse
+ in virNodeDeviceGetPCISRIOVCaps(), but it wasn't before the fix was
+ introduced.
- The leaks are detailed in next comments.
+ * The impact of the issue is a memory leak usually small but that may
+ grow bigger depending on the amount of PCI devices and how/when they are
+ enumerated by libvirt; if some user of those functions are actively
+ exercising the leak path it may become a problem (OOM situation).
+
+ [Test Case]
+ * The basic testing done to exercise the memory leak path was running the
virsh tool to generate the XML output of a SR-IOV PCI device in a loop, like:
+
+ while true; do virsh nodedev-dumpxml pci_0000_08_12_0 >/dev/null; done
+
+ * This was executed while Valgrind was used to debug libvirtd, in order
+ to collect the signature of the leak. Without the patch we get the
+ "definitely lost" type of leak with the PCI backtrace (on comment #9),
+ whereas with the patch we don't see the leak anymore.
+
+ [Regression Potential]
+ * The potential of regressions is really low - the fix is upstream for a
while and in Focal package, and it is self-contained and not intrusive.
Considering hypothetical scenarios, if there's an issue with the fix it should
come in form of unused memory or double-free (which is usually harmless), and
only in PCI enumeration (or PCI XML generation) paths.
** Patch added: "lp1844455-xenial.debdiff"
https://bugs.launchpad.net/ubuntu/+source/libvirt/+bug/1844455/+attachment/5332042/+files/lp1844455-xenial.debdiff
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1844455
Title:
Memory leak of struct _virPCIDeviceAddress on libvirt
To manage notifications about this bug go to:
https://bugs.launchpad.net/cloud-archive/+bug/1844455/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs