From: Guus Sliepen Date: Wed, 24 Dec 2014 16:31:33 +0000 (+0100) Subject: Fix memory leaks found by Valgrind. X-Git-Tag: release-1.1pre11~15 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=3df86ef17bce9f24c3dad79ccc2b17aa6e93ea34;p=oweals%2Ftinc.git Fix memory leaks found by Valgrind. --- diff --git a/src/net_setup.c b/src/net_setup.c index 0a99daa..a7ed3a8 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 ed8c8e2..5b866b0 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 5356f3a..534e5b5 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); }