]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
conf: fix leak in virDomainVcpuPinAdd
authorJán Tomko <jtomko@redhat.com>
Tue, 15 Jan 2013 14:43:08 +0000 (15:43 +0100)
committerJán Tomko <jtomko@redhat.com>
Wed, 16 Jan 2013 16:51:14 +0000 (17:51 +0100)
Fix the leak of vcpupin on failure to allocate cpumask and the leak of
cpumask if we fail to expand vcpupin_list.

src/conf/domain_conf.c

index 41e7282d27a29648f8f88acaca94b3d148403c58..88865b5c9729b0c36771e4dc96767d4ba4f2fda0 100644 (file)
@@ -11900,26 +11900,25 @@ int virDomainVcpuPinAdd(virDomainVcpuPinDefPtr **vcpupin_list,
 
     /* No existing vcpupin matches vcpu, adding a new one */
 
-    if (VIR_ALLOC(vcpupin) < 0) {
-        virReportOOMError();
-        return -1;
-    }
+    if (VIR_ALLOC(vcpupin) < 0)
+        goto no_memory;
+
     vcpupin->vcpuid = vcpu;
     vcpupin->cpumask = virBitmapNewData(cpumap, maplen);
-    if (!vcpupin->cpumask) {
-        virReportOOMError();
-        return -1;
-    }
+    if (!vcpupin->cpumask)
+        goto no_memory;
 
-    if (VIR_REALLOC_N(*vcpupin_list, *nvcpupin + 1) < 0) {
-        virReportOOMError();
-        VIR_FREE(vcpupin);
-        return -1;
-    }
+    if (VIR_REALLOC_N(*vcpupin_list, *nvcpupin + 1) < 0)
+        goto no_memory;
 
     (*vcpupin_list)[(*nvcpupin)++] = vcpupin;
 
     return 0;
+
+no_memory:
+    virReportOOMError();
+    virDomainVcpuPinDefFree(vpcupin);
+    return -1;
 }
 
 int