]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Fix misc memory leaks
authorDaniel P. Berrange <berrange@redhat.com>
Thu, 22 May 2008 15:12:25 +0000 (15:12 +0000)
committerDaniel P. Berrange <berrange@redhat.com>
Thu, 22 May 2008 15:12:25 +0000 (15:12 +0000)
ChangeLog
qemud/remote.c
src/libvirt.c
src/qparams.c

index 3039139d927a387f00dcd460b2882a3d3fc9169b..beaa5fa7af8ccb12439d840dd092cddc64176e09 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+Thu May 22 11:06:29 EST 2008 Daniel P. Berrange <berrange@redhat.com>
+
+       Fix misc memory leaks
+       * qemud/remote.c: Fix memory leaks in stats/migration APIs
+       * src/libvirt.c: Fix use of uninitialized memory & memory
+       leak in default auth helper
+       * src/qparams.c: Fix memory leak, and convert to use new
+       style memory allocation APIs
+
 Thu May 22 16:56:12 CEST 2008 Daniel Veillard <veillard@redhat.com>
 
        * docs/formatdomain.html docs/formatdomain.html.in: Anton Protopopov
index 725152e5ff2b87989ab700e28318612cab1d4583..038c0aa0672d72222662ced37d6efed374da9b03 100644 (file)
@@ -792,8 +792,11 @@ remoteDispatchDomainBlockStats (struct qemud_server *server ATTRIBUTE_UNUSED,
     }
     path = args->path;
 
-    if (virDomainBlockStats (dom, path, &stats, sizeof stats) == -1)
+    if (virDomainBlockStats (dom, path, &stats, sizeof stats) == -1) {
+        virDomainFree (dom);
         return -1;
+    }
+    virDomainFree (dom);
 
     ret->rd_req = stats.rd_req;
     ret->rd_bytes = stats.rd_bytes;
@@ -823,8 +826,11 @@ remoteDispatchDomainInterfaceStats (struct qemud_server *server ATTRIBUTE_UNUSED
     }
     path = args->path;
 
-    if (virDomainInterfaceStats (dom, path, &stats, sizeof stats) == -1)
+    if (virDomainInterfaceStats (dom, path, &stats, sizeof stats) == -1) {
+        virDomainFree (dom);
         return -1;
+    }
+    virDomainFree (dom);
 
     ret->rx_bytes = stats.rx_bytes;
     ret->rx_packets = stats.rx_packets;
@@ -1221,14 +1227,22 @@ remoteDispatchDomainMigratePrepare (struct qemud_server *server ATTRIBUTE_UNUSED
     r = __virDomainMigratePrepare (client->conn, &cookie, &cookielen,
                                    uri_in, uri_out,
                                    args->flags, dname, args->resource);
-    if (r == -1) return -1;
+    if (r == -1) {
+        free(uri_out);
+        return -1;
+    }
 
     /* remoteDispatchClientRequest will free cookie, uri_out and
      * the string if there is one.
      */
     ret->cookie.cookie_len = cookielen;
     ret->cookie.cookie_val = cookie;
-    ret->uri_out = *uri_out == NULL ? NULL : uri_out;
+    if (*uri_out == NULL) {
+        ret->uri_out = NULL;
+        free(uri_out);
+    } else {
+        ret->uri_out = uri_out;
+    }
 
     return 0;
 }
@@ -1258,6 +1272,7 @@ remoteDispatchDomainMigratePerform (struct qemud_server *server ATTRIBUTE_UNUSED
                                    args->cookie.cookie_len,
                                    args->uri,
                                    args->flags, dname, args->resource);
+    virDomainFree (dom);
     if (r == -1) return -1;
 
     return 0;
@@ -1281,7 +1296,7 @@ remoteDispatchDomainMigrateFinish (struct qemud_server *server ATTRIBUTE_UNUSED,
     if (ddom == NULL) return -1;
 
     make_nonnull_domain (&ret->ddom, ddom);
-
+    virDomainFree (ddom);
     return 0;
 }
 
index 9f6df8ebc3d25ea8c156c31bcb3eeedb628c807f..6a5a01a80981676f4b9241939e5287e839e93676 100644 (file)
@@ -170,13 +170,15 @@ static int virConnectAuthCallbackDefault(virConnectCredentialPtr cred,
             return -1;
         }
 
-        if (STREQ(bufptr, "") && cred[i].defresult)
-            cred[i].result = strdup(cred[i].defresult);
-        else
-            cred[i].result = strdup(bufptr);
-        if (!cred[i].result)
-            return -1;
-        cred[i].resultlen = strlen(cred[i].result);
+        if (cred[i].type != VIR_CRED_EXTERNAL) {
+            if (STREQ(bufptr, "") && cred[i].defresult)
+                cred[i].result = strdup(cred[i].defresult);
+            else
+                cred[i].result = strdup(bufptr);
+            if (!cred[i].result)
+                return -1;
+            cred[i].resultlen = strlen(cred[i].result);
+        }
     }
 
     return 0;
index db2320e21f2282f0e03e017889f77c0ee5e220fb..88bf5c1571fd2c0ac041b7560a0c97a99dfb7abe 100644 (file)
@@ -27,7 +27,7 @@
 #include <stdarg.h>
 
 #include "buf.h"
-
+#include "memory.h"
 #include "qparams.h"
 
 struct qparam_set *
@@ -39,13 +39,12 @@ new_qparam_set (int init_alloc, ...)
 
     if (init_alloc <= 0) init_alloc = 1;
 
-    ps = malloc (sizeof (*ps));
-    if (!ps) return NULL;
+    if (VIR_ALLOC(ps) < 0)
+        return NULL;
     ps->n = 0;
     ps->alloc = init_alloc;
-    ps->p = malloc (init_alloc * sizeof (ps->p[0]));
-    if (!ps->p) {
-        free (ps);
+    if (VIR_ALLOC_N(ps->p, ps->alloc) < 0) {
+        VIR_FREE (ps);
         return NULL;
     }
 
@@ -87,13 +86,8 @@ append_qparams (struct qparam_set *ps, ...)
 static int
 grow_qparam_set (struct qparam_set *ps)
 {
-    struct qparam *old_p;
-
     if (ps->n >= ps->alloc) {
-        old_p = ps->p;
-        ps->p = realloc (ps->p, 2 * ps->alloc * sizeof (ps->p[0]));
-        if (!ps->p) {
-            ps->p = old_p;
+        if (VIR_REALLOC_N(ps->p, ps->alloc * 2) < 0) {
             perror ("realloc");
             return -1;
         }
@@ -115,13 +109,13 @@ append_qparam (struct qparam_set *ps,
 
     pvalue = strdup (value);
     if (!pvalue) {
-        free (pname);
+        VIR_FREE (pname);
         return -1;
     }
 
     if (grow_qparam_set (ps) == -1) {
-        free (pname);
-        free (pvalue);
+        VIR_FREE (pname);
+        VIR_FREE (pvalue);
         return -1;
     }
 
@@ -161,10 +155,11 @@ free_qparam_set (struct qparam_set *ps)
     int i;
 
     for (i = 0; i < ps->n; ++i) {
-        free (ps->p[i].name);
-        free (ps->p[i].value);
+        VIR_FREE (ps->p[i].name);
+        VIR_FREE (ps->p[i].value);
     }
-    free (ps);
+    VIR_FREE (ps->p);
+    VIR_FREE (ps);
 }
 
 struct qparam_set *