From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from dpdk.org (dpdk.org [92.243.14.124])
	by inbox.dpdk.org (Postfix) with ESMTP id 3D18EA04B1;
	Sat, 10 Oct 2020 18:06:53 +0200 (CEST)
Received: from [92.243.14.124] (localhost [127.0.0.1])
	by dpdk.org (Postfix) with ESMTP id 940A41D91C;
	Sat, 10 Oct 2020 18:05:42 +0200 (CEST)
Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com
 [210.118.77.12]) by dpdk.org (Postfix) with ESMTP id 7E0551D904
 for <dev@dpdk.org>; Sat, 10 Oct 2020 18:05:40 +0200 (CEST)
Received: from eucas1p2.samsung.com (unknown [182.198.249.207])
 by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id
 20201010160530euoutp02c58cbbb4a2b62b6f7bd91d5acd128c5d~8rSJRWj1L2851128511euoutp02X
 for <dev@dpdk.org>; Sat, 10 Oct 2020 16:05:30 +0000 (GMT)
DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com
 20201010160530euoutp02c58cbbb4a2b62b6f7bd91d5acd128c5d~8rSJRWj1L2851128511euoutp02X
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com;
 s=mail20170921; t=1602345930;
 bh=NXpLZiftAddfs3hsi2CLAhUURHCIw4Q+iTczB/vGCL0=;
 h=From:To:Cc:Subject:Date:In-Reply-To:References:From;
 b=R3E0yUFNBGlCCPv2WWPtptbhy+Hr1Fv2Xk9NbgjiR7ozw6bhI+yr/bhFNu64w+CGv
 LNdnTyMSqUk60pOdK2vXbHTYT5gns5Nilx5aJ3ImqCnY1leH9+kKnwFkZ6ji2B3/FC
 ZoKxiOFyp/JsT1HSI5azSJGpYVDibtw7Uzrexi2o=
Received: from eusmges2new.samsung.com (unknown [203.254.199.244]) by
 eucas1p1.samsung.com (KnoxPortal) with ESMTP id
 20201010160524eucas1p11de25cb48960dda28ee84cb1e9242808~8rSDqiPtv2437224372eucas1p1r;
 Sat, 10 Oct 2020 16:05:24 +0000 (GMT)
Received: from eucas1p1.samsung.com ( [182.198.249.206]) by
 eusmges2new.samsung.com (EUCPMTA) with SMTP id 76.58.05997.4CBD18F5; Sat, 10
 Oct 2020 17:05:24 +0100 (BST)
Received: from eusmtrp1.samsung.com (unknown [182.198.249.138]) by
 eucas1p1.samsung.com (KnoxPortal) with ESMTPA id
 20201010160523eucas1p19287c5bf3b7e2818c730ae23f514853f~8rSCjaH3v2245522455eucas1p1w;
 Sat, 10 Oct 2020 16:05:23 +0000 (GMT)
Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by
 eusmtrp1.samsung.com (KnoxPortal) with ESMTP id
 20201010160523eusmtrp1c6326f9577c4fff3e03567fd2c37afff~8rSCi57lf2920229202eusmtrp1s;
 Sat, 10 Oct 2020 16:05:23 +0000 (GMT)
X-AuditID: cbfec7f4-677ff7000000176d-65-5f81dbc44b8c
Received: from eusmtip1.samsung.com ( [203.254.199.221]) by
 eusmgms2.samsung.com (EUCPMTA) with SMTP id 79.A6.06017.2CBD18F5; Sat, 10
 Oct 2020 17:05:23 +0100 (BST)
Received: from Padamandas.fritz.box (unknown [106.210.88.70]) by
 eusmtip1.samsung.com (KnoxPortal) with ESMTPA id
 20201010160518eusmtip12c2d05d73653f15cd55f216ce91c597e~8rR95mBMz2442224422eusmtip1x;
 Sat, 10 Oct 2020 16:05:18 +0000 (GMT)
