From 4e5eb0a6c6996229f4daf3c23398cf62b910637d Mon Sep 17 00:00:00 2001 From: Cathy Avery Date: Fri, 15 Nov 2019 14:49:06 +0100 Subject: [PATCH 1/3] Fix memory leaks in 'vix' tools RH-Author: Cathy Avery Message-id: <20191115144908.7669-2-cavery@redhat.com> Patchwork-id: 92388 O-Subject: [RHEL7.7.z open-vm-tools PATCH 1/3] Fix memory leaks in 'vix' tools plugin. Bugzilla: 1772825 RH-Acked-by: Vitaly Kuznetsov RH-Acked-by: Eduardo Otubo commit 015db4c06a8be65eb96cf62421e8b5366993452f Author: Oliver Kurth Date: Wed Aug 29 13:29:45 2018 -0700 Fix memory leaks in 'vix' tools plugin. * vix plugin retrieves the power script file paths from the config file but doesn't free them and this causes a memory leak. Fixed the code to free the filepaths. * In GuestAuthPasswordAuthenticateImpersonate function, the VGAuth handle is not freed when the impersonation fails. Fixed the code to call VGAuth_UserHandleFree in the error path. Note: I executed one guest operation with wrong credentials. Every failure leaks 75 bytes of memory. (in Centos 64-bit VM) * Fixed another minor issue in the code. At couple of places in the code, replaced 'err' with 'vgErr' for storing the return value of VGAuth_UserHandleAccessToken. Signed-off-by: Cathy Avery Signed-off-by: Miroslav Rezanina --- services/plugins/vix/vixTools.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/services/plugins/vix/vixTools.c b/services/plugins/vix/vixTools.c index 7997fee..7ed9f43 100644 --- a/services/plugins/vix/vixTools.c +++ b/services/plugins/vix/vixTools.c @@ -2438,10 +2438,10 @@ VixTools_GetToolsPropertiesImpl(GKeyFile *confDictRef, // IN char *guestName; int osFamily; char *packageList = NULL; - const char *powerOffScript = NULL; - const char *powerOnScript = NULL; - const char *resumeScript = NULL; - const char *suspendScript = NULL; + char *powerOffScript = NULL; + char *powerOnScript = NULL; + char *resumeScript = NULL; + char *suspendScript = NULL; char *osName = NULL; char *osNameFull = NULL; Bool foundHostName; @@ -2642,6 +2642,10 @@ abort: free(tempDir); free(osName); free(osNameFull); + free(suspendScript); + free(resumeScript); + free(powerOnScript); + free(powerOffScript); #else /* * FreeBSD. We do not require all the properties above. @@ -11425,7 +11429,7 @@ GuestAuthPasswordAuthenticateImpersonate( #ifdef _WIN32 // this is making a copy of the token, be sure to close it - err = VGAuth_UserHandleAccessToken(ctx, newHandle, userToken); + vgErr = VGAuth_UserHandleAccessToken(ctx, newHandle, userToken); if (VGAUTH_FAILED(vgErr)) { err = VixToolsTranslateVGAuthError(vgErr); goto done; @@ -11441,6 +11445,10 @@ done: free(username); Util_ZeroFreeString(password); + if (VIX_OK != err) { + VGAuth_UserHandleFree(newHandle); + newHandle = NULL; + } return err; #else return VIX_E_NOT_SUPPORTED; @@ -11571,7 +11579,7 @@ impersonate: #ifdef _WIN32 // this is making a copy of the token, be sure to close it - err = VGAuth_UserHandleAccessToken(ctx, newHandle, userToken); + vgErr = VGAuth_UserHandleAccessToken(ctx, newHandle, userToken); if (VGAUTH_FAILED(vgErr)) { err = VixToolsTranslateVGAuthError(vgErr); goto done; -- 1.8.3.1