[Openvpn-devel] delete_routes(_ipv6): avoid memleak if RT_DEFINED is not set
Commit Message
In this case the function would exit without releasing the argv object
initialized via argv_new().
Move initialization of argv after thic check is performed.
While at it, also move the declaration of gc and initizlize it with
gc_new().
Reported-by: Camille Guérin <guerincamille56@gmail.com>
Signed-off-by: Antonio Quartulli <a@unstable.cc>
---
src/openvpn/route.c | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
Comments
Acked-by: Gert Doering <gert@greenie.muc.de>
Thanks for spotting this and sending a patch.
Not sure why this was fixed for add_route*() in commit a11bea18b1c93
(and then made more pretty in 903e2cf5c1), but forgotten in delete_route*()
Tested with a basic t_client test with ipv4 + ipv6 routes.
Your patch has been applied to the master branch.
commit 5ac33a88b10584c3e52dc0c01dad2571b75be239
Author: Antonio Quartulli
Date: Sun Sep 18 00:42:27 2022 +0200
delete_routes(_ipv6): avoid memleak if RT_DEFINED is not set
Signed-off-by: Antonio Quartulli <a@unstable.cc>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220917224227.16988-1-a@unstable.cc>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25245.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
--
kind regards,
Gert Doering
@@ -2145,8 +2145,6 @@ delete_route(struct route_ipv4 *r,
const struct env_set *es,
openvpn_net_ctx_t *ctx)
{
- struct gc_arena gc;
- struct argv argv = argv_new();
#if !defined(TARGET_LINUX)
const char *network;
#if !defined(TARGET_AIX)
@@ -2165,7 +2163,8 @@ delete_route(struct route_ipv4 *r,
return;
}
- gc_init(&gc);
+ struct gc_arena gc = gc_new();
+ struct argv argv = argv_new();
#if !defined(TARGET_LINUX)
network = print_in_addr_t(r->network, 0, &gc);
@@ -2336,8 +2335,6 @@ delete_route_ipv6(const struct route_ipv6 *r6, const struct tuntap *tt,
unsigned int flags, const struct env_set *es,
openvpn_net_ctx_t *ctx)
{
- struct gc_arena gc;
- struct argv argv = argv_new();
const char *network;
#if !defined(TARGET_LINUX)
const char *gateway;
@@ -2360,7 +2357,8 @@ delete_route_ipv6(const struct route_ipv6 *r6, const struct tuntap *tt,
}
#endif
- gc_init(&gc);
+ struct gc_arena gc = gc_new();
+ struct argv argv = argv_new();
network = print_in6_addr( r6->network, 0, &gc);
#if !defined(TARGET_LINUX)