On Wed, 25 Jul 2018 19:35:20 +0200
Florian Westphal <[email protected]> wrote:

> 
> Does this patch fix the problem for you?

Yes it does. Thanks! 

> 
> diff --git a/net/ipv6/netfilter/ip6t_rpfilter.c 
> b/net/ipv6/netfilter/ip6t_rpfilter.c
> --- a/net/ipv6/netfilter/ip6t_rpfilter.c
> +++ b/net/ipv6/netfilter/ip6t_rpfilter.c
> @@ -26,6 +26,12 @@ static bool rpfilter_addr_unicast(const struct in6_addr 
> *addr)
>       return addr_type & IPV6_ADDR_UNICAST;
>  }
>  
> +static bool rpfilter_addr_linklocal(const struct in6_addr *addr)
> +{
> +     int addr_type = ipv6_addr_type(addr);
> +     return addr_type & IPV6_ADDR_LINKLOCAL;
> +}
> +
>  static bool rpfilter_lookup_reverse6(struct net *net, const struct sk_buff 
> *skb,
>                                    const struct net_device *dev, u8 flags)
>  {
> @@ -48,7 +54,11 @@ static bool rpfilter_lookup_reverse6(struct net *net, 
> const struct sk_buff *skb,
>       }
>  
>       fl6.flowi6_mark = flags & XT_RPFILTER_VALID_MARK ? skb->mark : 0;
> -     if ((flags & XT_RPFILTER_LOOSE) == 0)
> +
> +     if (rpfilter_addr_linklocal(&iph->saddr)) {
> +             lookup_flags |= RT6_LOOKUP_F_IFACE;
> +             fl6.flowi6_oif = dev->ifindex;
> +     } else if ((flags & XT_RPFILTER_LOOSE) == 0)
>               fl6.flowi6_oif = dev->ifindex;
>  
>       rt = (void *) ip6_route_lookup(net, &fl6, lookup_flags);

-- 
With respect,
Roman
--
To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to