backport some patches for gro bugfix
(cherry picked from commit 690d3b7a0359fdfa2906dcec0019ccd0cfc7f922)
This commit is contained in:
parent
45458322fd
commit
11754299eb
82
backport-gro-check-payload-length-after-trim.patch
Normal file
82
backport-gro-check-payload-length-after-trim.patch
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
From 72f51b097a71fb9bdea13bdd254ff620b34c852e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Kumara Parameshwaran <kumaraparamesh92@gmail.com>
|
||||||
|
Date: Sun, 16 Oct 2022 20:13:05 +0530
|
||||||
|
Subject: [PATCH] gro: check payload length after trim
|
||||||
|
|
||||||
|
When packet is padded with extra bytes the
|
||||||
|
the validation of the payload length should be done
|
||||||
|
after the trim operation
|
||||||
|
|
||||||
|
Fixes: b8a55871d5af ("gro: trim tail padding bytes")
|
||||||
|
Cc: stable@dpdk.org
|
||||||
|
|
||||||
|
Signed-off-by: Kumara Parameshwaran <kumaraparamesh92@gmail.com>
|
||||||
|
Acked-by: Jiayu Hu <jiayu.hu@intel.com>
|
||||||
|
---
|
||||||
|
lib/gro/gro_tcp4.c | 11 ++++++-----
|
||||||
|
lib/gro/gro_udp4.c | 10 +++++-----
|
||||||
|
2 files changed, 11 insertions(+), 10 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/lib/gro/gro_tcp4.c b/lib/gro/gro_tcp4.c
|
||||||
|
index 8f5e800250..0014096e63 100644
|
||||||
|
--- a/lib/gro/gro_tcp4.c
|
||||||
|
+++ b/lib/gro/gro_tcp4.c
|
||||||
|
@@ -225,6 +225,12 @@ gro_tcp4_reassemble(struct rte_mbuf *pkt,
|
||||||
|
*/
|
||||||
|
if (tcp_hdr->tcp_flags != RTE_TCP_ACK_FLAG)
|
||||||
|
return -1;
|
||||||
|
+
|
||||||
|
+ /* trim the tail padding bytes */
|
||||||
|
+ ip_tlen = rte_be_to_cpu_16(ipv4_hdr->total_length);
|
||||||
|
+ if (pkt->pkt_len > (uint32_t)(ip_tlen + pkt->l2_len))
|
||||||
|
+ rte_pktmbuf_trim(pkt, pkt->pkt_len - ip_tlen - pkt->l2_len);
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* Don't process the packet whose payload length is less than or
|
||||||
|
* equal to 0.
|
||||||
|
@@ -233,11 +239,6 @@ gro_tcp4_reassemble(struct rte_mbuf *pkt,
|
||||||
|
if (tcp_dl <= 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
- /* trim the tail padding bytes */
|
||||||
|
- ip_tlen = rte_be_to_cpu_16(ipv4_hdr->total_length);
|
||||||
|
- if (pkt->pkt_len > (uint32_t)(ip_tlen + pkt->l2_len))
|
||||||
|
- rte_pktmbuf_trim(pkt, pkt->pkt_len - ip_tlen - pkt->l2_len);
|
||||||
|
-
|
||||||
|
/*
|
||||||
|
* Save IPv4 ID for the packet whose DF bit is 0. For the packet
|
||||||
|
* whose DF bit is 1, IPv4 ID is ignored.
|
||||||
|
diff --git a/lib/gro/gro_udp4.c b/lib/gro/gro_udp4.c
|
||||||
|
index 839f9748b7..42596d33b6 100644
|
||||||
|
--- a/lib/gro/gro_udp4.c
|
||||||
|
+++ b/lib/gro/gro_udp4.c
|
||||||
|
@@ -220,6 +220,11 @@ gro_udp4_reassemble(struct rte_mbuf *pkt,
|
||||||
|
if (!is_ipv4_fragment(ipv4_hdr))
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
+ ip_dl = rte_be_to_cpu_16(ipv4_hdr->total_length);
|
||||||
|
+ /* trim the tail padding bytes */
|
||||||
|
+ if (pkt->pkt_len > (uint32_t)(ip_dl + pkt->l2_len))
|
||||||
|
+ rte_pktmbuf_trim(pkt, pkt->pkt_len - ip_dl - pkt->l2_len);
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* Don't process the packet whose payload length is less than or
|
||||||
|
* equal to 0.
|
||||||
|
@@ -227,14 +232,9 @@ gro_udp4_reassemble(struct rte_mbuf *pkt,
|
||||||
|
if (pkt->pkt_len <= hdr_len)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
- ip_dl = rte_be_to_cpu_16(ipv4_hdr->total_length);
|
||||||
|
if (ip_dl <= pkt->l3_len)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
- /* trim the tail padding bytes */
|
||||||
|
- if (pkt->pkt_len > (uint32_t)(ip_dl + pkt->l2_len))
|
||||||
|
- rte_pktmbuf_trim(pkt, pkt->pkt_len - ip_dl - pkt->l2_len);
|
||||||
|
-
|
||||||
|
ip_dl -= pkt->l3_len;
|
||||||
|
ip_id = rte_be_to_cpu_16(ipv4_hdr->packet_id);
|
||||||
|
frag_offset = rte_be_to_cpu_16(ipv4_hdr->fragment_offset);
|
||||||
|
--
|
||||||
|
2.23.0
|
||||||
|
|
||||||
31
backport-gro-fix-chain-index-for-more-than-2-packets.patch
Normal file
31
backport-gro-fix-chain-index-for-more-than-2-packets.patch
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
From bc4a7f7ee0281d96b8d93ac2771135a670b4a00f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Kumara Parameshwaran <kumaraparamesh92@gmail.com>
|
||||||
|
Date: Wed, 7 Sep 2022 15:02:05 +0530
|
||||||
|
Subject: [PATCH] gro: fix chain index for more than 2 packets
|
||||||
|
|
||||||
|
When more than two packets are merged in a flow, and if we receive
|
||||||
|
a 3rd packet which is matching the sequence of the 2nd packet the
|
||||||
|
prev_idx will be 1 and not 2, hence resulting in packet re-ordering
|
||||||
|
|
||||||
|
Signed-off-by: Kumara Parameshwaran <kumaraparamesh92@gmail.com>
|
||||||
|
Acked-by: Jiayu Hu <jiayu.hu@intel.com>
|
||||||
|
---
|
||||||
|
lib/gro/gro_tcp4.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/lib/gro/gro_tcp4.c b/lib/gro/gro_tcp4.c
|
||||||
|
index 7498c66141..9758e28fd5 100644
|
||||||
|
--- a/lib/gro/gro_tcp4.c
|
||||||
|
+++ b/lib/gro/gro_tcp4.c
|
||||||
|
@@ -305,7 +305,7 @@ gro_tcp4_reassemble(struct rte_mbuf *pkt,
|
||||||
|
* length is greater than the max value. Store
|
||||||
|
* the packet into the flow.
|
||||||
|
*/
|
||||||
|
- if (insert_new_item(tbl, pkt, start_time, prev_idx,
|
||||||
|
+ if (insert_new_item(tbl, pkt, start_time, cur_idx,
|
||||||
|
sent_seq, ip_id, is_atomic) ==
|
||||||
|
INVALID_ARRAY_INDEX)
|
||||||
|
return -1;
|
||||||
|
--
|
||||||
|
2.23.0
|
||||||
|
|
||||||
68
backport-gro-trim-tail-padding-bytes.patch
Normal file
68
backport-gro-trim-tail-padding-bytes.patch
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
From b8a55871d5af6f5b8694b1cb5eacbc629734e403 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jun Qiu <jun.qiu@jaguarmicro.com>
|
||||||
|
Date: Wed, 27 Jul 2022 08:00:36 +0000
|
||||||
|
Subject: [PATCH] gro: trim tail padding bytes
|
||||||
|
|
||||||
|
Exclude CRC fields, the minimum Ethernet packet
|
||||||
|
length is 60 bytes. When the actual packet length
|
||||||
|
is less than 60 bytes, padding is added to the tail.
|
||||||
|
When GRO is performed on a packet containing a padding
|
||||||
|
field, mbuf->pkt_len is the one that contains the
|
||||||
|
padding field, which leads to the error of thinking
|
||||||
|
of the padding field as the actual content of the packet.
|
||||||
|
We need to trim away this extra padding field during
|
||||||
|
GRO processing.
|
||||||
|
|
||||||
|
Fixes: 0d2cbe59b719 ("lib/gro: support TCP/IPv4")
|
||||||
|
Cc: stable@dpdk.org
|
||||||
|
|
||||||
|
Signed-off-by: Jun Qiu <jun.qiu@jaguarmicro.com>
|
||||||
|
Acked-by: Jiayu Hu <Jiayu.hu@intel.com>
|
||||||
|
---
|
||||||
|
lib/gro/gro_tcp4.c | 7 ++++++-
|
||||||
|
lib/gro/gro_udp4.c | 4 ++++
|
||||||
|
2 files changed, 10 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/lib/gro/gro_tcp4.c b/lib/gro/gro_tcp4.c
|
||||||
|
index 9758e28fd5..8f5e800250 100644
|
||||||
|
--- a/lib/gro/gro_tcp4.c
|
||||||
|
+++ b/lib/gro/gro_tcp4.c
|
||||||
|
@@ -198,7 +198,7 @@ gro_tcp4_reassemble(struct rte_mbuf *pkt,
|
||||||
|
struct rte_tcp_hdr *tcp_hdr;
|
||||||
|
uint32_t sent_seq;
|
||||||
|
int32_t tcp_dl;
|
||||||
|
- uint16_t ip_id, hdr_len, frag_off;
|
||||||
|
+ uint16_t ip_id, hdr_len, frag_off, ip_tlen;
|
||||||
|
uint8_t is_atomic;
|
||||||
|
|
||||||
|
struct tcp4_flow_key key;
|
||||||
|
@@ -233,6 +233,11 @@ gro_tcp4_reassemble(struct rte_mbuf *pkt,
|
||||||
|
if (tcp_dl <= 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
+ /* trim the tail padding bytes */
|
||||||
|
+ ip_tlen = rte_be_to_cpu_16(ipv4_hdr->total_length);
|
||||||
|
+ if (pkt->pkt_len > (uint32_t)(ip_tlen + pkt->l2_len))
|
||||||
|
+ rte_pktmbuf_trim(pkt, pkt->pkt_len - ip_tlen - pkt->l2_len);
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* Save IPv4 ID for the packet whose DF bit is 0. For the packet
|
||||||
|
* whose DF bit is 1, IPv4 ID is ignored.
|
||||||
|
diff --git a/lib/gro/gro_udp4.c b/lib/gro/gro_udp4.c
|
||||||
|
index dd71135ada..839f9748b7 100644
|
||||||
|
--- a/lib/gro/gro_udp4.c
|
||||||
|
+++ b/lib/gro/gro_udp4.c
|
||||||
|
@@ -231,6 +231,10 @@ gro_udp4_reassemble(struct rte_mbuf *pkt,
|
||||||
|
if (ip_dl <= pkt->l3_len)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
+ /* trim the tail padding bytes */
|
||||||
|
+ if (pkt->pkt_len > (uint32_t)(ip_dl + pkt->l2_len))
|
||||||
|
+ rte_pktmbuf_trim(pkt, pkt->pkt_len - ip_dl - pkt->l2_len);
|
||||||
|
+
|
||||||
|
ip_dl -= pkt->l3_len;
|
||||||
|
ip_id = rte_be_to_cpu_16(ipv4_hdr->packet_id);
|
||||||
|
frag_offset = rte_be_to_cpu_16(ipv4_hdr->fragment_offset);
|
||||||
|
--
|
||||||
|
2.23.0
|
||||||
|
|
||||||
11
dpdk.spec
11
dpdk.spec
@ -1,6 +1,6 @@
|
|||||||
Name: dpdk
|
Name: dpdk
|
||||||
Version: 21.11
|
Version: 21.11
|
||||||
Release: 19
|
Release: 20
|
||||||
Packager: packaging@6wind.com
|
Packager: packaging@6wind.com
|
||||||
URL: http://dpdk.org
|
URL: http://dpdk.org
|
||||||
%global source_version 21.11
|
%global source_version 21.11
|
||||||
@ -203,6 +203,10 @@ Patch9187: 0187-telemetry-limit-command-characters.patch
|
|||||||
Patch9188: 0188-telemetry-eliminate-duplicate-code-for-json-output.patch
|
Patch9188: 0188-telemetry-eliminate-duplicate-code-for-json-output.patch
|
||||||
Patch9189: 0189-telemetry-make-help-command-more-helpful.patch
|
Patch9189: 0189-telemetry-make-help-command-more-helpful.patch
|
||||||
|
|
||||||
|
Patch6006: backport-gro-fix-chain-index-for-more-than-2-packets.patch
|
||||||
|
Patch6007: backport-gro-trim-tail-padding-bytes.patch
|
||||||
|
Patch6008: backport-gro-check-payload-length-after-trim.patch
|
||||||
|
|
||||||
Summary: Data Plane Development Kit core
|
Summary: Data Plane Development Kit core
|
||||||
Group: System Environment/Libraries
|
Group: System Environment/Libraries
|
||||||
License: BSD and LGPLv2 and GPLv2
|
License: BSD and LGPLv2 and GPLv2
|
||||||
@ -330,6 +334,11 @@ strip -g $RPM_BUILD_ROOT/lib/modules/%{kern_devel_ver}/extra/dpdk/igb_uio.ko
|
|||||||
/usr/sbin/depmod
|
/usr/sbin/depmod
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Oct 28 2022 jiangheng <jiangheng14@huawei.com> - 21.11-20
|
||||||
|
- gro: trim tail padding bytes
|
||||||
|
- gro: check payload length after trim
|
||||||
|
- gro: fix chain index for more than 2 packets
|
||||||
|
|
||||||
* Sat Oct 22 2022 Huisong Li <lihuisong@huawei.com> - 21.11-19
|
* Sat Oct 22 2022 Huisong Li <lihuisong@huawei.com> - 21.11-19
|
||||||
Sync some patches for hns3 PMD, telemetry and testpmd. And main
|
Sync some patches for hns3 PMD, telemetry and testpmd. And main
|
||||||
modifications are as follows:
|
modifications are as follows:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user