From: Lukasz Wojciechowski <l.wojciechow@partner.samsung.com>
To: David Hunt <david.hunt@intel.com>, Bruce Richardson
 <bruce.richardson@intel.com>
Cc: dev@dpdk.org, l.wojciechow@partner.samsung.com, stable@dpdk.org
Date: Sat, 10 Oct 2020 18:04:54 +0200
Message-Id: <20201010160508.19709-4-l.wojciechow@partner.samsung.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20201010160508.19709-1-l.wojciechow@partner.samsung.com>
X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrMIsWRmVeSWpSXmKPExsWy7djPc7pHbjfGG1y/w2dxY5W9Rd+kj0wW
 7z5tZ7J41rOO0eJfxx92B1aPXwuWsnos3vOSyePguz1MAcxRXDYpqTmZZalF+nYJXBk71gYX
 PFCp+PRhIWMD4znZLkZODgkBE4nJDxezg9hCAisYJRasUOli5AKyvzBKfGjdxwKR+Mwo8WQF
 D0zDnn+rGSGKljNKzHh+iAXC+cQo8bZtLRtIFZuArcSRmV9ZQWwRgTCJ5ua9QEUcHMwCzhJP
 voKVCAt4SBxtvswEYrMIqEpc7fjLCFLCK+AqcfuwJMQueYnVGw4wg9icAm4SZ7sOsoGskhC4
 zCYxfRrEcRICLhJz1vexQtjCEq+Ob2GHsGUkTk/uYYFo2MYocfX3T0YIZz+jxPXeFVBV1hKH
 //1mgzhOU2L9Ln2IsKPEibvzwQ6SEOCTuPFWECTMDGRO2jadGSLMK9HRJgRRrSfxtGcqI8za
 P2ufQJ3mITHx2mZo4F5llFj613wCo/wshF0LGBlXMYqnlhbnpqcWG+WllusVJ+YWl+al6yXn
 525iBEb96X/Hv+xg3PUn6RCjAAejEg+vxKnGeCHWxLLiytxDjBIczEoivE5nT8cJ8aYkVlal
 FuXHF5XmpBYfYpTmYFES5zVe9DJWSCA9sSQ1OzW1ILUIJsvEwSnVwCgffsX8/nbFBauk7yTn
 ta2ULKjb+6hu89Jn/3+v8vsjGiTiMGHiwqVxAuUTBX/JrQ8wdy9aIPC1QveyyeuK44enflfh
 vNz/sihDafvzma4tueePJOetW+fys+/A/u8n14g8148vjpj36r4GL2N+6c0Jnx5s/nSlMDFo
 4h+VON09r2+535eYV3JdiaU4I9FQi7moOBEAprRoIfYCAAA=
X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrKLMWRmVeSWpSXmKPExsVy+t/xu7qHbzfGG0xwt7ixyt6ib9JHJot3
 n7YzWTzrWcdo8a/jD7sDq8evBUtZPRbvecnkcfDdHqYA5ig9m6L80pJUhYz84hJbpWhDCyM9
 Q0sLPSMTSz1DY/NYKyNTJX07m5TUnMyy1CJ9uwS9jB1rgwseqFR8+rCQsYHxnGwXIyeHhICJ
 xJ5/qxm7GLk4hASWMkqcPHSYtYuRAyghI/HhkgBEjbDEn2tdbBA1Hxgl/p78zQ6SYBOwlTgy
 8ytYvYhAmMSJlf4gYWYBd4kti6cyg9jCAh4SR5svM4HYLAKqElc7/jKClPMKuErcPiwJMV5e
 YvWGA2DlnAJuEme7DkKtamSUOHH7JtsERr4FjAyrGEVSS4tz03OLjfSKE3OLS/PS9ZLzczcx
 AoNw27GfW3Ywdr0LPsQowMGoxMMrcaoxXog1say4MvcQowQHs5IIr9PZ03FCvCmJlVWpRfnx
 RaU5qcWHGE2BjprILCWanA+MkLySeENTQ3MLS0NzY3NjMwslcd4OgYMxQgLpiSWp2ampBalF
 MH1MHJxSDYwtRkqq23xnbpVkdPjz+oM/h+6/X6IfpzCFJZ0PqtI4eudGdzUbx55JE9NOce+7
 pJn2est7FWb+VxInQ/yLIs/9y/2mWPab6+WvlDUzIv91ljC2Sa7nO3LvmvSK+Y+WvTtaPfFN
 1bxOL9mGigLLI3ncilV+u8JXy7z9Ylv1rNMpYtszVp2/1h+UWIozEg21mIuKEwFdZJmQWAIA
 AA==
