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 5F956A09FE for ; Mon, 21 Dec 2020 15:03:26 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 3158DCB76; Mon, 21 Dec 2020 15:03:25 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by dpdk.org (Postfix) with ESMTP id 1DF02CAC7; Mon, 21 Dec 2020 15:03:20 +0100 (CET) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 0BLE2Mvo032509; Mon, 21 Dec 2020 06:03:17 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : mime-version : content-transfer-encoding : content-type; s=pfpt0220; bh=+QbRIt69AJKUCkApafG3oR/0H0K80BD7rL2D3aL/tJs=; b=Lyz9jMVAzOrVo6PzgkBR8yOZuzlk3YXk++9PjY7UAHJuSAdFcEhwW89wd4v6z0p+d8qz OCEcNffFrAQrAgxoCvchwJtMiqRnFYDln0wUCcsWt0bnD/uP1VVoe0lDIAMi2avbBQgf EuwchClJOekM+ZO+KIEjm/xKdXf7bVvG8VVK4NgDsrOstNpJl27qESdYTrQhyOr4RJwr Nw+ZhWQ2HZKtXW91Qb1QQetR1ZFoRBlR4JAD9UGbREf3qCg7TRn5t22Mo3TCS/Fi+rch 1bYi3GbEZOWfY4V0SNwwWHmwvii3Roz43eGORnubZNVsoSRflvm0KXoWYWmc7w+q5bmC RA== Received: from sc-exch03.marvell.com ([199.233.58.183]) by mx0b-0016f401.pphosted.com with ESMTP id 35j4wvjd26-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Mon, 21 Dec 2020 06:03:16 -0800 Received: from DC5-EXCH02.marvell.com (10.69.176.39) by SC-EXCH03.marvell.com (10.93.176.83) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 21 Dec 2020 06:03:14 -0800 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Mon, 21 Dec 2020 06:03:15 -0800 Received: from localhost.localdomain (unknown [10.28.34.25]) by maili.marvell.com (Postfix) with ESMTP id E3E833F7040; Mon, 21 Dec 2020 06:03:12 -0800 (PST) From: To: Jerin Jacob , Nithin Dabilpuram , Kiran Kumar K CC: , Sunil Kumar Kori , Date: Mon, 21 Dec 2020 19:33:08 +0530 Message-ID: <20201221140308.9809-1-skori@marvell.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.343, 18.0.737 definitions=2020-12-21_08:2020-12-21, 2020-12-21 signatures=0 Subject: [dpdk-stable] [PATCH] net/octeontx2: fix corruption in segments list X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Sender: "stable" From: Sunil Kumar Kori On Tx, lastseg->next is not being reset to null for multi segmented packet and same mbuf can be used on Rx which has a stale mbuf entry into mbuf->next. On Rx, application receives mbuf with mbuf->next uninitialized though mbuf->nb_segs is correct. Application iterates over all segments using mbuf->next ignoring mbuf->nb_segs which leads to undefined behavior. So earlier assumption of just having right value in mbuf->nb_segs is enough, is incorrect. Mbuf must contain valid and synced value in nb_segs and next pointer. Fixes: 364eb0e46683 ("net/octeontx2: avoid per packet barrier with multi segment") Cc: stable@dpdk.org Signed-off-by: Sunil Kumar Kori --- drivers/net/octeontx2/otx2_rx.c | 6 ++++++ drivers/net/octeontx2/otx2_rx.h | 7 +++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/drivers/net/octeontx2/otx2_rx.c b/drivers/net/octeontx2/otx2_rx.c index 2da8efe77..ffeade595 100644 --- a/drivers/net/octeontx2/otx2_rx.c +++ b/drivers/net/octeontx2/otx2_rx.c @@ -279,6 +279,12 @@ nix_recv_pkts_vector(void *rx_queue, struct rte_mbuf **rx_pkts, vst1q_u64((uint64_t *)mbuf2->rearm_data, rearm2); vst1q_u64((uint64_t *)mbuf3->rearm_data, rearm3); + /* Update that no more segments */ + mbuf0->next = NULL; + mbuf1->next = NULL; + mbuf2->next = NULL; + mbuf3->next = NULL; + /* Store the mbufs to rx_pkts */ vst1q_u64((uint64_t *)&rx_pkts[packets], mbuf01); vst1q_u64((uint64_t *)&rx_pkts[packets + 2], mbuf23); diff --git a/drivers/net/octeontx2/otx2_rx.h b/drivers/net/octeontx2/otx2_rx.h index 926f614a4..0ba3d3d96 100644 --- a/drivers/net/octeontx2/otx2_rx.h +++ b/drivers/net/octeontx2/otx2_rx.h @@ -215,6 +215,7 @@ nix_cqe_xtract_mseg(const struct nix_rx_parse_s *rx, iova_list = (const rte_iova_t *)(iova_list + 1); } } + mbuf->next = NULL; } static __rte_always_inline uint16_t @@ -330,10 +331,12 @@ otx2_nix_cqe_to_mbuf(const struct nix_cqe_hdr_s *cq, const uint32_t tag, *(uint64_t *)(&mbuf->rearm_data) = val; mbuf->pkt_len = len; - if (flag & NIX_RX_MULTI_SEG_F) + if (flag & NIX_RX_MULTI_SEG_F) { nix_cqe_xtract_mseg(rx, mbuf, val); - else + } else { mbuf->data_len = len; + mbuf->next = NULL; + } } #define CKSUM_F NIX_RX_OFFLOAD_CHECKSUM_F -- 2.25.1