[libvirt] [PATCH] storage: Fix a potential crash when creating vol object

Osier Yang jyang at redhat.com
Mon Dec 12 07:26:20 UTC 2011


If the vol object is newly created, it increases the volumes count,
but doesn't decrease the volumes count when do cleanup. It can
cause libvirtd crash when one trying to free the volume objects
like:
    for (i = 0; i < pool->volumes.count; i++)
        virStorageVolDefFree(pool->volumes.objs[i]);

It's more reliale if we add the newly created vol object in the
end.
---
 src/storage/storage_backend_logical.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/src/storage/storage_backend_logical.c b/src/storage/storage_backend_logical.c
index 61c89a2..1420ede 100644
--- a/src/storage/storage_backend_logical.c
+++ b/src/storage/storage_backend_logical.c
@@ -110,7 +110,6 @@ virStorageBackendLogicalMakeVol(virStoragePoolObjPtr pool,
             virReportOOMError();
             goto cleanup;
         }
-        pool->volumes.objs[pool->volumes.count++] = vol;
     }
 
     if (vol->target.path == NULL) {
@@ -254,6 +253,9 @@ virStorageBackendLogicalMakeVol(virStoragePoolObjPtr pool,
         vol->source.nextent++;
     }
 
+    if (is_new_vol)
+        pool->volumes.objs[pool->volumes.count++] = vol;
+
     ret = 0;
 
 cleanup:
-- 
1.7.1




More information about the libvir-list mailing list