diff options
| author | Gert Doering <gert@greenie.muc.de> | 2013-05-03 21:13:24 +0200 |
|---|---|---|
| committer | Gert Doering <gert@greenie.muc.de> | 2013-05-18 12:16:34 +0200 |
| commit | eb95f367348f4c2aae301cfa7c3adc8e0f2e711e (patch) | |
| tree | be555a35e5de648861c9167a1c50bb81eb2e7b33 | |
| parent | bd25aa66b76b82f335abbb7377c278a44da194ac (diff) | |
| download | openvpn-eb95f367348f4c2aae301cfa7c3adc8e0f2e711e.tar.gz openvpn-eb95f367348f4c2aae301cfa7c3adc8e0f2e711e.tar.xz openvpn-eb95f367348f4c2aae301cfa7c3adc8e0f2e711e.zip | |
Fix NULL-pointer crash in route_list_add_vpn_gateway().
Add ASSERT() check to route_list_add_vpn_gateway() to ensure that *rl
is valid (and if not, crash with a somewhat more meaningful message than
"segmentation violation"). For the actual bugfix, change init code to
always allocate a "struct route_list" for IPv4, even if no --route options
have been seen in the config.
Fix trac#281 and trac#258.
Signed-off-by: Gert Doering <gert@greenie.muc.de>
Acked-by: Josh Cepek <josh.cepek@usa.net>
Message-Id: <1367608404-2257-1-git-send-email-gert@greenie.muc.de>
URL: http://article.gmane.org/gmane.network.openvpn.devel/7581
| -rw-r--r-- | src/openvpn/init.c | 7 | ||||
| -rw-r--r-- | src/openvpn/route.c | 1 |
2 files changed, 5 insertions, 3 deletions
diff --git a/src/openvpn/init.c b/src/openvpn/init.c index 98f5489..694d086 100644 --- a/src/openvpn/init.c +++ b/src/openvpn/init.c @@ -1145,13 +1145,14 @@ do_init_traffic_shaper (struct context *c) } /* - * Allocate a route list structure if at least one - * --route option was specified. + * Allocate route list structures for IPv4 and IPv6 + * (we do this for IPv4 even if no --route option has been seen, as other + * parts of OpenVPN might want to fill the route-list with info, e.g. DHCP) */ static void do_alloc_route_list (struct context *c) { - if (c->options.routes && !c->c1.route_list) + if (!c->c1.route_list) c->c1.route_list = new_route_list (c->options.max_routes, &c->gc); if (c->options.routes_ipv6 && !c->c1.route_ipv6_list) c->c1.route_ipv6_list = new_route_ipv6_list (c->options.max_routes, &c->gc); diff --git a/src/openvpn/route.c b/src/openvpn/route.c index f5b5efa..72ecbaf 100644 --- a/src/openvpn/route.c +++ b/src/openvpn/route.c @@ -503,6 +503,7 @@ route_list_add_vpn_gateway (struct route_list *rl, struct env_set *es, const in_addr_t addr) { + ASSERT(rl); rl->spec.remote_endpoint = addr; rl->spec.flags |= RTSA_REMOTE_ENDPOINT; setenv_route_addr (es, "vpn_gateway", rl->spec.remote_endpoint, -1); |
