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
This commit is contained in:
parent
19fc6c1708
commit
4d0e323227
|
@ -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),
|
||||
|
|
Loading…
Reference in New Issue