From 0cf672fa91b4eb0bf7f80e618c4cac0c84cebe2e Mon Sep 17 00:00:00 2001 From: Ryota Ozaki Date: Fri, 4 Sep 2009 15:56:32 +0200 Subject: [PATCH] Fix several memory leaks * src/domain_conf.c src/network_conf.c src/qemu_conf.c src/storage_backend_fs.c: various problems spotted by valgrind through libvirt code --- src/domain_conf.c | 1 + src/network_conf.c | 5 +++-- src/qemu_conf.c | 13 ++++++++----- src/storage_backend_fs.c | 2 ++ 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/domain_conf.c b/src/domain_conf.c index 7eb0714222..8dde5ddf19 100644 --- a/src/domain_conf.c +++ b/src/domain_conf.c @@ -4496,6 +4496,7 @@ int virDomainSaveXML(virConnectPtr conn, cleanup: if (fd != -1) close(fd); + VIR_FREE(configFile); return ret; } diff --git a/src/network_conf.c b/src/network_conf.c index bb649a4aba..58a4f322b4 100644 --- a/src/network_conf.c +++ b/src/network_conf.c @@ -820,6 +820,7 @@ int virNetworkDeleteConfig(virConnectPtr conn, { char *configFile = NULL; char *autostartLink = NULL; + int ret = -1; if ((configFile = virNetworkConfigFile(conn, configDir, net->def->name)) == NULL) goto error; @@ -836,12 +837,12 @@ int virNetworkDeleteConfig(virConnectPtr conn, goto error; } - return 0; + ret = 0; error: VIR_FREE(configFile); VIR_FREE(autostartLink); - return -1; + return ret; } char *virNetworkConfigFile(virConnectPtr conn, diff --git a/src/qemu_conf.c b/src/qemu_conf.c index 2c4a37d34f..c6b4184ab0 100644 --- a/src/qemu_conf.c +++ b/src/qemu_conf.c @@ -1066,7 +1066,7 @@ qemudNetworkIfaceConnect(virConnectPtr conn, virDomainNetDefPtr net, int qemuCmdFlags) { - char *brname; + char *brname = NULL; int err; int tapfd = -1; int vnet_hdr = 0; @@ -1085,7 +1085,7 @@ qemudNetworkIfaceConnect(virConnectPtr conn, if (brname == NULL) return -1; } else if (net->type == VIR_DOMAIN_NET_TYPE_BRIDGE) { - brname = net->data.bridge.brname; + brname = strdup(net->data.bridge.brname); } else { qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, _("Network type %d is not supported"), net->type); @@ -1095,7 +1095,7 @@ qemudNetworkIfaceConnect(virConnectPtr conn, if (!driver->brctl && (err = brInit(&driver->brctl))) { virReportSystemError(conn, err, "%s", _("cannot initialize bridge support")); - return -1; + goto cleanup; } if (!net->ifname || @@ -1104,7 +1104,7 @@ qemudNetworkIfaceConnect(virConnectPtr conn, VIR_FREE(net->ifname); if (!(net->ifname = strdup("vnet%d"))) { virReportOOMError(conn); - return -1; + goto cleanup; } /* avoid exposing vnet%d in dumpxml or error outputs */ template_ifname = 1; @@ -1132,9 +1132,12 @@ qemudNetworkIfaceConnect(virConnectPtr conn, } if (template_ifname) VIR_FREE(net->ifname); - return -1; + tapfd = -1; } +cleanup: + VIR_FREE(brname); + return tapfd; } diff --git a/src/storage_backend_fs.c b/src/storage_backend_fs.c index 82415049ce..5ff0ed88a4 100644 --- a/src/storage_backend_fs.c +++ b/src/storage_backend_fs.c @@ -1056,6 +1056,7 @@ virStorageBackendFileSystemVolCreate(virConnectPtr conn, vol->type = VIR_STORAGE_VOL_FILE; + VIR_FREE(vol->target.path); if (virAsprintf(&vol->target.path, "%s/%s", pool->def->target.path, vol->name) == -1) { @@ -1063,6 +1064,7 @@ virStorageBackendFileSystemVolCreate(virConnectPtr conn, return -1; } + VIR_FREE(vol->key); vol->key = strdup(vol->target.path); if (vol->key == NULL) { virReportOOMError(conn);