X-CMS-MailID: 20201010160523eucas1p19287c5bf3b7e2818c730ae23f514853f
X-Msg-Generator: CA
Content-Type: text/plain; charset="utf-8"
X-RootMTR: 20201010160523eucas1p19287c5bf3b7e2818c730ae23f514853f
X-EPHeader: CA
CMS-TYPE: 201P
X-CMS-RootMailID: 20201010160523eucas1p19287c5bf3b7e2818c730ae23f514853f
References: <20201009220202.20834-1-l.wojciechow@partner.samsung.com>
 <20201010160508.19709-1-l.wojciechow@partner.samsung.com>
 <CGME20201010160523eucas1p19287c5bf3b7e2818c730ae23f514853f@eucas1p1.samsung.com>
Subject: [dpdk-dev] [PATCH v7 03/16] distributor: do not use oldpkt when not
	needed
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org
Sender: "dev" <dev-bounces@dpdk.org>

rte_distributor_request_pkt and rte_distributor_get_pkt dereferenced
oldpkt parameter when in RTE_DIST_ALG_SINGLE even if number
of returned buffers from worker to distributor was 0.

This patch passes NULL to the legacy API when number of returned
buffers is 0. This allows passing NULL as oldpkt parameter.

Distributor tests are also updated passing NULL as oldpkt and
0 as number of returned packets, where packets are not returned.

Fixes: 775003ad2f96 ("distributor: add new burst-capable library")
Cc: david.hunt@intel.com
Cc: stable@dpdk.org

Signed-off-by: Lukasz Wojciechowski <l.wojciechow@partner.samsung.com>
Acked-by: David Hunt <david.hunt@intel.com>
---
 app/test/test_distributor.c              | 28 +++++++++---------------
 lib/librte_distributor/rte_distributor.c |  4 ++--
 2 files changed, 12 insertions(+), 20 deletions(-)

diff --git a/app/test/test_distributor.c b/app/test/test_distributor.c
index ba1f81cf8..52230d250 100644
--- a/app/test/test_distributor.c
+++ b/app/test/test_distributor.c
@@ -62,13 +62,10 @@ handle_work(void *arg)
 	struct rte_mbuf *buf[8] __rte_cache_aligned;
 	struct worker_params *wp = arg;
 	struct rte_distributor *db = wp->dist;
-	unsigned int count = 0, num = 0;
+	unsigned int count = 0, num;
 	unsigned int id = __atomic_fetch_add(&worker_idx, 1, __ATOMIC_RELAXED);
-	int i;
 
