Blob Blame History Raw
From 495bf507eaf0eab638d3cf89a8854d23824b319e Mon Sep 17 00:00:00 2001
Message-Id: <495bf507eaf0eab638d3cf89a8854d23824b319e@dist-git>
From: John Ferlan <jferlan@redhat.com>
Date: Wed, 27 Aug 2014 14:27:07 -0400
Subject: [PATCH] cpu_x86: Resolve Coverity RESOURCE_LEAK

Coverity determined that the copied 'oldguest' would be leaked for
both error and success paths.

(cherry picked from commit be7b82a283bc789da6cf9edc413ea399636b97b8)
https://bugzilla.redhat.com/show_bug.cgi?id=1185458
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
---
 src/cpu/cpu_x86.c | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
index 7bd8acb..4e77550 100644
--- a/src/cpu/cpu_x86.c
+++ b/src/cpu/cpu_x86.c
@@ -1940,8 +1940,9 @@ static int
 x86UpdateHostModel(virCPUDefPtr guest,
                    const virCPUDefPtr host)
 {
-    virCPUDefPtr oldguest;
+    virCPUDefPtr oldguest = NULL;
     size_t i;
+    int ret = -1;
 
     guest->match = VIR_CPU_MATCH_EXACT;
 
@@ -1953,20 +1954,24 @@ x86UpdateHostModel(virCPUDefPtr guest,
 
     /* update the host model according to the desired configuration */
     if (!(oldguest = virCPUDefCopy(guest)))
-        return -1;
+        goto cleanup;
 
     virCPUDefFreeModel(guest);
     if (virCPUDefCopyModel(guest, host, true) < 0)
-        return -1;
+        goto cleanup;
 
     for (i = 0; i < oldguest->nfeatures; i++) {
         if (virCPUDefUpdateFeature(guest,
                                    oldguest->features[i].name,
                                    oldguest->features[i].policy) < 0)
-            return -1;
+            goto cleanup;
     }
 
-    return 0;
+    ret = 0;
+
+ cleanup:
+    virCPUDefFree(oldguest);
+    return ret;
 }
 
 
-- 
2.2.2