]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
snapshot_conf: use alternate domain definition in virDomainSnapshotDefAssignExternalNames
authorPavel Hrdina <phrdina@redhat.com>
Wed, 1 Feb 2023 13:23:58 +0000 (14:23 +0100)
committerPavel Hrdina <phrdina@redhat.com>
Tue, 22 Aug 2023 14:06:05 +0000 (16:06 +0200)
Commit <ef3f3884a2432958bdd4ea0ce45509d47a91a453> introduced new
argument for virDomainSnapshotAlignDisks() that allows passing alternate
domain definition in case the snapshot parent.dom is NULL.

In case of redefining snapshot it will not hit the part of code that
unconditionally uses parent.dom as there will not be need to generate
default external file names.

It should be still fixed to make it safe. Future external snapshot
revert code will use this to generate default file names and in this
case it would crash.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
src/conf/snapshot_conf.c

index cc59bddbc8f3a969dd11621c8926a609e4560a45..ac5aba1753b0789c1f48423c468444d6438fada2 100644 (file)
@@ -486,12 +486,14 @@ virDomainSnapshotRedefineValidate(virDomainSnapshotDef *def,
 /**
  * virDomainSnapshotDefAssignExternalNames:
  * @def: snapshot def object
+ * @domdef: domain def object
  *
  * Generate default external file names for snapshot targets. Returns 0 on
  * success, -1 on error.
  */
 static int
-virDomainSnapshotDefAssignExternalNames(virDomainSnapshotDef *def)
+virDomainSnapshotDefAssignExternalNames(virDomainSnapshotDef *def,
+                                        virDomainDef *domdef)
 {
     const char *origpath;
     char *tmppath;
@@ -514,7 +516,7 @@ virDomainSnapshotDefAssignExternalNames(virDomainSnapshotDef *def)
             return -1;
         }
 
-        if (!(origpath = virDomainDiskGetSource(def->parent.dom->disks[i]))) {
+        if (!(origpath = virDomainDiskGetSource(domdef->disks[i]))) {
             virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
                            _("cannot generate external snapshot name for disk '%1$s' without source"),
                            disk->name);
@@ -702,7 +704,7 @@ virDomainSnapshotAlignDisks(virDomainSnapshotDef *snapdef,
     }
 
     /* Generate default external file names for external snapshot locations */
-    if (virDomainSnapshotDefAssignExternalNames(snapdef) < 0)
+    if (virDomainSnapshotDefAssignExternalNames(snapdef, domdef) < 0)
         return -1;
 
     return 0;