From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 02568A04B1; Thu, 17 Sep 2020 04:12:57 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 626641D427; Thu, 17 Sep 2020 04:12:57 +0200 (CEST) Received: from mail-m973.mail.163.com (mail-m973.mail.163.com [123.126.97.3]) by dpdk.org (Postfix) with ESMTP id 7C4911D41C for ; Thu, 17 Sep 2020 04:12:53 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:Subject:Date:Message-Id:MIME-Version; bh=05w8d F4nx3ha1pmGmK5nV7/ET4Tu6xccHXcsoBwfeGk=; b=OswWErUjjmV5HY8c8MbWK OfgQWLTrZ9hB7gQ9HO+Py4Rk3R9oiaQ4cJmxRvZD77UsukUSZ4o+Snu4RlRD5OFb SXiPyUdbht/bGIpg6QCXfzfsfC3kOGK717vPp9JAlaxISLEwd+nhGyDsyQhmpBDZ dpS4wLoAAS6xsnD9aE3oKU= Received: from yangyi0100.home.langchao.com (unknown [111.207.123.58]) by smtp3 (Coremail) with SMTP id G9xpCgBnJ58hxmJfIDE2Cw--.10864S2; Thu, 17 Sep 2020 10:12:50 +0800 (CST) From: yang_y_yi@163.com To: dev@dpdk.org Cc: jiayu.hu@intel.com, thomas@monjalon.net, yangyi01@inspur.com, yang_y_yi@163.com Date: Thu, 17 Sep 2020 10:12:49 +0800 Message-Id: <20200917021249.191088-1-yang_y_yi@163.com> X-Mailer: git-send-email 2.19.2.windows.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-CM-TRANSID: G9xpCgBnJ58hxmJfIDE2Cw--.10864S2 X-Coremail-Antispam: 1Uf129KBjvdXoW7XF1UKFyrtrWrAFyfJryxKrg_yoWkXwc_W3 savF48Gay5JF4xCw45twsYgFWDu3y8uFn3W3ykXr10gan3Kws8ur4qvF1vqan8Jw17CF4U Wa1vvFWfCF47tjkaLaAFLSUrUUUUUb8apTn2vfkv8UJUUUU8Yxn0WfASr-VFAUDa7-sFnT 9fnUUvcSsGvfC2KfnxnUUI43ZEXa7IUUQ6pJUUUUU== X-Originating-IP: [111.207.123.58] X-CM-SenderInfo: 51dqwsp1b1xqqrwthudrp/xtbB0gOii1UMYxhv-AAAsJ Subject: [dpdk-dev] [PATCH v2] gso: fix pyld_unit_size issue for udp gso X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Yi Yang Fragment offset of IPv4 header is measured in units of 8 bytes. Fragment offset of UDP fragments will be wrong after GSO if pyld_unit_size isn't multiple of 8. Say pyld_unit_size is 1500, fragment offset of the second UDP fragment will be 187 (i.e. 1500 / 8), which means 1496, and it will result in 4-byte data loss (1500 - 1496 = 4). So UDP GRO will reassemble out a wrong packet. Fixes: b166d4f30b66 ("gso: support UDP/IPv4 fragmentation") Signed-off-by: Yi Yang --- lib/librte_gso/gso_udp4.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/librte_gso/gso_udp4.c b/lib/librte_gso/gso_udp4.c index 21fea09..6fa68f2 100644 --- a/lib/librte_gso/gso_udp4.c +++ b/lib/librte_gso/gso_udp4.c @@ -69,7 +69,10 @@ return 1; } - pyld_unit_size = gso_size - hdr_offset; + /* pyld_unit_size must be a multiple of 8 because frag_off + * uses 8 bytes as unit. + */ + pyld_unit_size = (gso_size - hdr_offset) & ~7U; /* Segment the payload */ ret = gso_do_segment(pkt, hdr_offset, pyld_unit_size, direct_pool, -- 1.8.3.1