]> xenbits.xensource.com Git - libvirt.git/commitdiff
snapshot: conf: Enforce absolute paths on disk and memory images
authorPeter Krempa <pkrempa@redhat.com>
Wed, 6 Aug 2014 13:17:00 +0000 (15:17 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Wed, 6 Aug 2014 15:58:26 +0000 (17:58 +0200)
RNG schema as well as the qemu driver requires absolute paths for memory
and disk snapshot image files but the XML parser was not enforcing it.
Add checks to avoid problems in qemu where the configuration it creates
is invalid.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1126329

src/conf/snapshot_conf.c

index 240ca90526a9a8f738e386687e153662e4be3454..c53a66b65cfcfbdbbee36238bd4cf932febc1126 100644 (file)
@@ -177,6 +177,16 @@ virDomainSnapshotDiskDefParseXML(xmlNodePtr node,
         }
     }
 
+    /* validate that the passed path is absolute */
+    if (virStorageSourceIsLocalStorage(def->src) &&
+        def->src->path &&
+        def->src->path[0] != '/') {
+        virReportError(VIR_ERR_XML_ERROR,
+                       _("disk snapshot image path '%s' must be absolute"),
+                       def->src->path);
+        goto cleanup;
+    }
+
     if (!def->snapshot && (def->src->path || def->src->format))
         def->snapshot = VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL;
 
@@ -327,6 +337,14 @@ virDomainSnapshotDefParse(xmlXPathContextPtr ctxt,
     def->file = memoryFile;
     memoryFile = NULL;
 
+    /* verify that memory path is absolute */
+    if (def->file && def->file[0] != '/') {
+        virReportError(VIR_ERR_XML_ERROR,
+                       _("memory snapshot file path (%s) must be absolute"),
+                       def->file);
+        goto cleanup;
+    }
+
     if ((n = virXPathNodeSet("./disks/*", ctxt, &nodes)) < 0)
         goto cleanup;
     if (flags & VIR_DOMAIN_SNAPSHOT_PARSE_DISKS) {