From: Eric Blake Date: Tue, 30 Nov 2010 16:00:30 +0000 (-0700) Subject: qemu: plug memory leak X-Git-Tag: v0.8.7~188 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=428ea3a6261aa394d2ec465fcc45c45788e5f068;p=thirdparty%2Flibvirt.git qemu: plug memory leak * src/qemu/qemu_driver.c (qemudShutdown): Free all strings and the ebtables structure. * src/libvirt_private.syms (ebtablesContextFree): Export missing symbol. * src/util/ebtables.c (ebtablesContextFree): Allow early exit. --- diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 3c1c823d44..f251c94345 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -326,6 +326,7 @@ virDomainConfVMNWFilterTeardown; # ebtables.h ebtablesAddForwardAllowIn; ebtablesAddForwardPolicyReject; +ebtablesContextFree; ebtablesContextNew; ebtablesRemoveForwardAllowIn; diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 73b1e3ff81..853995c437 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -2069,10 +2069,9 @@ qemudShutdown(void) { virSysinfoDefFree(qemu_driver->hostsysinfo); - VIR_FREE(qemu_driver->securityDriverName); - VIR_FREE(qemu_driver->logDir); VIR_FREE(qemu_driver->configDir); VIR_FREE(qemu_driver->autostartDir); + VIR_FREE(qemu_driver->logDir); VIR_FREE(qemu_driver->stateDir); VIR_FREE(qemu_driver->libDir); VIR_FREE(qemu_driver->cacheDir); @@ -2082,9 +2081,16 @@ qemudShutdown(void) { VIR_FREE(qemu_driver->vncListen); VIR_FREE(qemu_driver->vncPassword); VIR_FREE(qemu_driver->vncSASLdir); - VIR_FREE(qemu_driver->saveImageFormat); + VIR_FREE(qemu_driver->spiceTLSx509certdir); + VIR_FREE(qemu_driver->spiceListen); + VIR_FREE(qemu_driver->spicePassword); VIR_FREE(qemu_driver->hugetlbfs_mount); VIR_FREE(qemu_driver->hugepage_path); + VIR_FREE(qemu_driver->securityDriverName); + VIR_FREE(qemu_driver->saveImageFormat); + VIR_FREE(qemu_driver->dumpImageFormat); + + ebtablesContextFree(qemu_driver->ebtables); if (qemu_driver->cgroupDeviceACL) { for (i = 0 ; qemu_driver->cgroupDeviceACL[i] != NULL ; i++) diff --git a/src/util/ebtables.c b/src/util/ebtables.c index f707756e4b..e3b8da4dbd 100644 --- a/src/util/ebtables.c +++ b/src/util/ebtables.c @@ -300,6 +300,8 @@ ebtablesContextNew(const char *driver) void ebtablesContextFree(ebtablesContext *ctx) { + if (!ctx) + return; if (ctx->input_filter) ebtRulesFree(ctx->input_filter); if (ctx->forward_filter)