kernel-netlink: Fix get_route() interface determination
authorChristophe Gouault <christophe.gouault@6wind.com>
Wed, 12 Oct 2016 16:12:08 +0000 (18:12 +0200)
committerTobias Brunner <tobias@strongswan.org>
Wed, 12 Oct 2016 17:25:31 +0000 (19:25 +0200)
A wrong variable is used (route instead of best), so much that the
returned interface belongs to the last seen route instead of the best
choice route.

get_route() may therefore return mismatching interface and gateway.

Fixes: 66e9165bc686 ("kernel-netlink: Return outbound interface in get_nexthop()")

Signed-off-by: Christophe Gouault <christophe.gouault@6wind.com>
src/libcharon/plugins/kernel_netlink/kernel_netlink_net.c

index b9d3269..0132f72 100644 (file)
@@ -1995,9 +1995,9 @@ static host_t *get_route(private_kernel_netlink_net_t *this, host_t *dest,
                if (best || routes->get_first(routes, (void**)&best) == SUCCESS)
                {
                        addr = host_create_from_chunk(msg->rtm_family, best->gtw, 0);
-                       if (iface && route->oif)
+                       if (iface && best->oif)
                        {
-                               *iface = get_interface_name_by_index(this, route->oif);
+                               *iface = get_interface_name_by_index(this, best->oif);
                        }
                }
                if (!addr && !match_net)