]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
virfile: Handle directories in virFileBindMountDevice()
authorMichal Privoznik <mprivozn@redhat.com>
Fri, 4 Oct 2019 19:01:49 +0000 (21:01 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Fri, 20 Mar 2020 13:34:32 +0000 (14:34 +0100)
The @src is not always a file. It may also be a directory (for
instance qemuDomainCreateDeviceRecursive() assumes that) - even
though it doesn't happen usually. Anyway, mount() can mount only
a dir onto a dir and a file onto a file.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Pavel Mores <pmores@redhat.com>
src/util/virfile.c

index 0f31554323b3db5ff70c236f17378bb7e821630f..20260a2e5811e7eb7b9a5575c1eca5c3c635fab9 100644 (file)
@@ -3743,8 +3743,17 @@ int
 virFileBindMountDevice(const char *src,
                        const char *dst)
 {
-    if (virFileTouch(dst, 0666) < 0)
-        return -1;
+    if (!virFileExists(dst)) {
+        if (virFileIsDir(src)) {
+            if (virFileMakePath(dst) < 0) {
+                virReportSystemError(errno, _("Unable to make dir %s"), dst);
+                return -1;
+            }
+        } else {
+            if (virFileTouch(dst, 0666) < 0)
+                return -1;
+        }
+    }
 
     if (mount(src, dst, "none", MS_BIND, NULL) < 0) {
         virReportSystemError(errno, _("Failed to bind %s on to %s"), src,