aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAntonio Quartulli2018-06-13 20:28:22 +0800
committerGert Doering2018-06-13 14:35:15 +0200
commit18225f0fd5c45164308d4d66db055a1ad3960887 (patch)
tree52c9db69343841b6b8c0252aaf3ae9083ac2bd73 /src
parent62b1cc161c53d900b6fe56f6924ef2ec1c1b8a00 (diff)
downloadopenvpn-18225f0fd5c45164308d4d66db055a1ad3960887.zip
openvpn-18225f0fd5c45164308d4d66db055a1ad3960887.tar.gz
tun: ensure gc and argv are properly handled
Everytime a argv object is initialized with argv_new(), it has to be released with argv_reset() once not needed anymore. Ensure this kind of objects are always properly released to avoid memory leaks. At the same time, remove those gc_arena objects that are initialized but never used/released. Signed-off-by: Antonio Quartulli <antonio@openvpn.net> Acked-by: Gert Doering <gert@greenie.muc.de> Message-Id: <20180613122824.4207-2-a@unstable.cc> URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg17044.html Signed-off-by: Gert Doering <gert@greenie.muc.de>
Diffstat (limited to 'src')
-rw-r--r--src/openvpn/tun.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/openvpn/tun.c b/src/openvpn/tun.c
index 3eb0f78..72506c4 100644
--- a/src/openvpn/tun.c
+++ b/src/openvpn/tun.c
@@ -2600,7 +2600,6 @@ close_tun(struct tuntap *tt)
}
else if (tt)
{
- struct gc_arena gc = gc_new();
struct argv argv = argv_new();
/* setup command, close tun dev (clears tt->actual_name!), run command
@@ -2615,6 +2614,7 @@ close_tun(struct tuntap *tt)
openvpn_execve_check(&argv, NULL, 0, "OpenBSD 'destroy tun interface' failed (non-critical)");
free(tt);
+ argv_reset(&argv);
}
}
@@ -2685,7 +2685,6 @@ close_tun(struct tuntap *tt)
}
else if (tt)
{
- struct gc_arena gc = gc_new();
struct argv argv = argv_new();
/* setup command, close tun dev (clears tt->actual_name!), run command
@@ -2700,6 +2699,7 @@ close_tun(struct tuntap *tt)
openvpn_execve_check(&argv, NULL, 0, "NetBSD 'destroy tun interface' failed (non-critical)");
free(tt);
+ argv_reset(&argv);
}
}
@@ -2837,6 +2837,7 @@ close_tun(struct tuntap *tt)
openvpn_execve_check(&argv, NULL, 0, "FreeBSD 'destroy tun interface' failed (non-critical)");
free(tt);
+ argv_reset(&argv);
}
}
@@ -3308,6 +3309,7 @@ open_tun(const char *dev, const char *dev_type, const char *dev_node, struct tun
env_set_add( es, "ODMDIR=/etc/objrepos" );
openvpn_execve_check(&argv, es, S_FATAL, "AIX 'create tun interface' failed");
env_set_destroy(es);
+ argv_reset(&argv);
}
else
{
@@ -3333,7 +3335,6 @@ open_tun(const char *dev, const char *dev_type, const char *dev_node, struct tun
void
close_tun(struct tuntap *tt)
{
- struct gc_arena gc = gc_new();
struct argv argv = argv_new();
struct env_set *es = env_set_create(NULL);
@@ -3362,6 +3363,7 @@ close_tun(struct tuntap *tt)
free(tt);
env_set_destroy(es);
+ argv_reset(&argv);
}
int