It's possible to have so much routes that they won't fit into stack and execve would fail with E2BIG (Argument list too long).
This commit fixes this issue by not adding route information into execve'd application env. --- src/openvpn/lladdr.c | 2 +- src/openvpn/route.c | 8 ++++---- src/openvpn/tun.c | 12 ++++++------ 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/openvpn/lladdr.c b/src/openvpn/lladdr.c index 57f447b..d537379 100644 --- a/src/openvpn/lladdr.c +++ b/src/openvpn/lladdr.c @@ -58,7 +58,7 @@ int set_lladdr(const char *ifname, const char *lladdr, #endif argv_msg (M_INFO, &argv); - r = openvpn_execve_check (&argv, es, M_WARN, "ERROR: Unable to set link layer address."); + r = openvpn_execve_check (&argv, NULL, M_WARN, "ERROR: Unable to set link layer address."); if (r) msg (M_INFO, "TUN/TAP link layer address set to %s", lladdr); diff --git a/src/openvpn/route.c b/src/openvpn/route.c index a90195f..c327866 100644 --- a/src/openvpn/route.c +++ b/src/openvpn/route.c @@ -1444,7 +1444,7 @@ add_route (struct route_ipv4 *r, #endif /*ENABLE_IPROUTE*/ argv_msg (D_ROUTE, &argv); - status = openvpn_execve_check (&argv, es, 0, "ERROR: Linux route add command failed"); + status = openvpn_execve_check (&argv, NULL, 0, "ERROR: Linux route add command failed"); #elif defined (TARGET_ANDROID) struct buffer out = alloc_buf_gc (128, &gc); @@ -1769,7 +1769,7 @@ add_route_ipv6 (struct route_ipv6 *r6, const struct tuntap *tt, unsigned int fla argv_printf_cat (&argv, " metric %d", r6->metric); #endif /*ENABLE_IPROUTE*/ argv_msg (D_ROUTE, &argv); - status = openvpn_execve_check (&argv, es, 0, "ERROR: Linux route -6/-A inet6 add command failed"); + status = openvpn_execve_check (&argv, NULL, 0, "ERROR: Linux route -6/-A inet6 add command failed"); #elif defined (TARGET_ANDROID) struct buffer out = alloc_buf_gc (64, &gc); @@ -1967,7 +1967,7 @@ delete_route (struct route_ipv4 *r, if (r->flags & RT_METRIC_DEFINED) argv_printf_cat (&argv, "metric %d", r->metric); argv_msg (D_ROUTE, &argv); - openvpn_execve_check (&argv, es, 0, "ERROR: Linux route delete command failed"); + openvpn_execve_check (&argv, NULL, 0, "ERROR: Linux route delete command failed"); #elif defined (WIN32) @@ -2188,7 +2188,7 @@ delete_route_ipv6 (const struct route_ipv6 *r6, const struct tuntap *tt, unsigne argv_printf_cat (&argv, " metric %d", r6->metric); #endif /*ENABLE_IPROUTE*/ argv_msg (D_ROUTE, &argv); - openvpn_execve_check (&argv, es, 0, "ERROR: Linux route -6/-A inet6 del command failed"); + openvpn_execve_check (&argv, NULL, 0, "ERROR: Linux route -6/-A inet6 del command failed"); #elif defined (WIN32) diff --git a/src/openvpn/tun.c b/src/openvpn/tun.c index b7a29f7..963460e 100644 --- a/src/openvpn/tun.c +++ b/src/openvpn/tun.c @@ -794,7 +794,7 @@ do_ifconfig (struct tuntap *tt, tun_mtu ); argv_msg (M_INFO, &argv); - openvpn_execve_check (&argv, es, S_FATAL, "Linux ip link set failed"); + openvpn_execve_check (&argv, NULL, S_FATAL, "Linux ip link set failed"); if (tun) { @@ -809,7 +809,7 @@ do_ifconfig (struct tuntap *tt, ifconfig_remote_netmask ); argv_msg (M_INFO, &argv); - openvpn_execve_check (&argv, es, S_FATAL, "Linux ip addr add failed"); + openvpn_execve_check (&argv, NULL, S_FATAL, "Linux ip addr add failed"); } else { argv_printf (&argv, "%s addr add dev %s %s/%d broadcast %s", @@ -820,7 +820,7 @@ do_ifconfig (struct tuntap *tt, ifconfig_broadcast ); argv_msg (M_INFO, &argv); - openvpn_execve_check (&argv, es, S_FATAL, "Linux ip addr add failed"); + openvpn_execve_check (&argv, NULL, S_FATAL, "Linux ip addr add failed"); } if ( do_ipv6 ) { @@ -832,7 +832,7 @@ do_ifconfig (struct tuntap *tt, actual ); argv_msg (M_INFO, &argv); - openvpn_execve_check (&argv, es, S_FATAL, "Linux ip -6 addr add failed"); + openvpn_execve_check (&argv, NULL, S_FATAL, "Linux ip -6 addr add failed"); } tt->did_ifconfig = true; #else @@ -856,7 +856,7 @@ do_ifconfig (struct tuntap *tt, ifconfig_broadcast ); argv_msg (M_INFO, &argv); - openvpn_execve_check (&argv, es, S_FATAL, "Linux ifconfig failed"); + openvpn_execve_check (&argv, NULL, S_FATAL, "Linux ifconfig failed"); if ( do_ipv6 ) { argv_printf (&argv, @@ -867,7 +867,7 @@ do_ifconfig (struct tuntap *tt, tt->netbits_ipv6 ); argv_msg (M_INFO, &argv); - openvpn_execve_check (&argv, es, S_FATAL, "Linux ifconfig inet6 failed"); + openvpn_execve_check (&argv, NULL, S_FATAL, "Linux ifconfig inet6 failed"); } tt->did_ifconfig = true; -- 2.5.5