diff --git a/0001-interface-fix-udev-reference-leak-with-invalid-flags.patch b/0001-interface-fix-udev-reference-leak-with-invalid-flags.patch new file mode 100644 index 0000000..cdc4a2b --- /dev/null +++ b/0001-interface-fix-udev-reference-leak-with-invalid-flags.patch @@ -0,0 +1,41 @@ +From 3499354e12a1c1832bf4030693a64e03ceb79d05 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= +Date: Wed, 5 Jun 2024 11:16:21 +0100 +Subject: [PATCH] interface: fix udev reference leak with invalid flags +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The udevInterfaceGetXMLDesc method takes a reference on the udev +driver as its first action. If the virCheckFlags() condition +fails, however, this reference is never released. + +Reviewed-by: Peter Krempa +Signed-off-by: Daniel P. Berrangé +--- + src/interface/interface_backend_udev.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/src/interface/interface_backend_udev.c b/src/interface/interface_backend_udev.c +index fdf11a8318..e1a50389c9 100644 +--- a/src/interface/interface_backend_udev.c ++++ b/src/interface/interface_backend_udev.c +@@ -1027,12 +1027,14 @@ static char * + udevInterfaceGetXMLDesc(virInterfacePtr ifinfo, + unsigned int flags) + { +- struct udev *udev = udev_ref(driver->udev); ++ struct udev *udev = NULL; + g_autoptr(virInterfaceDef) ifacedef = NULL; + char *xmlstr = NULL; + + virCheckFlags(VIR_INTERFACE_XML_INACTIVE, NULL); + ++ udev = udev_ref(driver->udev); ++ + /* Recursively build up the interface XML based on the requested + * interface name + */ +-- +2.45.1 + diff --git a/0001-rpc-avoid-leak-of-GSource-in-use-for-interrupting-ma.patch b/0001-rpc-avoid-leak-of-GSource-in-use-for-interrupting-ma.patch new file mode 100644 index 0000000..afa729d --- /dev/null +++ b/0001-rpc-avoid-leak-of-GSource-in-use-for-interrupting-ma.patch @@ -0,0 +1,49 @@ +From 98f1cf88fa7e0f992d93f376418fbfb3996a9690 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= +Date: Fri, 17 May 2024 14:55:24 +0100 +Subject: [PATCH] rpc: avoid leak of GSource in use for interrupting main loop +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +We never release the reference on the GSource created for +interrupting the main loop, nor do we remove it from the +main context if our thread is woken up prior to the wakeup +callback firing. + +This can result in a leak of GSource objects, along with an +ever growing list of GSources attached to the main context, +which will gradually slow down execution of the loop, as +several operations are O(N) for the number of attached GSource +objects. + +Reviewed-by: Michal Privoznik +Signed-off-by: Daniel P. Berrangé +--- + src/rpc/virnetclient.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/rpc/virnetclient.c b/src/rpc/virnetclient.c +index 147b0d661a..6d424eb599 100644 +--- a/src/rpc/virnetclient.c ++++ b/src/rpc/virnetclient.c +@@ -1946,7 +1946,7 @@ static int virNetClientIO(virNetClient *client, + /* Check to see if another thread is dispatching */ + if (client->haveTheBuck) { + /* Force other thread to wakeup from poll */ +- GSource *wakeup = g_idle_source_new(); ++ g_autoptr(GSource) wakeup = g_idle_source_new(); + g_source_set_callback(wakeup, virNetClientIOWakeup, client->eventLoop, NULL); + g_source_attach(wakeup, client->eventCtx); + +@@ -1968,6 +1968,7 @@ static int virNetClientIO(virNetClient *client, + return -1; + } + ++ g_source_destroy(wakeup); + VIR_DEBUG("Woken up from sleep head=%p call=%p", + client->waitDispatch, thiscall); + /* Three reasons we can be woken up +-- +2.45.1 + diff --git a/libvirt.spec b/libvirt.spec index 560ff01..2fe3ad7 100644 --- a/libvirt.spec +++ b/libvirt.spec @@ -289,7 +289,7 @@ Summary: Library providing a simple virtualization API Name: libvirt Version: 10.4.0 -Release: 1%{?dist} +Release: 2%{?dist} License: GPL-2.0-or-later AND LGPL-2.1-only AND LGPL-2.1-or-later AND OFL-1.1 URL: https://libvirt.org/ @@ -297,6 +297,8 @@ URL: https://libvirt.org/ %define mainturl stable_updates/ %endif Source: https://download.libvirt.org/%{?mainturl}libvirt-%{version}.tar.xz +Patch2: 0001-rpc-avoid-leak-of-GSource-in-use-for-interrupting-ma.patch +Patch3: 0001-interface-fix-udev-reference-leak-with-invalid-flags.patch Requires: libvirt-daemon = %{version}-%{release} Requires: libvirt-daemon-config-network = %{version}-%{release} @@ -2622,6 +2624,10 @@ exit 0 %endif %changelog +* Wed Jun 5 2024 Daniel P. Berrangé - 10.4.0-2 +- Fix leak of GSource handle +- Fix leak of udev reference (rhbz #2266017) + * Wed Jun 5 2024 Daniel P. Berrangé - 10.4.0-1 - Update to version 10.4.0 - Change virtual network backend from iptables to nftables