[libvirt] Fixes for several memory leaks

Phil Petty (phpetty) phpetty at cisco.com
Fri Mar 4 03:28:38 UTC 2011


Index: libvirt/src/conf/secret_conf.c

===================================================================

***************

*** 154,160 ****

                                   _("invalid value of 'private'"));

              goto cleanup;

          }

-         VIR_FREE(prop);

      }

  

      uuidstr = virXPathString("string(./uuid)", ctxt);

--- 154,159 ----

***************

*** 170,176 ****

                                   "%s", _("malformed uuid element"));

              goto cleanup;

          }

-         VIR_FREE(uuidstr);

      }

  

      def->description = virXPathString("string(./description)", ctxt);

--- 169,174 ----

***************

*** 181,187 ****

      def = NULL;

  

   cleanup:

!     VIR_FREE(prop);

      virSecretDefFree(def);

      xmlXPathFreeContext(ctxt);

      return ret;

--- 179,190 ----

      def = NULL;

  

   cleanup:

!     if (prop) {

!         VIR_FREE(prop);

!     }

!     if (uuidstr) {

!         VIR_FREE(uuidstr);

!     }

      virSecretDefFree(def);

      xmlXPathFreeContext(ctxt);

      return ret;

 

Index: libvirt/src/nwfilter/nwfilter_gentech_driver.c

===================================================================

***************

*** 662,673 ****

          }

  

          virNWFilterUnlockIface(ifname);

- 

-         VIR_FREE(ptrs);

      }

  

  err_exit:

  

      virNWFilterUnlockFilterUpdates();

  

      for (j = 0; j < nEntries; j++)

--- 662,675 ----

          }

  

          virNWFilterUnlockIface(ifname);

      }

  

  err_exit:

  

+     if (ptrs) {

+         VIR_FREE(ptrs);

+     }

+ 

      virNWFilterUnlockFilterUpdates();

  

      for (j = 0; j < nEntries; j++)

 

Index: libvirt/src/remote/remote_driver.c

===================================================================

***************

*** 474,495 ****

--- 474,510 ----

          for (i = 0; i < vars->n; i++) {

              var = &vars->p[i];

              if (STRCASEEQ (var->name, "name")) {

+                 if (name) {

+                     VIR_FREE(name);

+                 }

                  name = strdup (var->value);

                  if (!name) goto out_of_memory;

                  var->ignore = 1;

              } else if (STRCASEEQ (var->name, "command")) {

+                 if (command) {

+                     VIR_FREE(command);

+                 }

                  command = strdup (var->value);

                  if (!command) goto out_of_memory;

                  var->ignore = 1;

              } else if (STRCASEEQ (var->name, "socket")) {

+                 if (sockname) {

+                     VIR_FREE(sockname);

+                 }

                  sockname = strdup (var->value);

                  if (!sockname) goto out_of_memory;

                  var->ignore = 1;

              } else if (STRCASEEQ (var->name, "auth")) {

+                 if (authtype) {

+                     VIR_FREE(authtype);

+                 }

                  authtype = strdup (var->value);

                  if (!authtype) goto out_of_memory;

                  var->ignore = 1;

              } else if (STRCASEEQ (var->name, "netcat")) {

+                 if (netcat) {

+                     VIR_FREE(netcat);

+                 }

                  netcat = strdup (var->value);

                  if (!netcat) goto out_of_memory;

                  var->ignore = 1;

 

Index: libvirt/src/util/conf.c

===================================================================

***************

*** 651,656 ****

--- 651,657 ----

      SKIP_BLANKS;

      if (CUR != '=') {

          virConfError(ctxt, VIR_ERR_CONF_SYNTAX, _("expecting an
assignment"));

+         VIR_FREE(name);

          return(-1);

      }

      NEXT;

 

Index: libvirt/src/util/storage_file.c

===================================================================

***************

*** 742,747 ****

--- 742,748 ----

      if (format < 0 ||

          format >= VIR_STORAGE_FILE_LAST) {

          virReportSystemError(EINVAL, _("unknown storage file format
%d"), format);

+         VIR_FREE(head);

          return -1;

      }

  

 

Index: libvirt/src/util/xml.c

===================================================================

***************

*** 107,113 ****

          virXMLError(VIR_ERR_INTERNAL_ERROR,

                      _("\'%s\' value longer than %Zd bytes in
virXPathStringLimit()"),

                      xpath, maxlen);

!             return NULL;

      }

  

      return tmp;

--- 107,114 ----

          virXMLError(VIR_ERR_INTERNAL_ERROR,

                      _("\'%s\' value longer than %Zd bytes in
virXPathStringLimit()"),

                      xpath, maxlen);

!         VIR_FREE(tmp);

!         return NULL;

      }

  

      return tmp;

 

Index: libvirt/tools/virsh.c

===================================================================

***************

*** 8697,8702 ****

--- 8697,8703 ----

  {

      const char *dir;

      int found;

+     int dir_root = FALSE;

  

      if (!ctl->imode) {

          vshError(ctl, "%s", _("cd: command valid only in interactive
mode"));

***************

*** 8708,8721 ****

          uid_t uid = geteuid();

          dir = virGetUserDirectory(uid);

      }

!     if (!dir)

          dir = "/";

  

      if (chdir (dir) == -1) {

          vshError(ctl, _("cd: %s: %s"), strerror(errno), dir);

          return FALSE;

      }

  

      return TRUE;

  }

  

--- 8709,8730 ----

          uid_t uid = geteuid();

          dir = virGetUserDirectory(uid);

      }

!     if (!dir) {

          dir = "/";

+         dir_root = TRUE;

+     }

  

      if (chdir (dir) == -1) {

          vshError(ctl, _("cd: %s: %s"), strerror(errno), dir);

+         if (!dir_root) {

+             VIR_FREE(dir);

+         }

          return FALSE;

      }

  

+     if (!dir_root) {

+         VIR_FREE(dir);

+     }

      return TRUE;

  }

 

Kind regards,

Phil Petty

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20110304/de59d335/attachment-0001.htm>


More information about the libvir-list mailing list