init_route() can allocate memory in netlist, but fail in many more ways
than just fail to allocate. Thus, always check and clean up netlist if
needed, instead of just when init_route() succeeds.
This fix is for master only. The release/2.3 branch cleans up netlist
immediately, and needs a different patch for a similar problem.
Found using coverity.
v2: initialize netlist to NULL
Signed-off-by: Steffan Karger <steffan@karger.me>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <
1446795759-3288-1-git-send-email-steffan@karger.me>
URL: http://article.gmane.org/gmane.network.openvpn.devel/10443
Signed-off-by: Gert Doering <gert@greenie.muc.de>
struct route_option *ro;
for (ro = opt->routes; ro; ro = ro->next)
{
- struct addrinfo* netlist;
+ struct addrinfo* netlist = NULL;
struct route_ipv4 r;
if (!init_route (&r, &netlist, ro, rl))
else
{
struct addrinfo* curele;
- gc_addspecial(netlist, &gc_freeaddrinfo_callback, &gc);
for (curele = netlist; curele; curele = curele->ai_next)
{
struct route_ipv4 *new;
rl->routes = new;
}
}
+ if (netlist)
+ gc_addspecial(netlist, &gc_freeaddrinfo_callback, &gc);
}
}