diff options
author | 2018-11-21 14:00:30 +0100 | |
---|---|---|
committer | 2018-11-27 00:12:20 +0100 | |
commit | 508b09046c0f21678652fb66fd1e9959d55591d2 (patch) | |
tree | c5e1d0164c2919c9b82ffc502195ef25b64a261d /net/ipv6/netfilter.c | |
parent | netfilter: nfnetlink_cttimeout: fetch timeouts for udplite and gre, too (diff) | |
download | linux-508b09046c0f21678652fb66fd1e9959d55591d2.tar.gz linux-508b09046c0f21678652fb66fd1e9959d55591d2.tar.bz2 linux-508b09046c0f21678652fb66fd1e9959d55591d2.zip |
netfilter: ipv6: Preserve link scope traffic original oif
When ip6_route_me_harder is invoked, it resets outgoing interface of:
- link-local scoped packets sent by neighbor discovery
- multicast packets sent by MLD host
- multicast packets send by MLD proxy daemon that sets outgoing
interface through IPV6_PKTINFO ipi6_ifindex
Link-local and multicast packets must keep their original oif after
ip6_route_me_harder is called.
Signed-off-by: Alin Nastac <alin.nastac@gmail.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'net/ipv6/netfilter.c')
-rw-r--r-- | net/ipv6/netfilter.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/net/ipv6/netfilter.c b/net/ipv6/netfilter.c index 5ae8e1c51079..8b075f0bc351 100644 --- a/net/ipv6/netfilter.c +++ b/net/ipv6/netfilter.c @@ -24,7 +24,8 @@ int ip6_route_me_harder(struct net *net, struct sk_buff *skb) unsigned int hh_len; struct dst_entry *dst; struct flowi6 fl6 = { - .flowi6_oif = sk ? sk->sk_bound_dev_if : 0, + .flowi6_oif = sk && sk->sk_bound_dev_if ? sk->sk_bound_dev_if : + rt6_need_strict(&iph->daddr) ? skb_dst(skb)->dev->ifindex : 0, .flowi6_mark = skb->mark, .flowi6_uid = sock_net_uid(net, sk), .daddr = iph->daddr, |