From 380f326955a25f84dca45b4eead2a7aa4d11e6f2 Mon Sep 17 00:00:00 2001 From: Osier Yang Date: Mon, 12 Dec 2011 15:26:20 +0800 Subject: [PATCH] storage: Fix a potential crash when creating vol object 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 to 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 reliable if we add the newly created vol object in the end. --- src/storage/storage_backend_logical.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/storage/storage_backend_logical.c b/src/storage/storage_backend_logical.c index d8217174d3..6a235f6833 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: -- GitLab