Do not install routes in the PF_KEY kernel interface if interface lookup failed.

This commit is contained in:
Tobias Brunner
2010-06-23 11:43:31 +02:00
parent a427e98da1
commit 9eb7f46b3d
@@ -1795,22 +1795,30 @@ METHOD(kernel_ipsec_t, add_policy, status_t,
route->dst_net = chunk_clone(policy->src.net->get_address(policy->src.net)); route->dst_net = chunk_clone(policy->src.net->get_address(policy->src.net));
route->prefixlen = policy->src.mask; route->prefixlen = policy->src.mask;
switch (charon->kernel_interface->add_route(charon->kernel_interface, if (route->if_name)
route->dst_net, route->prefixlen, route->gateway,
route->src_ip, route->if_name))
{ {
default: switch (charon->kernel_interface->add_route(
DBG1(DBG_KNL, "unable to install source route for %H", charon->kernel_interface, route->dst_net,
route->src_ip); route->prefixlen, route->gateway,
/* FALL */ route->src_ip, route->if_name))
case ALREADY_DONE: {
/* route exists, do not uninstall */ default:
route_entry_destroy(route); DBG1(DBG_KNL, "unable to install source route for %H",
break; route->src_ip);
case SUCCESS: /* FALL */
/* cache the installed route */ case ALREADY_DONE:
policy->route = route; /* route exists, do not uninstall */
break; route_entry_destroy(route);
break;
case SUCCESS:
/* cache the installed route */
policy->route = route;
break;
}
}
else
{
route_entry_destroy(route);
} }
} }
else else