From d0e0a909fae403dc1120fce8a45cdd6e3bbc45f1 Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Mon, 17 May 2021 14:48:36 +0200 Subject: [PATCH] driver: Don't leak saved error in virGetConnectGeneric() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Recently, a new code was added to virGetConnectGeneric() that saves the original error into a variable so that it's not lost in virConnectClose() called under the 'error' label. However, the error saving code uses virSaveLastError() + virSetError() combo which leaks the memory allocated for the error copy. Using virErrorPreserveLast() + virErrorRestore() does the same job without the memleak. Signed-off-by: Michal Privoznik Reviewed-by: Ján Tomko --- src/driver.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/driver.c b/src/driver.c index 227bb56e48..329d493a50 100644 --- a/src/driver.c +++ b/src/driver.c @@ -138,7 +138,7 @@ static virConnectPtr virGetConnectGeneric(virThreadLocal *threadPtr, const char *name) { virConnectPtr conn; - virErrorPtr saved; + virErrorPtr orig_err; if (virConnectCacheInitialize() < 0) return NULL; @@ -178,9 +178,9 @@ virGetConnectGeneric(virThreadLocal *threadPtr, const char *name) return conn; error: - saved = virSaveLastError(); + virErrorPreserveLast(&orig_err); virConnectClose(conn); - virSetError(saved); + virErrorRestore(&orig_err); return NULL; }