From 38387221cd67a6d9b58b81feee97e876a9832d42 Mon Sep 17 00:00:00 2001 From: ru Date: Mon, 19 Mar 2001 09:16:16 +0000 Subject: Invalidate cached forwarding route (ipforward_rt) whenever a new route is added to the routing table, otherwise we may end up using the wrong route when forwarding. PR: kern/10778 Reviewed by: silence on -net --- sys/netinet/in_rmx.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'sys/netinet/in_rmx.c') diff --git a/sys/netinet/in_rmx.c b/sys/netinet/in_rmx.c index 51a5846..16ea5be 100644 --- a/sys/netinet/in_rmx.c +++ b/sys/netinet/in_rmx.c @@ -54,6 +54,7 @@ #include #include #include +#include extern int in_inithead __P((void **head, int off)); @@ -137,6 +138,17 @@ in_addroute(void *v_arg, void *n_arg, struct radix_node_head *head, RTFREE(rt2); } } + + /* + * If the new route created successfully, and we are forwarding, + * and there is a cached route, free it. Otherwise, we may end + * up using the wrong route. + */ + if (ret != NULL && ipforwarding && ipforward_rt.ro_rt) { + RTFREE(ipforward_rt.ro_rt); + ipforward_rt.ro_rt = 0; + } + return ret; } -- cgit v1.1