All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] nf_flowtable: ensure dst.dev is not blackhole
@ 2022-04-25  8:08 Ritaro Takenaka
  2022-04-26 11:21 ` Pablo Neira Ayuso
  0 siblings, 1 reply; 7+ messages in thread
From: Ritaro Takenaka @ 2022-04-25  8:08 UTC (permalink / raw)
  To: netfilter-devel; +Cc: Ritaro Takenaka

Fixes sporadic IPv6 packet loss when flow offloading is enabled.
IPv6 route GC calls dst_dev_put() which makes dst.dev blackhole_netdev
even if dst is cached in flow offload. If a packet passes through this
invalid flow, packet loss will occur.
This is from Commit 227e1e4d0d6c (netfilter: nf_flowtable: skip device
lookup from interface index), as outdev was cached independently before.
Packet loss is reported on OpenWrt with Linux 5.4 and later.

Signed-off-by: Ritaro Takenaka <ritarot634@gmail.com>
---
 net/netfilter/nf_flow_table_ip.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/net/netfilter/nf_flow_table_ip.c b/net/netfilter/nf_flow_table_ip.c
index 32c0eb1b4..12f81661d 100644
--- a/net/netfilter/nf_flow_table_ip.c
+++ b/net/netfilter/nf_flow_table_ip.c
@@ -624,6 +624,11 @@ nf_flow_offload_ipv6_hook(void *priv, struct sk_buff *skb,
 	if (nf_flow_state_check(flow, ip6h->nexthdr, skb, thoff))
 		return NF_ACCEPT;
 
+	if (unlikely(tuplehash->tuple.dst_cache->dev == blackhole_netdev)) {
+		flow_offload_teardown(flow);
+		return NF_ACCEPT;
+	}
+
 	if (skb_try_make_writable(skb, thoff + hdrsize))
 		return NF_DROP;
 
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2022-05-09  6:43 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-25  8:08 [PATCH] nf_flowtable: ensure dst.dev is not blackhole Ritaro Takenaka
2022-04-26 11:21 ` Pablo Neira Ayuso
2022-04-26 11:55   ` りたろう
2022-04-26 12:28   ` Ritaro Takenaka
2022-04-27 15:10     ` Pablo Neira Ayuso
2022-04-30 17:23       ` Ritaro Takenaka
2022-05-09  6:32         ` Pablo Neira Ayuso

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.