parent
ff04eb7658
commit
52737d0d36
44
0001-virtinst-Fix-TOCTOU-in-domain-enumeration.patch
Normal file
44
0001-virtinst-Fix-TOCTOU-in-domain-enumeration.patch
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
From 4d0e323227f18e58283c45be4d240b506faacb22 Mon Sep 17 00:00:00 2001
|
||||||
|
Message-Id: <4d0e323227f18e58283c45be4d240b506faacb22.1610390294.git.crobinso@redhat.com>
|
||||||
|
From: Martin Pitt <martin@piware.de>
|
||||||
|
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 <crobinso@redhat.com>
|
||||||
|
---
|
||||||
|
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
|
||||||
|
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
Name: virt-manager
|
Name: virt-manager
|
||||||
Version: 3.2.0
|
Version: 3.2.0
|
||||||
Release: 1%{?dist}
|
Release: 2%{?dist}
|
||||||
%global verrel %{version}-%{release}
|
%global verrel %{version}-%{release}
|
||||||
|
|
||||||
Summary: Desktop tool for managing virtual machines via libvirt
|
Summary: Desktop tool for managing virtual machines via libvirt
|
||||||
@ -17,6 +17,9 @@ BuildArch: noarch
|
|||||||
URL: https://virt-manager.org/
|
URL: https://virt-manager.org/
|
||||||
Source0: https://virt-manager.org/download/sources/%{name}/%{name}-%{version}.tar.gz
|
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: virt-manager-common = %{verrel}
|
||||||
Requires: python3-gobject
|
Requires: python3-gobject
|
||||||
@ -167,6 +170,9 @@ done
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Jan 11 2021 Cole Robinson <crobinso@redhat.com> - 3.2.0-2
|
||||||
|
- Fix 'domain not found' race (bz #1901081)
|
||||||
|
|
||||||
* Sat Nov 14 2020 Cole Robinson <crobinso@redhat.com> - 3.2.0-1
|
* Sat Nov 14 2020 Cole Robinson <crobinso@redhat.com> - 3.2.0-1
|
||||||
- Update to version 3.2.0
|
- Update to version 3.2.0
|
||||||
- Slim down filesystem device editor UI
|
- Slim down filesystem device editor UI
|
||||||
|
Loading…
Reference in New Issue
Block a user