From c9a2e3af8e8b00267b781dc15a9794a78fb2e235 Mon Sep 17 00:00:00 2001 From: DistroBaker Date: Mon, 11 Jan 2021 19:02:01 +0000 Subject: [PATCH] Merged update from upstream sources This is an automated DistroBaker update from upstream sources. If you do not know what this is about or would like to opt out, contact the OSCI team. Source: https://src.fedoraproject.org/rpms/virt-manager.git#52737d0d3676305fdffc1db57dae8dd6fe71d83c --- ...nst-Fix-TOCTOU-in-domain-enumeration.patch | 44 +++++++++++++++++++ virt-manager.spec | 8 +++- 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 0001-virtinst-Fix-TOCTOU-in-domain-enumeration.patch diff --git a/0001-virtinst-Fix-TOCTOU-in-domain-enumeration.patch b/0001-virtinst-Fix-TOCTOU-in-domain-enumeration.patch new file mode 100644 index 0000000..f747754 --- /dev/null +++ b/0001-virtinst-Fix-TOCTOU-in-domain-enumeration.patch @@ -0,0 +1,44 @@ +From 4d0e323227f18e58283c45be4d240b506faacb22 Mon Sep 17 00:00:00 2001 +Message-Id: <4d0e323227f18e58283c45be4d240b506faacb22.1610390294.git.crobinso@redhat.com> +From: Martin Pitt +Date: Tue, 24 Nov 2020 14:24:06 +0100 +Subject: [PATCH virt-manager] virtinst: Fix TOCTOU in domain enumeration + +Similar to commit 49a01b5482, _fetch_all_domains_raw() has a race +condition where a domain may disappear (from parallel libvirt +operations) in between enumerating and inspecting the objects. + +Ignore these missing domains instead of crashing. + +https://bugzilla.redhat.com/show_bug.cgi?id=1901081 +Signed-off-by: Cole Robinson +--- + virtinst/connection.py | 12 ++++++++++-- + 1 file changed, 10 insertions(+), 2 deletions(-) + +diff --git a/virtinst/connection.py b/virtinst/connection.py +index fec273b7..06bc60ad 100644 +--- a/virtinst/connection.py ++++ b/virtinst/connection.py +@@ -182,8 +182,16 @@ class VirtinstConnection(object): + def _fetch_all_domains_raw(self): + dummy1, dummy2, ret = pollhelpers.fetch_vms( + self, {}, lambda obj, ignore: obj) +- return [Guest(weakref.proxy(self), parsexml=obj.XMLDesc(0)) +- for obj in ret] ++ domains = [] ++ for obj in ret: ++ # TOCTOU race: a domain may go away in between enumeration and inspection ++ try: ++ xml = obj.XMLDesc(0) ++ except libvirt.libvirtError as e: # pragma: no cover ++ log.debug("Fetching domain XML failed: %s", e) ++ continue ++ domains.append(Guest(weakref.proxy(self), parsexml=xml)) ++ return domains + + def _build_pool_raw(self, poolobj): + return StoragePool(weakref.proxy(self), +-- +2.29.2 + diff --git a/virt-manager.spec b/virt-manager.spec index 724904b..a52930d 100644 --- a/virt-manager.spec +++ b/virt-manager.spec @@ -8,7 +8,7 @@ Name: virt-manager Version: 3.2.0 -Release: 1%{?dist} +Release: 2%{?dist} %global verrel %{version}-%{release} Summary: Desktop tool for managing virtual machines via libvirt @@ -17,6 +17,9 @@ BuildArch: noarch URL: https://virt-manager.org/ Source0: https://virt-manager.org/download/sources/%{name}/%{name}-%{version}.tar.gz +# Fix 'domain not found' race (bz #1901081) +Patch0001: 0001-virtinst-Fix-TOCTOU-in-domain-enumeration.patch + Requires: virt-manager-common = %{verrel} Requires: python3-gobject @@ -167,6 +170,9 @@ done %changelog +* Mon Jan 11 2021 Cole Robinson - 3.2.0-2 +- Fix 'domain not found' race (bz #1901081) + * Sat Nov 14 2020 Cole Robinson - 3.2.0-1 - Update to version 3.2.0 - Slim down filesystem device editor UI