diff options
author | Antonio Quartulli | 2018-06-13 20:28:22 +0800 |
---|---|---|
committer | Gert Doering | 2018-06-13 14:35:15 +0200 |
commit | 18225f0fd5c45164308d4d66db055a1ad3960887 (patch) | |
tree | 52c9db69343841b6b8c0252aaf3ae9083ac2bd73 /src | |
parent | 62b1cc161c53d900b6fe56f6924ef2ec1c1b8a00 (diff) | |
download | openvpn-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.c | 8 |
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 |