From: Michal Privoznik Date: Thu, 19 Oct 2017 13:23:15 +0000 (+0200) Subject: qemu-ns: Detect /dev/* mount point duplicates better X-Git-Tag: v3.9.0-rc1~66 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4f1570720218302b749dd4bad243509c0f5c45a5;p=thirdparty%2Flibvirt.git qemu-ns: Detect /dev/* mount point duplicates better 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 Reviewed-by: Erik Skultety --- diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 23b9c6c138..8c36105895 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -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 {