[libvirt PATCH 3/9] esx: fix memory leak by switching to g_autofree

Laine Stump laine at redhat.com
Fri Feb 12 22:07:11 UTC 2021


volumeName was defined at the top of the function, then a new string
was assigned to it each time through a loop, but after the first
iteration of the loop, the previous string wasn't freed before
allocating a new string the next time. By reducing the scope of
volumeName to be just the loop, and making it g_autofree, we eliminate
the leak.

Signed-off-by: Laine Stump <laine at redhat.com>
---
 src/esx/esx_storage_backend_vmfs.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/src/esx/esx_storage_backend_vmfs.c b/src/esx/esx_storage_backend_vmfs.c
index 63959ec237..225b2a4751 100644
--- a/src/esx/esx_storage_backend_vmfs.c
+++ b/src/esx/esx_storage_backend_vmfs.c
@@ -728,7 +728,6 @@ esxStorageVolLookupByKey(virConnectPtr conn, const char *key)
     esxVI_HostDatastoreBrowserSearchResults *searchResultsList = NULL;
     esxVI_HostDatastoreBrowserSearchResults *searchResults = NULL;
     size_t length;
-    char *volumeName = NULL;
     esxVI_FileInfo *fileInfo = NULL;
     char key_candidate[VIR_UUID_STRING_BUFLEN] = "";
 
@@ -789,6 +788,7 @@ esxStorageVolLookupByKey(virConnectPtr conn, const char *key)
             /* Build datastore path and query the UUID */
             for (fileInfo = searchResults->file; fileInfo;
                  fileInfo = fileInfo->_next) {
+                g_autofree char *volumeName = NULL;
                 g_autofree char *datastorePath = NULL;
                 g_autofree char *uuid_string = NULL;
 
@@ -831,8 +831,6 @@ esxStorageVolLookupByKey(virConnectPtr conn, const char *key)
     esxVI_String_Free(&propertyNameList);
     esxVI_ObjectContent_Free(&datastoreList);
     esxVI_HostDatastoreBrowserSearchResults_Free(&searchResultsList);
-    VIR_FREE(volumeName);
-
     return volume;
 }
 
-- 
2.29.2




More information about the libvir-list mailing list