| From f4bee498b191376e55bb82a6670d02a272243a1a Mon Sep 17 00:00:00 2001 |
| From: David Ahern <dsahern@kernel.org> |
| Date: Tue, 7 Jul 2020 07:39:24 -0600 |
| Subject: [PATCH] ipv6: Fix use of anycast address with loopback |
| |
| commit aea23c323d89836bcdcee67e49def997ffca043b upstream. |
| |
| Thomas reported a regression with IPv6 and anycast using the following |
| reproducer: |
| |
| echo 1 > /proc/sys/net/ipv6/conf/all/forwarding |
| ip -6 a add fc12::1/16 dev lo |
| sleep 2 |
| echo "pinging lo" |
| ping6 -c 2 fc12:: |
| |
| The conversion of addrconf_f6i_alloc to use ip6_route_info_create missed |
| the use of fib6_is_reject which checks addresses added to the loopback |
| interface and sets the REJECT flag as needed. Update fib6_is_reject for |
| loopback checks to handle RTF_ANYCAST addresses. |
| |
| Fixes: c7a1ce397ada ("ipv6: Change addrconf_f6i_alloc to use ip6_route_info_create") |
| Reported-by: thomas.gambier@nexedi.com |
| Signed-off-by: David Ahern <dsahern@kernel.org> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/net/ipv6/route.c b/net/ipv6/route.c |
| index 1f5a33d0c68c..a71b115e65fe 100644 |
| --- a/net/ipv6/route.c |
| +++ b/net/ipv6/route.c |
| @@ -2989,7 +2989,7 @@ static bool fib6_is_reject(u32 flags, struct net_device *dev, int addr_type) |
| if ((flags & RTF_REJECT) || |
| (dev && (dev->flags & IFF_LOOPBACK) && |
| !(addr_type & IPV6_ADDR_LOOPBACK) && |
| - !(flags & RTF_LOCAL))) |
| + !(flags & (RTF_ANYCAST | RTF_LOCAL)))) |
| return true; |
| |
| return false; |
| -- |
| 2.27.0 |
| |