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(a)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