From 3df86ef17bce9f24c3dad79ccc2b17aa6e93ea34 Mon Sep 17 00:00:00 2001 From: Guus Sliepen Date: Wed, 24 Dec 2014 17:31:33 +0100 Subject: [PATCH] Fix memory leaks found by Valgrind. --- src/net_setup.c | 5 +++-- src/openssl/crypto.c | 2 ++ src/subnet.c | 30 ++++++++++++++---------------- 3 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/net_setup.c b/src/net_setup.c index 0a99daad..a7ed3a89 100644 --- a/src/net_setup.c +++ b/src/net_setup.c @@ -1114,7 +1114,7 @@ void close_network_connections(void) { if (!device_standby) device_disable(); - if(myport) free(myport); + free(myport); if (device_fd >= 0) io_del(&device_io); @@ -1124,7 +1124,8 @@ void close_network_connections(void) { exit_control(); free(myname); - myname = NULL; + free(scriptextension); + free(scriptinterpreter); return; } diff --git a/src/openssl/crypto.c b/src/openssl/crypto.c index ed8c8e29..5b866b0b 100644 --- a/src/openssl/crypto.c +++ b/src/openssl/crypto.c @@ -99,5 +99,7 @@ void crypto_init(void) { void crypto_exit(void) { EVP_cleanup(); + ERR_free_strings(); + ENGINE_cleanup(); random_exit(); } diff --git a/src/subnet.c b/src/subnet.c index 5356f3a7..534e5b53 100644 --- a/src/subnet.c +++ b/src/subnet.c @@ -207,21 +207,21 @@ void subnet_update(node_t *owner, subnet_t *subnet, bool up) { // Prepare environment variables to be passed to the script char *envp[10] = {NULL}; - xasprintf(&envp[0], "NETNAME=%s", netname ? : ""); - xasprintf(&envp[1], "DEVICE=%s", device ? : ""); - xasprintf(&envp[2], "INTERFACE=%s", iface ? : ""); - xasprintf(&envp[3], "NODE=%s", owner->name); + int n = 0; + xasprintf(&envp[n++], "NETNAME=%s", netname ? : ""); + xasprintf(&envp[n++], "DEVICE=%s", device ? : ""); + xasprintf(&envp[n++], "INTERFACE=%s", iface ? : ""); + xasprintf(&envp[n++], "NODE=%s", owner->name); if(owner != myself) { sockaddr2str(&owner->address, &address, &port); - // 4 and 5 are reserved for SUBNET and WEIGHT - xasprintf(&envp[6], "REMOTEADDRESS=%s", address); - xasprintf(&envp[7], "REMOTEPORT=%s", port); + xasprintf(&envp[n++], "REMOTEADDRESS=%s", address); + xasprintf(&envp[n++], "REMOTEPORT=%s", port); free(port); free(address); } - xasprintf(&envp[8], "NAME=%s", myself->name); + xasprintf(&envp[n++], "NAME=%s", myself->name); name = up ? "subnet-up" : "subnet-down"; @@ -238,12 +238,10 @@ void subnet_update(node_t *owner, subnet_t *subnet, bool up) { weight = empty; // Prepare the SUBNET and WEIGHT variables - if(envp[4]) - free(envp[4]); - if(envp[5]) - free(envp[5]); - xasprintf(&envp[4], "SUBNET=%s", netstr); - xasprintf(&envp[5], "WEIGHT=%s", weight); + free(envp[n]); + free(envp[n + 1]); + xasprintf(&envp[n], "SUBNET=%s", netstr); + xasprintf(&envp[n + 1], "WEIGHT=%s", weight); execute_script(name, envp); } @@ -257,8 +255,8 @@ void subnet_update(node_t *owner, subnet_t *subnet, bool up) { weight = empty; // Prepare the SUBNET and WEIGHT variables - xasprintf(&envp[4], "SUBNET=%s", netstr); - xasprintf(&envp[5], "WEIGHT=%s", weight); + xasprintf(&envp[n], "SUBNET=%s", netstr); + xasprintf(&envp[n + 1], "WEIGHT=%s", weight); execute_script(name, envp); } -- 2.20.1