-	for (i = 0; i < 8; i++)
-		buf[i] = NULL;
-	num = rte_distributor_get_pkt(db, id, buf, buf, num);
+	num = rte_distributor_get_pkt(db, id, buf, NULL, 0);
 	while (!quit) {
 		__atomic_fetch_add(&worker_stats[id].handled_packets, num,
 				__ATOMIC_RELAXED);
@@ -272,19 +269,16 @@ handle_work_with_free_mbufs(void *arg)
 	struct rte_distributor *d = wp->dist;
 	unsigned int count = 0;
 	unsigned int i;
-	unsigned int num = 0;
+	unsigned int num;
 	unsigned int id = __atomic_fetch_add(&worker_idx, 1, __ATOMIC_RELAXED);
 
-	for (i = 0; i < 8; i++)
-		buf[i] = NULL;
-	num = rte_distributor_get_pkt(d, id, buf, buf, num);
+	num = rte_distributor_get_pkt(d, id, buf, NULL, 0);
 	while (!quit) {
 		worker_stats[id].handled_packets += num;
 		count += num;
 		for (i = 0; i < num; i++)
 			rte_pktmbuf_free(buf[i]);
-		num = rte_distributor_get_pkt(d,
-				id, buf, buf, num);
+		num = rte_distributor_get_pkt(d, id, buf, NULL, 0);
 	}
 	worker_stats[id].handled_packets += num;
 	count += num;
@@ -342,14 +336,14 @@ handle_work_for_shutdown_test(void *arg)
 	struct worker_params *wp = arg;
 	struct rte_distributor *d = wp->dist;
 	unsigned int count = 0;
-	unsigned int num = 0;
+	unsigned int num;
 	unsigned int total = 0;
 	unsigned int i;
 	unsigned int returned = 0;
 	const unsigned int id = __atomic_fetch_add(&worker_idx, 1,
 			__ATOMIC_RELAXED);
 
-	num = rte_distributor_get_pkt(d, id, buf, buf, num);
+	num = rte_distributor_get_pkt(d, id, buf, NULL, 0);
 
 	/* wait for quit single globally, or for worker zero, wait
 	 * for zero_quit */
@@ -358,8 +352,7 @@ handle_work_for_shutdown_test(void *arg)
 		count += num;
 		for (i = 0; i < num; i++)
 			rte_pktmbuf_free(buf[i]);
-		num = rte_distributor_get_pkt(d,
-				id, buf, buf, num);
+		num = rte_distributor_get_pkt(d, id, buf, NULL, 0);
 		total += num;
 	}
 	worker_stats[id].handled_packets += num;
@@ -373,14 +366,13 @@ handle_work_for_shutdown_test(void *arg)
 		while (zero_quit)
 			usleep(100);
 
-		num = rte_distributor_get_pkt(d,
-				id, buf, buf, num);
+		num = rte_distributor_get_pkt(d, id, buf, NULL, 0);
 
 		while (!quit) {
 			worker_stats[id].handled_packets += num;
 			count += num;
 			rte_pktmbuf_free(pkt);
-			num = rte_distributor_get_pkt(d, id, buf, buf, num);
+			num = rte_distributor_get_pkt(d, id, buf, NULL, 0);
 		}
 		returned = rte_distributor_return_pkt(d,
 				id, buf, num);
diff --git a/lib/librte_distributor/rte_distributor.c b/lib/librte_distributor/rte_distributor.c
index 12b3db33c..b720abe03 100644
--- a/lib/librte_distributor/rte_distributor.c
+++ b/lib/librte_distributor/rte_distributor.c
@@ -42,7 +42,7 @@ rte_distributor_request_pkt(struct rte_distributor *d,
 
 	if (unlikely(d->alg_type == RTE_DIST_ALG_SINGLE)) {
 		rte_distributor_request_pkt_single(d->d_single,
-			worker_id, oldpkt[0]);
+			worker_id, count ? oldpkt[0] : NULL);
 		return;
 	}
 
@@ -134,7 +134,7 @@ rte_distributor_get_pkt(struct rte_distributor *d,
 	if (unlikely(d->alg_type == RTE_DIST_ALG_SINGLE)) {
 		if (return_count <= 1) {
 			pkts[0] = rte_distributor_get_pkt_single(d->d_single,
-				worker_id, oldpkt[0]);
+				worker_id, return_count ? oldpkt[0] : NULL);
 			return (pkts[0]) ? 1 : 0;
 		} else
 			return -EINVAL;
-- 
2.17.1