]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu-ns: Detect /dev/* mount point duplicates better
authorMichal Privoznik <mprivozn@redhat.com>
Thu, 19 Oct 2017 13:23:15 +0000 (15:23 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Thu, 19 Oct 2017 15:33:31 +0000 (17:33 +0200)
https://bugzilla.redhat.com/show_bug.cgi?id=1495511

When creating new /dev for domain ran in namespace we try to
preserve all sub-mounts of /dev. Well, not quite all. For
instance if /dev/foo/bar and /dev/foo are both mount points, only
/dev/foo needs preserving. /dev/foo/bar is preserved with it too.
Now, to identify such cases like this one STRPREFIX() is used.
That is not good enough. While it works for [/dev/foo/bar;
/dev/foo] case, it fails for [/dev/prefix; /dev/prefix2] where
the strings share the same prefix but are in fact two different
paths. The solution is to use STRSKIP().

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Erik Skultety <eskultet@redhat.com>
src/qemu/qemu_domain.c

index 23b9c6c1387e101a1dd6fcb8ad9d5a9f4473b6d7..8c361058957eae92d1c0818d9d3d1bcfa77ec4de 100644 (file)
@@ -8222,7 +8222,9 @@ qemuDomainGetPreservedMounts(virQEMUDriverConfigPtr cfg,
     for (i = 1; i < nmounts; i++) {
         j = i + 1;
         while (j < nmounts) {
-            if (STRPREFIX(mounts[j], mounts[i])) {
+            char *c = STRSKIP(mounts[j], mounts[i]);
+
+            if (c && *c == '/') {
                 VIR_DEBUG("Dropping path %s because of %s", mounts[j], mounts[i]);
                 VIR_DELETE_ELEMENT(mounts, j, nmounts);
             } else {