| From foo@baz Fri 17 Jul 2020 08:39:20 AM CEST |
| From: David Ahern <dsahern@kernel.org> |
| Date: Tue, 7 Jul 2020 07:39:24 -0600 |
| Subject: ipv6: Fix use of anycast address with loopback |
| |
| From: David Ahern <dsahern@kernel.org> |
| |
| [ Upstream commit aea23c323d89836bcdcee67e49def997ffca043b ] |
| |
| 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: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/ipv6/route.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/net/ipv6/route.c |
| +++ b/net/ipv6/route.c |
| @@ -3402,7 +3402,7 @@ static bool fib6_is_reject(u32 flags, st |
| 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; |