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@xxxxxxxxxx> --- 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