From e7c27b4f3f2538045278dc1c20dbfa2da9c271e3 Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Tue, 11 Nov 2008 09:56:47 +0000 Subject: fixing a memory leak --- src/charon/plugins/kernel_netlink/kernel_netlink_ipsec.c | 10 +++++++--- src/charon/plugins/kernel_pfkey/kernel_pfkey_ipsec.c | 10 +++++++--- 2 files changed, 14 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/charon/plugins/kernel_netlink/kernel_netlink_ipsec.c b/src/charon/plugins/kernel_netlink/kernel_netlink_ipsec.c index d0c9b721b..6832222a4 100644 --- a/src/charon/plugins/kernel_netlink/kernel_netlink_ipsec.c +++ b/src/charon/plugins/kernel_netlink/kernel_netlink_ipsec.c @@ -1756,6 +1756,7 @@ static bool add_bypass_policies() { int fd, family, port; enumerator_t *sockets; + bool status = TRUE; /* we open an AF_KEY socket to autoload the af_key module. Otherwise * setsockopt(IPSEC_POLICY) won't work. */ @@ -1797,17 +1798,20 @@ static bool add_bypass_policies() { DBG1(DBG_KNL, "unable to set IPSEC_POLICY on socket: %s", strerror(errno)); - return FALSE; + status = FALSE; + break; } policy.sadb_x_policy_dir = IPSEC_DIR_INBOUND; if (setsockopt(fd, sol, ipsec_policy, &policy, sizeof(policy)) < 0) { DBG1(DBG_KNL, "unable to set IPSEC_POLICY on socket: %s", strerror(errno)); - return FALSE; + status = FALSE; + break; } } - return TRUE; + sockets->destroy(sockets); + return status; } /* diff --git a/src/charon/plugins/kernel_pfkey/kernel_pfkey_ipsec.c b/src/charon/plugins/kernel_pfkey/kernel_pfkey_ipsec.c index 1f2c6516d..313642f58 100644 --- a/src/charon/plugins/kernel_pfkey/kernel_pfkey_ipsec.c +++ b/src/charon/plugins/kernel_pfkey/kernel_pfkey_ipsec.c @@ -1879,6 +1879,7 @@ static bool add_bypass_policies(private_kernel_pfkey_ipsec_t *this) { int fd, family, port; enumerator_t *sockets; + bool status = TRUE; sockets = charon->socket->create_enumerator(charon->socket); while (sockets->enumerate(sockets, &fd, &family, &port)) @@ -1910,17 +1911,20 @@ static bool add_bypass_policies(private_kernel_pfkey_ipsec_t *this) { DBG1(DBG_KNL, "unable to set IPSEC_POLICY on socket: %s", strerror(errno)); - return FALSE; + status = FALSE; + break; } policy.sadb_x_policy_dir = IPSEC_DIR_INBOUND; if (setsockopt(fd, sol, ipsec_policy, &policy, sizeof(policy)) < 0) { DBG1(DBG_KNL, "unable to set IPSEC_POLICY on socket: %s", strerror(errno)); - return FALSE; + status = FALSE; + break; } } - return TRUE; + sockets->destroy(sockets); + return status; } /* -- cgit v1.2.3