]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
storage: avoid memory leak
authorEric Blake <eblake@redhat.com>
Thu, 2 Jun 2011 22:08:28 +0000 (16:08 -0600)
committerEric Blake <eblake@redhat.com>
Fri, 3 Jun 2011 14:11:42 +0000 (08:11 -0600)
Coverity detected that options was being set by strdup but never
freed.  But why even bother with an options variable?  The options
parameter never changes!  Leak present since commit 44948f5b (0.7.0).

This function could probably be rewritten to take better advantage
of virCommand, but that is more invasive.

* src/storage/storage_backend_fs.c
(virStorageBackendFileSystemMount): Avoid wasted strdup, and
guarantee proper cleanup on all paths.

src/storage/storage_backend_fs.c

index 3f4d97822fbb97e2de3145526724054d09419cb7..207669aba1dae8f03a0e7b182841188ff9769b93 100644 (file)
@@ -317,7 +317,6 @@ virStorageBackendFileSystemIsMounted(virStoragePoolObjPtr pool) {
 static int
 virStorageBackendFileSystemMount(virStoragePoolObjPtr pool) {
     char *src;
-    char *options = NULL;
     const char **mntargv;
 
     /* 'mount -t auto' doesn't seem to auto determine nfs (or cifs),
@@ -328,7 +327,6 @@ virStorageBackendFileSystemMount(virStoragePoolObjPtr pool) {
     int glusterfs = (pool->def->type == VIR_STORAGE_POOL_NETFS &&
                  pool->def->source.format == VIR_STORAGE_POOL_NETFS_GLUSTERFS);
 
-    int option_index;
     int source_index;
 
     const char *netfs_auto_argv[] = {
@@ -358,7 +356,7 @@ virStorageBackendFileSystemMount(virStoragePoolObjPtr pool) {
         virStoragePoolFormatFileSystemNetTypeToString(pool->def->source.format),
         NULL,
         "-o",
-        NULL,
+        "direct-io-mode=1",
         pool->def->target.path,
         NULL,
     };
@@ -369,7 +367,6 @@ virStorageBackendFileSystemMount(virStoragePoolObjPtr pool) {
     } else if (glusterfs) {
         mntargv = glusterfs_argv;
         source_index = 3;
-        option_index = 5;
     } else {
         mntargv = fs_argv;
         source_index = 3;
@@ -405,12 +402,6 @@ virStorageBackendFileSystemMount(virStoragePoolObjPtr pool) {
     }
 
     if (pool->def->type == VIR_STORAGE_POOL_NETFS) {
-        if (pool->def->source.format == VIR_STORAGE_POOL_NETFS_GLUSTERFS) {
-            if ((options = strdup("direct-io-mode=1")) == NULL) {
-                virReportOOMError();
-                return -1;
-            }
-        }
         if (virAsprintf(&src, "%s:%s",
                         pool->def->source.host.name,
                         pool->def->source.dir) == -1) {
@@ -426,10 +417,6 @@ virStorageBackendFileSystemMount(virStoragePoolObjPtr pool) {
     }
     mntargv[source_index] = src;
 
-    if (glusterfs) {
-        mntargv[option_index] = options;
-    }
-
     if (virRun(mntargv, NULL) < 0) {
         VIR_FREE(src);
         return -1;