Any "goto out_of_memory" taken between the vars = qparam_query_parse (query) allocation and the free_qparam_set call would result in a leak. Here's the fix: >From a3a21142e40962c960eae882ac9edcc3bd17cb8b Mon Sep 17 00:00:00 2001 From: Jim Meyering <meyering@xxxxxxxxxx> Date: Thu, 11 Feb 2010 12:51:31 +0100 Subject: [PATCH] remote_driver.c: avoid leak on OOM error path * src/remote/remote_driver.c (doRemoteOpen): Don't leak a qparam_set buffer upon OOM error. --- src/remote/remote_driver.c | 7 +++++-- 1 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c index e17db3d..cc543fc 100644 --- a/src/remote/remote_driver.c +++ b/src/remote/remote_driver.c @@ -2,7 +2,7 @@ * remote_internal.c: driver to provide access to libvirtd running * on a remote machine * - * Copyright (C) 2007-2009 Red Hat, Inc. + * Copyright (C) 2007-2010 Red Hat, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -370,6 +370,7 @@ doRemoteOpen (virConnectPtr conn, virConnectAuthPtr auth ATTRIBUTE_UNUSED, int flags) { + struct qparam_set *vars = NULL; int wakeupFD[2] = { -1, -1 }; char *transport_str = NULL; enum { @@ -458,7 +459,6 @@ doRemoteOpen (virConnectPtr conn, * feasibly it might contain variables needed by the real driver, * although that won't be the case for now). */ - struct qparam_set *vars; struct qparam *var; int i; char *query; @@ -551,6 +551,7 @@ doRemoteOpen (virConnectPtr conn, } free_qparam_set (vars); + vars = NULL; } else { /* Probe URI server side */ name = strdup(""); @@ -933,6 +934,8 @@ doRemoteOpen (virConnectPtr conn, out_of_memory: virReportOOMError(); + if (vars) + free_qparam_set (vars); failed: /* Close the socket if we failed. */ -- 1.7.0.rc2.170.gbc565 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list