[PATCH 1/2] qemu: Fix leak in qemuProcessInitCpuAffinity()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



In two out of three scenarios we were cleaning up properly
after ourselves, but in the remaining one we were leaking
cpumapToSet.

Refactor the logic so that cpumapToSet is always a freshly
allocated bitmap that gets cleaned up automatically thanks
to VIR_AUTOPTR(); this also allows us to remove hostcpumap.

Reported-by: John Ferlan <jferlan@xxxxxxxxxx>
Signed-off-by: Andrea Bolognani <abologna@xxxxxxxxxx>
---
 src/qemu/qemu_process.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index d44076288e..7d48c95973 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -2464,8 +2464,7 @@ static int
 qemuProcessInitCpuAffinity(virDomainObjPtr vm)
 {
     int ret = -1;
-    virBitmapPtr cpumapToSet = NULL;
-    VIR_AUTOPTR(virBitmap) hostcpumap = NULL;
+    VIR_AUTOPTR(virBitmap) cpumapToSet = NULL;
     virDomainNumatuneMemMode mem_mode;
     qemuDomainObjPrivatePtr priv = vm->privateData;
 
@@ -2500,11 +2499,11 @@ qemuProcessInitCpuAffinity(virDomainObjPtr vm)
         if (virNumaNodesetToCPUset(nodeset, &cpumapToSet) < 0)
             goto cleanup;
     } else if (vm->def->cputune.emulatorpin) {
-        cpumapToSet = vm->def->cputune.emulatorpin;
+        if (virBitmapCopy(cpumapToSet, vm->def->cputune.emulatorpin) < 0)
+            goto cleanup;
     } else {
-        if (qemuProcessGetAllCpuAffinity(&hostcpumap) < 0)
+        if (qemuProcessGetAllCpuAffinity(&cpumapToSet) < 0)
             goto cleanup;
-        cpumapToSet = hostcpumap;
     }
 
     if (cpumapToSet &&
-- 
2.21.0

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



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux