[libvirt] [PATCH 3/3] bhyveConnectGetCapabilities: Fix double caps unref

Michal Privoznik mprivozn at redhat.com
Mon Apr 7 15:36:09 UTC 2014


At the beginning of the function we gain a reference to the driver
capabilities. Then, we call format function (*) which if failed, unref
over caps is called. Then, at the end another unref occurs.

* - Moreover, the format was not called over gained caps, but over
privconn->caps directly which is not allowed anymore.

Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
---
 src/bhyve/bhyve_driver.c | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c
index 6ef9d98..a5b349a 100644
--- a/src/bhyve/bhyve_driver.c
+++ b/src/bhyve/bhyve_driver.c
@@ -135,22 +135,24 @@ bhyveConnectGetCapabilities(virConnectPtr conn)
 {
     bhyveConnPtr privconn = conn->privateData;
     virCapsPtr caps;
-    char *xml;
+    char *xml = NULL;
 
     if (virConnectGetCapabilitiesEnsureACL(conn) < 0)
         return NULL;
 
-    caps = bhyveDriverGetCapabilities(privconn);
-    if (!caps)
+    if (!(caps = bhyveDriverGetCapabilities(privconn))) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                        _("Unable to get Capabilities"));
+        goto cleanup;
+    }
 
-    if ((xml = virCapabilitiesFormatXML(privconn->caps)) == NULL) {
-        virObjectUnref(caps);
+    if (!(xml = virCapabilitiesFormatXML(caps))) {
         virReportOOMError();
+        goto cleanup;
     }
-    virObjectUnref(caps);
 
+ cleanup:
+    virObjectUnref(caps);
     return xml;
 }
 
-- 
1.9.0




More information about the libvir-list mailing list