]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu_process.c: Propagate hugetlbfs mounts on reconnect
authorMichal Privoznik <mprivozn@redhat.com>
Tue, 6 Sep 2022 11:45:51 +0000 (13:45 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Fri, 23 Sep 2022 14:33:48 +0000 (16:33 +0200)
When reconnecting to a running QEMU process, we construct the
per-domain path in all hugetlbfs mounts. This is a relict from
the past (v3.4.0-100-g5b24d25062) where we switched to a
per-domain path and we want to create those paths when libvirtd
restarts on upgrade.

And with namespaces enabled there is one corner case where the
path is not created. In fact an error is reported and the
reconnect fails. Ideally, all mount events are propagated into
the QEMU's namespace. And they probably are, except when the
target path does not exist inside the namespace. Now, it's pretty
common for users to mount hugetlbfs under /dev (e.g.
/dev/hugepages), but if domain is started without hugepages (or
more specifically - private hugetlbfs path wasn't created on
domain startup), then the reconnect code tries to create it.
But it fails to do so, well, it fails to set seclabels on the
path because, because the path does not exist in the private
namespace. And it doesn't exist because we specifically create
only a subset of all possible /dev nodes. Therefore, the mount
event, whilst propagated, is not successful and hence the
filesystem is not mounted. We have to do it ourselves.

If hugetlbfs is mount anywhere else there's no problem and this
is effectively a dead code.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2123196
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
docs/kbase/qemu-passthrough-security.rst
src/qemu/qemu_process.c

index 106c3cc5b9e63dab9d709faf32507db5d56d6d06..ef10d8af9b6588f284c8fb6c567a32c0fb4980d8 100644 (file)
@@ -172,9 +172,3 @@ command before any guest is started:
 ::
 
   # mount --make-rshared /
-
-Another requirement for dynamic mount point propagation is to  not place
-``hugetlbfs`` mount points under ``/dev`` because these won't be propagated as
-corresponding directories do not exist in the private namespace. Or just use
-``memfd`` memory backend instead which does not require ``hugetlbfs`` mount
-points.
index cbfdd3bda580e3375bc152b7a2a309ce78d3963e..b05ad059c32928c9e3f246732827897483decf84 100644 (file)
@@ -3976,6 +3976,9 @@ qemuProcessBuildDestroyMemoryPathsImpl(virQEMUDriver *driver,
             return -1;
         }
 
+        if (qemuDomainNamespaceSetupPath(vm, path, NULL) < 0)
+            return -1;
+
         if (qemuSecurityDomainSetPathLabel(driver, vm, path, true) < 0)
             return -1;
     } else {