| From foo@baz Fri Nov 7 11:36:50 PST 2014 |
| From: Nicolas Cavallari <nicolas.cavallari@green-communications.fr> |
| Date: Thu, 30 Oct 2014 10:09:53 +0100 |
| Subject: ipv4: Do not cache routing failures due to disabled forwarding. |
| |
| From: Nicolas Cavallari <nicolas.cavallari@green-communications.fr> |
| |
| [ Upstream commit fa19c2b050ab5254326f5fc07096dd3c6a8d5d58 ] |
| |
| If we cache them, the kernel will reuse them, independently of |
| whether forwarding is enabled or not. Which means that if forwarding is |
| disabled on the input interface where the first routing request comes |
| from, then that unreachable result will be cached and reused for |
| other interfaces, even if forwarding is enabled on them. The opposite |
| is also true. |
| |
| This can be verified with two interfaces A and B and an output interface |
| C, where B has forwarding enabled, but not A and trying |
| ip route get $dst iif A from $src && ip route get $dst iif B from $src |
| |
| Signed-off-by: Nicolas Cavallari <nicolas.cavallari@green-communications.fr> |
| Reviewed-by: Julian Anastasov <ja@ssi.bg> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/ipv4/route.c | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| --- a/net/ipv4/route.c |
| +++ b/net/ipv4/route.c |
| @@ -1798,6 +1798,7 @@ local_input: |
| no_route: |
| RT_CACHE_STAT_INC(in_no_route); |
| res.type = RTN_UNREACHABLE; |
| + res.fi = NULL; |
| goto local_input; |
| |
| /* |