mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 14:42:24 +00:00
netfilter: ip6t_rpfilter: provide input interface for route lookup
In commit47b7e7f828
, this bit was removed at the same time the RT6_LOOKUP_F_IFACE flag was removed. However, it is needed when link-local addresses are used, which is a very common case: when packets are routed, neighbor solicitations are done using link-local addresses. For example, the following neighbor solicitation is not matched by "-m rpfilter": IP6 fe80::5254:33ff:fe00:1 > ff02::1:ff00:3: ICMP6, neighbor solicitation, who has 2001:db8::5254:33ff:fe00:3, length 32 Commit47b7e7f828
doesn't quite explain why we shouldn't use RT6_LOOKUP_F_IFACE in the rpfilter case. I suppose the interface check later in the function would make it redundant. However, the remaining of the routing code is using RT6_LOOKUP_F_IFACE when there is no source address (which matches rpfilter's case with a non-unicast destination, like with neighbor solicitation). Signed-off-by: Vincent Bernat <vincent@bernat.im> Fixes:47b7e7f828
("netfilter: don't set F_IFACE on ipv6 fib lookups") Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
parent
8d8540c4f5
commit
cede24d1b2
@ -48,6 +48,8 @@ static bool rpfilter_lookup_reverse6(struct net *net, const struct sk_buff *skb,
|
|||||||
}
|
}
|
||||||
|
|
||||||
fl6.flowi6_mark = flags & XT_RPFILTER_VALID_MARK ? skb->mark : 0;
|
fl6.flowi6_mark = flags & XT_RPFILTER_VALID_MARK ? skb->mark : 0;
|
||||||
|
if ((flags & XT_RPFILTER_LOOSE) == 0)
|
||||||
|
fl6.flowi6_oif = dev->ifindex;
|
||||||
|
|
||||||
rt = (void *)ip6_route_lookup(net, &fl6, skb, lookup_flags);
|
rt = (void *)ip6_route_lookup(net, &fl6, skb, lookup_flags);
|
||||||
if (rt->dst.error)
|
if (rt->dst.error)
|
||||||
|
Loading…
Reference in New Issue
Block a user