From a31a93e7903a2f9e1cab899be2501c65a8080e82 Mon Sep 17 00:00:00 2001 From: shiyunfei Date: Thu, 13 Apr 2023 14:24:01 +0800 Subject: [PATCH] Fix NewIP ofo last_skb issues Fix ofo last_skb cover new_skb Processing. Signed-off-by: shiyunfei --- src/linux/net/newip/tcp_nip_input.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/linux/net/newip/tcp_nip_input.c b/src/linux/net/newip/tcp_nip_input.c index 0e3b1ff..4e92daa 100644 --- a/src/linux/net/newip/tcp_nip_input.c +++ b/src/linux/net/newip/tcp_nip_input.c @@ -340,7 +340,15 @@ coalesce_done: goto insert; } - if (after(seq, TCP_SKB_CB(tp->ooo_last_skb)->seq)) { + if (!before(seq, TCP_SKB_CB(tp->ooo_last_skb)->seq)) { + if (!after(end_seq, TCP_SKB_CB(tp->ooo_last_skb)->end_seq)) { + /* ooo_last_skb->seq <= seq, end_seq <= ooo_last_skb->end_seq */ + nip_dbg("ooo_last_skb completely overlapping new skb, drop pkt"); + NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPOFOMERGE); + tcp_nip_drop(sk, skb); + skb = NULL; + goto end; + } tcp_nip_left_overlap(skb, tp->ooo_last_skb); if (tcp_nip_ooo_try_coalesce(sk, tp->ooo_last_skb, skb, &fragstolen)) { nip_dbg("ofo skb coalesce ooo_last_skb done"); -- Gitee