Re: [libvirt] [PATCH] qemu: Don't leak domain def when RevertToSnapshot fails

2019-09-11 Thread Pavel Hrdina
On Tue, Sep 10, 2019 at 02:04:38PM +0200, Jiri Denemark wrote:
> Once we copy the domain definition from virDomainSnapshotDef, we either
> need to assign it to the domain object or free it to avoid memory leaks.
> 
> Signed-off-by: Jiri Denemark 
> ---
>  src/qemu/qemu_driver.c | 16 +---
>  1 file changed, 13 insertions(+), 3 deletions(-)

Reviewed-by: Pavel Hrdina 


signature.asc
Description: PGP signature
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

[libvirt] [PATCH] qemu: Don't leak domain def when RevertToSnapshot fails

2019-09-10 Thread Jiri Denemark
Once we copy the domain definition from virDomainSnapshotDef, we either
need to assign it to the domain object or free it to avoid memory leaks.

Signed-off-by: Jiri Denemark 
---
 src/qemu/qemu_driver.c | 16 +---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index b28a26c3d6..a984b1e65c 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -16568,6 +16568,7 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr 
snapshot,
 virCPUDefPtr origCPU = NULL;
 unsigned int start_flags = VIR_QEMU_PROCESS_START_GEN_VMID;
 qemuDomainAsyncJob jobType = QEMU_ASYNC_JOB_START;
+bool defined = false;
 
 virCheckFlags(VIR_DOMAIN_SNAPSHOT_REVERT_RUNNING |
   VIR_DOMAIN_SNAPSHOT_REVERT_PAUSED |
@@ -16779,6 +16780,8 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr 
snapshot,
 virDomainObjAssignDef(vm, config, false, NULL);
 virCPUDefFree(priv->origCPU);
 VIR_STEAL_PTR(priv->origCPU, origCPU);
+config = NULL;
+defined = true;
 }
 
 if (cookie && !cookie->slirpHelper)
@@ -16788,8 +16791,11 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr 
snapshot,
 /* Transitions 2, 3 */
 load:
 was_stopped = true;
-if (config)
+if (config) {
 virDomainObjAssignDef(vm, config, false, NULL);
+config = NULL;
+defined = true;
+}
 
 /* No cookie means libvirt which saved the domain was too old to
  * mess up the CPU definitions.
@@ -16875,8 +16881,11 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr 
snapshot,
 qemuProcessEndJob(driver, vm);
 goto cleanup;
 }
-if (config)
+if (config) {
 virDomainObjAssignDef(vm, config, false, NULL);
+config = NULL;
+defined = true;
+}
 
 if (flags & (VIR_DOMAIN_SNAPSHOT_REVERT_RUNNING |
  VIR_DOMAIN_SNAPSHOT_REVERT_PAUSED)) {
@@ -16944,7 +16953,7 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr 
snapshot,
 } else if (snap) {
 virDomainSnapshotSetCurrent(vm->snapshots, NULL);
 }
-if (ret == 0 && config && vm->persistent &&
+if (ret == 0 && defined && vm->persistent &&
 !(ret = virDomainSaveConfig(cfg->configDir, driver->caps,
 vm->newDef ? vm->newDef : vm->def))) {
 detail = VIR_DOMAIN_EVENT_DEFINED_FROM_SNAPSHOT;
@@ -16960,6 +16969,7 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr 
snapshot,
 virObjectUnref(cfg);
 virNWFilterUnlockFilterUpdates();
 virCPUDefFree(origCPU);
+virDomainDefFree(config);
 
 return ret;
 }
-- 
2.23.0

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list