Fix QEMU start when KVM is not loaded (rhbz#1875327)
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
b0c05ac2ae
commit
b94fb6a393
@ -0,0 +1,79 @@
|
||||
From 8abd1ffed18394a6212c469cb2c7b6cc28a122d2 Mon Sep 17 00:00:00 2001
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Thu, 3 Sep 2020 18:07:43 +0200
|
||||
Subject: [PATCH] qemu_namespace: Be tolerant to non-existent files when
|
||||
populating /dev
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
In 6.7.0 release I've changed how domain namespace is built and
|
||||
populated. Previously it used to be done from a pre-exec hook
|
||||
(ran in the forked off child, just before dropping all privileges
|
||||
and exec()-ing QEMU), which not only meant we had to have two
|
||||
different code paths for creating a node in domain's namespace
|
||||
(one for this pre-exec hook, the other for hotplug ran from the
|
||||
daemon), it also proved problematic because it was leaking FDs
|
||||
into QEMU process.
|
||||
|
||||
To mitigate this problem, we've not only ditched libdevmapper
|
||||
from the NS population process, I've also dropped the pre-exec
|
||||
code and let the NS be populated from the daemon (using the
|
||||
hotplug code). But, I was not careful when doing so, because the
|
||||
pre-exec code was tolerant to files that doesn't exist, while
|
||||
this new code isn't. For instance, the very first thing that is
|
||||
done when the new NS is created is it's populated with
|
||||
@defaultDeviceACL which contain files like /dev/null, /dev/zero,
|
||||
/dev/random and /dev/kvm (and others). While the rest will
|
||||
probably exist every time, /dev/kvm might not and thus the new
|
||||
code I wrote has to be tolerant to that.
|
||||
|
||||
Of course, users can override the @defaultDeviceACL (by setting
|
||||
cgroup_device_acl in qemu.conf) and remove /dev/kvm (which is
|
||||
acceptable workaround), but we definitely want libvirt to work
|
||||
out of the box even on hosts without KVM.
|
||||
|
||||
Fixes: 9048dc4e627ddf33996084167bece7b5fb83b0bc
|
||||
Reported-by: Daniel P. Berrangé <berrange@redhat.com>
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_namespace.c | 12 +++++++++++-
|
||||
1 file changed, 11 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_namespace.c b/src/qemu/qemu_namespace.c
|
||||
index 454d6a7b4d..87f4fd8d58 100644
|
||||
--- a/src/qemu/qemu_namespace.c
|
||||
+++ b/src/qemu/qemu_namespace.c
|
||||
@@ -1094,6 +1094,9 @@ qemuNamespaceMknodItemInit(qemuNamespaceMknodItemPtr item,
|
||||
item->file = file;
|
||||
|
||||
if (g_lstat(file, &item->sb) < 0) {
|
||||
+ if (errno == ENOENT)
|
||||
+ return -2;
|
||||
+
|
||||
virReportSystemError(errno,
|
||||
_("Unable to access %s"), file);
|
||||
return -1;
|
||||
@@ -1168,9 +1171,16 @@ qemuNamespacePrepareOneItem(qemuNamespaceMknodDataPtr data,
|
||||
|
||||
while (1) {
|
||||
qemuNamespaceMknodItem item = { 0 };
|
||||
+ int rc;
|
||||
|
||||
- if (qemuNamespaceMknodItemInit(&item, cfg, vm, next) < 0)
|
||||
+ rc = qemuNamespaceMknodItemInit(&item, cfg, vm, next);
|
||||
+ if (rc == -2) {
|
||||
+ /* @file doesn't exist. We can break here. */
|
||||
+ break;
|
||||
+ } else if (rc < 0) {
|
||||
+ /* Some other (critical) error. */
|
||||
return -1;
|
||||
+ }
|
||||
|
||||
if (STRPREFIX(next, QEMU_DEVPREFIX)) {
|
||||
for (i = 0; i < ndevMountsPath; i++) {
|
||||
--
|
||||
2.26.2
|
||||
|
@ -211,7 +211,7 @@
|
||||
Summary: Library providing a simple virtualization API
|
||||
Name: libvirt
|
||||
Version: 6.7.0
|
||||
Release: 1%{?dist}
|
||||
Release: 2%{?dist}
|
||||
License: LGPLv2+
|
||||
URL: https://libvirt.org/
|
||||
|
||||
@ -219,6 +219,7 @@ URL: https://libvirt.org/
|
||||
%define mainturl stable_updates/
|
||||
%endif
|
||||
Source: https://libvirt.org/sources/%{?mainturl}libvirt-%{version}.tar.xz
|
||||
Patch1: 0001-qemu_namespace-Be-tolerant-to-non-existent-files-whe.patch
|
||||
|
||||
Requires: libvirt-daemon = %{version}-%{release}
|
||||
Requires: libvirt-daemon-config-network = %{version}-%{release}
|
||||
@ -1964,6 +1965,9 @@ exit 0
|
||||
|
||||
|
||||
%changelog
|
||||
* Fri Sep 4 2020 Daniel P. Berrangé <berrange@redhat.com> - 6.7.0-2
|
||||
- Fix QEMU start when KVM is not loaded (rhbz#1875327)
|
||||
|
||||
* Tue Sep 01 2020 Cole Robinson <crobinso@redhat.com> - 6.7.0-1
|
||||
- Update to version 6.7.0
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user