Denis Kirjanov 0a2458
From f7c4b49fcf5dc1858f52589d5c7c3815e8e97b95 Mon Sep 17 00:00:00 2001
Denis Kirjanov 0a2458
From: Denis Kirjanov <denis.kirjanov@suse.com>
Denis Kirjanov 0a2458
Date: Wed, 27 Jul 2022 11:23:59 +0300
Denis Kirjanov 0a2458
Subject: [PATCH 4/8] vrf: Fix IPv6 with qdisc and xfrm
Denis Kirjanov 0a2458
Git-commit: a53c102872ad6e34e1518e25899dc9498c27f8b1
Denis Kirjanov 0a2458
Patch-mainline: v5.7-rc3
Denis Kirjanov 0a2458
References: git-fixes
Denis Kirjanov 0a2458
Denis Kirjanov 0a2458
When a qdisc is attached to the VRF device, the packet goes down the ndo
Denis Kirjanov 0a2458
xmit function which is setup to send the packet back to the VRF driver
Denis Kirjanov 0a2458
which does a lookup to send the packet out. The lookup in the VRF driver
Denis Kirjanov 0a2458
is not considering xfrm policies. Change it to use ip6_dst_lookup_flow
Denis Kirjanov 0a2458
rather than ip6_route_output.
Denis Kirjanov 0a2458
Denis Kirjanov 0a2458
Fixes: 35402e313663 ("net: Add IPv6 support to VRF device")
Denis Kirjanov 0a2458
Signed-off-by: David Ahern <dsahern@gmail.com>
Denis Kirjanov 0a2458
Signed-off-by: David S. Miller <davem@davemloft.net>
Denis Kirjanov 0a2458
Signed-off-by: Denis Kirjanov <denis.kirjanov@suse.com>
Denis Kirjanov 0a2458
---
Denis Kirjanov 0a2458
 drivers/net/vrf.c | 4 ++--
Denis Kirjanov 0a2458
 1 file changed, 2 insertions(+), 2 deletions(-)
Denis Kirjanov 0a2458
Denis Kirjanov 0a2458
diff --git a/drivers/net/vrf.c b/drivers/net/vrf.c
Denis Kirjanov 0a2458
index 50139b8a6f4e..8a91e6480e6a 100644
Denis Kirjanov 0a2458
--- a/drivers/net/vrf.c
Denis Kirjanov 0a2458
+++ b/drivers/net/vrf.c
Denis Kirjanov 0a2458
@@ -192,8 +192,8 @@ static netdev_tx_t vrf_process_v6_outbound(struct sk_buff *skb,
Denis Kirjanov 0a2458
 	fl6.flowi6_proto = iph->nexthdr;
Denis Kirjanov 0a2458
 	fl6.flowi6_flags = FLOWI_FLAG_SKIP_NH_OIF;
Denis Kirjanov 0a2458
 
Denis Kirjanov 0a2458
-	dst = ip6_route_output(net, NULL, &fl6;;
Denis Kirjanov 0a2458
-	if (dst == dst_null)
Denis Kirjanov 0a2458
+	dst = ip6_dst_lookup_flow__net(net, NULL, &fl6, NULL);
Denis Kirjanov 0a2458
+	if (IS_ERR(dst) || dst == dst_null)
Denis Kirjanov 0a2458
 		goto err;
Denis Kirjanov 0a2458
 
Denis Kirjanov 0a2458
 	skb_dst_drop(skb);
Denis Kirjanov 0a2458
-- 
Denis Kirjanov 0a2458
2.16.4
Denis Kirjanov 0a2458