]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
fixes for several memory leaks
authorPhil Petty <phpetty@cisco.com>
Fri, 4 Mar 2011 16:52:12 +0000 (09:52 -0700)
committerEric Blake <eblake@redhat.com>
Fri, 4 Mar 2011 16:52:12 +0000 (09:52 -0700)
Signed-off-by: Eric Blake <eblake@redhat.com>
AUTHORS
src/conf/secret_conf.c
src/nwfilter/nwfilter_gentech_driver.c
src/remote/remote_driver.c
src/util/conf.c
src/util/storage_file.c
src/util/xml.c
tools/virsh.c

diff --git a/AUTHORS b/AUTHORS
index a6e09f41a2fe1e8aaec8a8315c628f5beb922d77..f2292074e3b7b311d31186c2d5bb364a499bdd18 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -156,6 +156,7 @@ Patches have also been contributed by:
   Michal Novotny       <minovotn@redhat.com>
   Christophe Fergeau   <teuf@gnome.org>
   Markus Groß          <gross@univention.de>
+  Phil Petty           <phpetty@cisco.com>
 
   [....send patches to get your name here....]
 
index bbdad89a7e71a0bde738cc497d07600a15b8903c..fc4ae82d07423b606b2092a0ed921d622765ec3a 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * secret_conf.c: internal <secret> XML handling
  *
- * Copyright (C) 2009 Red Hat, Inc.
+ * Copyright (C) 2009, 2011 Red Hat, Inc.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -182,6 +182,7 @@ secretXMLParseNode(xmlDocPtr xml, xmlNodePtr root)
 
  cleanup:
     VIR_FREE(prop);
+    VIR_FREE(uuidstr);
     virSecretDefFree(def);
     xmlXPathFreeContext(ctxt);
     return ret;
index facad13d1b2fa95f402aeeb0e6d365be93bdaba1..f89fb79b2b49df80af98375b4f560ab852bad993 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * nwfilter_gentech_driver.c: generic technology driver
  *
+ * Copyright (C) 2011 Red Hat, Inc.
  * Copyright (C) 2010 IBM Corp.
  * Copyright (C) 2010 Stefan Berger
  *
@@ -660,8 +661,6 @@ virNWFilterInstantiate(virConnectPtr conn,
         }
 
         virNWFilterUnlockIface(ifname);
-
-        VIR_FREE(ptrs);
     }
 
 err_exit:
@@ -670,6 +669,7 @@ err_exit:
         virNWFilterRuleInstFree(insts[j]);
 
     VIR_FREE(insts);
+    VIR_FREE(ptrs);
 
     virNWFilterHashTableFree(missing_vars);
 
