From b8cdf3cbe477b0df75e16d37d6270f96c6f5369b Mon Sep 17 00:00:00 2001 From: Heikki Hannikainen Date: Sat, 13 Aug 2016 16:22:08 +0300 Subject: [PATCH] Fix a couple of small memory leaks, which may happen in error cases when loading configuration --- src/acl.c | 4 +++- src/config.c | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/acl.c b/src/acl.c index 7978a1e..c1f702a 100644 --- a/src/acl.c +++ b/src/acl.c @@ -122,6 +122,8 @@ int acl_add(struct acl_t *acl, char *netspec, int allow) prefixlen = atoi(prefixls); if (prefixlen < 0 || prefixlen > 128) { hlog(LOG_ERR, "ACL: invalid prefix len '%s' for '%s'", prefixls, netspec); + if (ai) + freeaddrinfo(ai); return -1; } } @@ -179,7 +181,7 @@ int acl_add(struct acl_t *acl, char *netspec, int allow) } hfree(addr_s); - hfree(ai); + freeaddrinfo(ai); ai = nextai; } diff --git a/src/config.c b/src/config.c index d7d13b6..548149d 100644 --- a/src/config.c +++ b/src/config.c @@ -489,6 +489,8 @@ int do_peergroup(struct peerip_config_t **lq, int argc, char **argv) char *peerid = NULL; char *fullhost, *host_s, *port_s; int af; + + ai = my_ai = a = NULL; if (argc < 4) return -1; @@ -535,6 +537,7 @@ int do_peergroup(struct peerip_config_t **lq, int argc, char **argv) if (d != 1) { hlog(LOG_ERR, "PeerGroup: address parsing for local address %s returned %d addresses - can only have one", fullhost, d); hfree(fullhost); + freeaddrinfo(my_ai); return -2; } @@ -626,6 +629,7 @@ int do_peergroup(struct peerip_config_t **lq, int argc, char **argv) fullhost = NULL; hfree(peerid); freeaddrinfo(ai); + ai = NULL; continue; } @@ -665,6 +669,8 @@ err: hfree(fullhost); if (peerid) hfree(peerid); + if (ai) + freeaddrinfo(ai); return -2; }