summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorAlin Nastac2018-11-21 14:00:30 +0100
committerGreg Kroah-Hartman2018-12-17 09:24:36 +0100
commit9838090d9859bb6f01a35a7f10d3f88349569ade (patch)
tree74b8da18148c7c2a4d8e2abfc336ae5c4cb2a847 /net
parentdrm/meson: add support for 1080p25 mode (diff)
downloadkernel-qcow2-linux-9838090d9859bb6f01a35a7f10d3f88349569ade.tar.gz
kernel-qcow2-linux-9838090d9859bb6f01a35a7f10d3f88349569ade.tar.xz
kernel-qcow2-linux-9838090d9859bb6f01a35a7f10d3f88349569ade.zip
netfilter: ipv6: Preserve link scope traffic original oif
[ Upstream commit 508b09046c0f21678652fb66fd1e9959d55591d2 ] 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> Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'net')
-rw-r--r--net/ipv6/netfilter.c3
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,