index 4ca52ba813c096344b78ac07fd1d0a4cb5c77b43..58d7f9642b8894d94b081b8eb615b224b7a9f66e 100644 (file)
@@ -479,22 +479,27 @@ doRemoteOpen (virConnectPtr conn,
         for (i = 0; i < vars->n; i++) {
             var = &vars->p[i];
             if (STRCASEEQ (var->name, "name")) {
+                VIR_FREE(name);
                 name = strdup (var->value);
                 if (!name) goto out_of_memory;
                 var->ignore = 1;
             } else if (STRCASEEQ (var->name, "command")) {
+                VIR_FREE(command);
                 command = strdup (var->value);
                 if (!command) goto out_of_memory;
                 var->ignore = 1;
             } else if (STRCASEEQ (var->name, "socket")) {
+                VIR_FREE(sockname);
                 sockname = strdup (var->value);
                 if (!sockname) goto out_of_memory;
                 var->ignore = 1;
             } else if (STRCASEEQ (var->name, "auth")) {
+                VIR_FREE(authtype);
                 authtype = strdup (var->value);
                 if (!authtype) goto out_of_memory;
                 var->ignore = 1;
             } else if (STRCASEEQ (var->name, "netcat")) {
+                VIR_FREE(netcat);
                 netcat = strdup (var->value);
                 if (!netcat) goto out_of_memory;
                 var->ignore = 1;
@@ -511,6 +516,7 @@ doRemoteOpen (virConnectPtr conn,
                 else
                     priv->debugLog = stderr;
             } else if (STRCASEEQ(var->name, "pkipath")) {
+                VIR_FREE(pkipath);
                 pkipath = strdup(var->value);
                 if (!pkipath) goto out_of_memory;
                 var->ignore = 1;
index d9a76033428fafb5eafb18ee683aebf2bed88924..71a344fefd7b632e5889a0dba9c8222a1f7cb3f5 100644 (file)
@@ -1,7 +1,7 @@
 /**
  * conf.c: parser for a subset of the Python encoded Xen configuration files
  *
- * Copyright (C) 2006, 2007, 2008, 2009, 2010 Red Hat, Inc.
+ * Copyright (C) 2006-2011 Red Hat, Inc.
  *
  * See COPYING.LIB for the License of this software
  *
@@ -648,22 +648,23 @@ virConfParseStatement(virConfParserCtxtPtr ctxt)
 
     SKIP_BLANKS_AND_EOL;
     if (CUR == '#') {
-        return(virConfParseComment(ctxt));
+        return virConfParseComment(ctxt);
     }
     name = virConfParseName(ctxt);
     if (name == NULL)
-        return(-1);
+        return -1;
     SKIP_BLANKS;
     if (CUR != '=') {
         virConfError(ctxt, VIR_ERR_CONF_SYNTAX, _("expecting an assignment"));
-        return(-1);
+        VIR_FREE(name);
+        return -1;
     }
     NEXT;
     SKIP_BLANKS;
     value = virConfParseValue(ctxt);
     if (value == NULL) {
         VIR_FREE(name);
-        return(-1);
+        return -1;
     }
     SKIP_BLANKS;
     if (CUR == '#') {
@@ -675,16 +676,16 @@ virConfParseStatement(virConfParserCtxtPtr ctxt)
             virReportOOMError();
             VIR_FREE(name);
             virConfFreeValue(value);
-            return(-1);
+            return -1;
         }
     }
     if (virConfAddEntry(ctxt->conf, name, value, comm) == NULL) {
         VIR_FREE(name);
         virConfFreeValue(value);
         VIR_FREE(comm);
-        return(-1);
+        return -1;
     }
-    return(0);
+    return 0;
 }
 
 /**
index 62dad0d8c420741d53241223435bd94cb576f632..ede79facf5c85b317542cf4fadbe668e7b0f0ebf 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * storage_file.c: file utility functions for FS storage backend
  *
- * Copyright (C) 2007-2010 Red Hat, Inc.
+ * Copyright (C) 2007-2011 Red Hat, Inc.
  * Copyright (C) 2007-2008 Daniel P. Berrange
  *
  * This library is free software; you can redistribute it and/or
@@ -838,8 +838,9 @@ virStorageFileGetMetadataFromFD(const char *path,
 
     if (format < 0 ||
         format >= VIR_STORAGE_FILE_LAST) {
-        virReportSystemError(EINVAL, _("unknown storage file format %d"), format);
-        return -1;
+        virReportSystemError(EINVAL, _("unknown storage file format %d"),
+                             format);
+        goto cleanup;
     }
 
     ret = virStorageFileGetMetadataFromBuf(format, path, head, len, meta);
index ff340d80a6cf1a97880ab2aa7c0f74d8bb77961a..2c50e147bea34113f0502d5665bedfbd20ac9adb 100644 (file)
@@ -105,9 +105,10 @@ virXPathStringLimit(const char *xpath,
 
     if (tmp != NULL && strlen(tmp) >= maxlen) {
         virXMLError(VIR_ERR_INTERNAL_ERROR,
-                    _("\'%s\' value longer than %zd bytes in virXPathStringLimit()"),
+                    _("\'%s\' value longer than %zd bytes"),
                     xpath, maxlen);
-            return NULL;
+        VIR_FREE(tmp);
+        return NULL;
     }
 
     return tmp;
index 62fca1722ba5bdb304adf2e3be801471cf163415..255542131676c4c628d5d0d540d8b99519805f56 100644 (file)
@@ -9518,6 +9518,8 @@ cmdCd(vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED)
 {
     const char *dir;
     int found;
+    int ret = TRUE;
+    bool dir_malloced = false;
 
     if (!ctl->imode) {
         vshError(ctl, "%s", _("cd: command valid only in interactive mode"));
@@ -9528,16 +9530,19 @@ cmdCd(vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED)
     if (!found) {
         uid_t uid = geteuid();
         dir = virGetUserDirectory(uid);
+        dir_malloced = !!dir;
     }
     if (!dir)
         dir = "/";
 
-    if (chdir (dir) == -1) {
+    if (chdir(dir) == -1) {
         vshError(ctl, _("cd: %s: %s"), strerror(errno), dir);
-        return FALSE;
+        ret = FALSE;
     }
 
-    return TRUE;
+    if (dir_malloced)
+        VIR_FREE(dir);
+    return ret;
 }
 
 #endif