DPDK patches and discussions
 help / color / mirror / Atom feed
* [PATCH 00/16] small bug fixes from PVS studio bug list
@ 2024-11-15  6:05 Stephen Hemminger
  2024-11-15  6:05 ` [PATCH 01/16] common/cnxk: remove duplicate condition Stephen Hemminger
                   ` (16 more replies)
  0 siblings, 17 replies; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-15  6:05 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger

More bug fixes from PVS studio bug reports.
And one other fix to ptpclient.

Stephen Hemminger (16):
  common/cnxk: remove duplicate condition
  net/cpfl: avoid calling log (printf) with null
  raw/cnxk_gpio: fix file descriptor leak
  net/ntnic: remove dead code
  net/i40e: remove duplicate code
  eal: fix out of bounds access in devargs
  net/qede: fix missing debug string
  examples/ptpclient: replace rte_memcpy with assignment
  examples/ptpclient: fix self memcmp
  net/octeon_ep: remove duplicate code
  net/hinic: fix flow type bitmask overflow
  crypto/dpaa2_sec: fix bitmask truncation
  crypto/dpaa_sec: fix bitmask truncation
  event/dpaa: fix bitmask truncation
  net/dpaa: fix bitmask truncation
  net/dpaa2: fix bitmask truncation

 drivers/common/cnxk/cnxk_security.c         | 16 ++++++++------
 drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c |  8 +++----
 drivers/crypto/dpaa_sec/dpaa_sec.c          |  7 +++---
 drivers/event/dpaa/dpaa_eventdev.c          | 10 ++++-----
 drivers/net/cpfl/cpfl_ethdev.c              |  2 +-
 drivers/net/dpaa/dpaa_rxtx.c                |  7 +++---
 drivers/net/dpaa2/dpaa2_rxtx.c              |  6 +++---
 drivers/net/hinic/hinic_pmd_flow.c          | 14 ++++++------
 drivers/net/i40e/i40e_fdir.c                | 10 ++++-----
 drivers/net/ntnic/ntnic_ethdev.c            |  8 -------
 drivers/net/octeon_ep/otx_ep_ethdev.c       |  9 ++------
 drivers/net/qede/qede_debug.c               |  3 +++
 drivers/raw/cnxk_gpio/cnxk_gpio_selftest.c  | 24 +++++++++++++--------
 examples/ptpclient/ptpclient.c              | 10 +++------
 lib/eal/common/eal_common_devargs.c         |  2 +-
 15 files changed, 64 insertions(+), 72 deletions(-)

-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH 01/16] common/cnxk: remove duplicate condition
  2024-11-15  6:05 [PATCH 00/16] small bug fixes from PVS studio bug list Stephen Hemminger
@ 2024-11-15  6:05 ` Stephen Hemminger
  2024-11-15  6:16   ` [EXTERNAL] " Anoob Joseph
  2024-11-15  6:05 ` [PATCH 02/16] net/cpfl: avoid calling log (printf) with null Stephen Hemminger
                   ` (15 subsequent siblings)
  16 siblings, 1 reply; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-15  6:05 UTC (permalink / raw)
  To: dev
  Cc: Stephen Hemminger, Nithin Dabilpuram, Kiran Kumar K,
	Sunil Kumar Kori, Satha Rao, Harman Kalra

The same condition is checked twice in an if statement.
Harmless, but redundant.

Link: https://pvs-studio.com/en/blog/posts/cpp/1183/

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 drivers/common/cnxk/cnxk_security.c | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/drivers/common/cnxk/cnxk_security.c b/drivers/common/cnxk/cnxk_security.c
index c2871ad2bd..9446c14ac8 100644
--- a/drivers/common/cnxk/cnxk_security.c
+++ b/drivers/common/cnxk/cnxk_security.c
@@ -174,9 +174,11 @@ ot_ipsec_sa_common_param_fill(union roc_ot_ipsec_sa_word2 *w2, uint8_t *cipher_k
 	}
 
 	/* Set AES key length */
-	if (w2->s.enc_type == ROC_IE_SA_ENC_AES_CBC || w2->s.enc_type == ROC_IE_SA_ENC_AES_CCM ||
-	    w2->s.enc_type == ROC_IE_SA_ENC_AES_CTR || w2->s.enc_type == ROC_IE_SA_ENC_AES_GCM ||
-	    w2->s.enc_type == ROC_IE_SA_ENC_AES_CCM || w2->s.auth_type == ROC_IE_SA_AUTH_AES_GMAC) {
+	if (w2->s.enc_type == ROC_IE_SA_ENC_AES_CBC ||
+	    w2->s.enc_type == ROC_IE_SA_ENC_AES_CTR ||
+	    w2->s.enc_type == ROC_IE_SA_ENC_AES_GCM ||
+	    w2->s.enc_type == ROC_IE_SA_ENC_AES_CCM ||
+	    w2->s.auth_type == ROC_IE_SA_AUTH_AES_GMAC) {
 		switch (length) {
 		case ROC_CPT_AES128_KEY_LEN:
 			w2->s.aes_key_len = ROC_IE_SA_AES_KEY_LEN_128;
@@ -879,9 +881,11 @@ on_ipsec_sa_ctl_set(struct rte_security_ipsec_xform *ipsec,
 	}
 
 	/* Set AES key length */
-	if (ctl->enc_type == ROC_IE_SA_ENC_AES_CBC || ctl->enc_type == ROC_IE_SA_ENC_AES_CCM ||
-	    ctl->enc_type == ROC_IE_SA_ENC_AES_CTR || ctl->enc_type == ROC_IE_SA_ENC_AES_GCM ||
-	    ctl->enc_type == ROC_IE_SA_ENC_AES_CCM || ctl->auth_type == ROC_IE_SA_AUTH_AES_GMAC) {
+	if (ctl->enc_type == ROC_IE_SA_ENC_AES_CBC ||
+	    ctl->enc_type == ROC_IE_SA_ENC_AES_CTR ||
+	    ctl->enc_type == ROC_IE_SA_ENC_AES_GCM ||
+	    ctl->enc_type == ROC_IE_SA_ENC_AES_CCM ||
+	    ctl->auth_type == ROC_IE_SA_AUTH_AES_GMAC) {
 		switch (aes_key_len) {
 		case 16:
 			ctl->aes_key_len = ROC_IE_SA_AES_KEY_LEN_128;
-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH 02/16] net/cpfl: avoid calling log (printf) with null
  2024-11-15  6:05 [PATCH 00/16] small bug fixes from PVS studio bug list Stephen Hemminger
  2024-11-15  6:05 ` [PATCH 01/16] common/cnxk: remove duplicate condition Stephen Hemminger
@ 2024-11-15  6:05 ` Stephen Hemminger
  2024-11-15  6:05 ` [PATCH 03/16] raw/cnxk_gpio: fix file descriptor leak Stephen Hemminger
                   ` (14 subsequent siblings)
  16 siblings, 0 replies; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-15  6:05 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger, Praveen Shetty

The log message would always refer to str variable which
is NULL here. Looks like author intended to print original
parameter.

Link: https://pvs-studio.com/en/blog/posts/cpp/1183/

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 drivers/net/cpfl/cpfl_ethdev.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/cpfl/cpfl_ethdev.c b/drivers/net/cpfl/cpfl_ethdev.c
index 6f6707a0bd..1817221652 100644
--- a/drivers/net/cpfl/cpfl_ethdev.c
+++ b/drivers/net/cpfl/cpfl_ethdev.c
@@ -1580,7 +1580,7 @@ parse_repr(const char *key __rte_unused, const char *value, void *args)
 		RTE_DIM(eth_da->representor_ports));
 done:
 	if (str == NULL) {
-		PMD_DRV_LOG(ERR, "wrong representor format: %s", str);
+		PMD_DRV_LOG(ERR, "wrong representor format: %s", value);
 		return -1;
 	}
 
-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH 03/16] raw/cnxk_gpio: fix file descriptor leak
  2024-11-15  6:05 [PATCH 00/16] small bug fixes from PVS studio bug list Stephen Hemminger
  2024-11-15  6:05 ` [PATCH 01/16] common/cnxk: remove duplicate condition Stephen Hemminger
  2024-11-15  6:05 ` [PATCH 02/16] net/cpfl: avoid calling log (printf) with null Stephen Hemminger
@ 2024-11-15  6:05 ` Stephen Hemminger
  2024-11-15  6:05 ` [PATCH 04/16] net/ntnic: remove dead code Stephen Hemminger
                   ` (13 subsequent siblings)
  16 siblings, 0 replies; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-15  6:05 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger, tduszynski, Jakub Palider

The function would leak file if fscanf failed.
There is a working version in other file, clone that.

Link: https://pvs-studio.com/en/blog/posts/cpp/1183/

Fixes: 0e6557b448fa ("raw/cnxk_gpio: add self test")
Cc: tduszynski@marvell.com

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 drivers/raw/cnxk_gpio/cnxk_gpio_selftest.c | 24 ++++++++++++++--------
 1 file changed, 15 insertions(+), 9 deletions(-)

diff --git a/drivers/raw/cnxk_gpio/cnxk_gpio_selftest.c b/drivers/raw/cnxk_gpio/cnxk_gpio_selftest.c
index 2f3973a7b5..a0d9942f20 100644
--- a/drivers/raw/cnxk_gpio/cnxk_gpio_selftest.c
+++ b/drivers/raw/cnxk_gpio/cnxk_gpio_selftest.c
@@ -34,24 +34,30 @@ cnxk_gpio_attr_exists(const char *attr)
 static int
 cnxk_gpio_read_attr(char *attr, char *val)
 {
+	int ret, ret2;
 	FILE *fp;
-	int ret;
 
 	fp = fopen(attr, "r");
 	if (!fp)
 		return -errno;
 
 	ret = fscanf(fp, "%s", val);
-	if (ret < 0)
-		return -errno;
-	if (ret != 1)
-		return -EIO;
+	if (ret < 0) {
+		ret = -errno;
+		goto out;
+	}
+	if (ret != 1) {
+		ret = -EIO;
+		goto out;
+	}
 
-	ret = fclose(fp);
-	if (ret)
-		return -errno;
+	ret = 0;
+out:
+	ret2 = fclose(fp);
+	if (!ret)
+		ret = ret2;
 
-	return 0;
+	return ret;
 }
 
 #define CNXK_GPIO_ERR_STR(err, str, ...) do {                                  \
-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH 04/16] net/ntnic: remove dead code
  2024-11-15  6:05 [PATCH 00/16] small bug fixes from PVS studio bug list Stephen Hemminger
                   ` (2 preceding siblings ...)
  2024-11-15  6:05 ` [PATCH 03/16] raw/cnxk_gpio: fix file descriptor leak Stephen Hemminger
@ 2024-11-15  6:05 ` Stephen Hemminger
  2024-11-15  6:05 ` [PATCH 05/16] net/i40e: remove duplicate code Stephen Hemminger
                   ` (12 subsequent siblings)
  16 siblings, 0 replies; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-15  6:05 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger, Christian Koue Muf, Serhii Iliushyk

The loop to update speed would not work because num_port_speeds
was always zero so it did nothing. And the array of pls_mbps
was only used inside the loop but never set.

Link: https://pvs-studio.com/en/blog/posts/cpp/1183/

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 drivers/net/ntnic/ntnic_ethdev.c | 8 --------
 1 file changed, 8 deletions(-)

diff --git a/drivers/net/ntnic/ntnic_ethdev.c b/drivers/net/ntnic/ntnic_ethdev.c
index 2a2643a106..467fea4bf2 100644
--- a/drivers/net/ntnic/ntnic_ethdev.c
+++ b/drivers/net/ntnic/ntnic_ethdev.c
@@ -2037,8 +2037,6 @@ nthw_pci_dev_init(struct rte_pci_device *pci_dev)
 	uint32_t exception_path = 0;
 	struct flow_queue_id_s queue_ids[MAX_QUEUES];
 	int n_phy_ports;
-	struct port_link_speed pls_mbps[NUM_ADAPTER_PORTS_MAX] = { 0 };
-	int num_port_speeds = 0;
 	enum flow_eth_dev_profile profile = FLOW_ETH_DEV_PROFILE_INLINE;
 
 	NT_LOG_DBGX(DBG, NTNIC, "Dev %s PF #%i Init : %02x:%02x:%i", pci_dev->name,
@@ -2178,12 +2176,6 @@ nthw_pci_dev_init(struct rte_pci_device *pci_dev)
 	p_nt_drv->b_shutdown = false;
 	p_nt_drv->adapter_info.pb_shutdown = &p_nt_drv->b_shutdown;
 
-	for (int i = 0; i < num_port_speeds; ++i) {
-		struct adapter_info_s *p_adapter_info = &p_nt_drv->adapter_info;
-		nt_link_speed_t link_speed = convert_link_speed(pls_mbps[i].link_speed);
-		port_ops->set_link_speed(p_adapter_info, i, link_speed);
-	}
-
 	/* store context */
 	store_pdrv(p_drv);
 
-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH 05/16] net/i40e: remove duplicate code
  2024-11-15  6:05 [PATCH 00/16] small bug fixes from PVS studio bug list Stephen Hemminger
                   ` (3 preceding siblings ...)
  2024-11-15  6:05 ` [PATCH 04/16] net/ntnic: remove dead code Stephen Hemminger
@ 2024-11-15  6:05 ` Stephen Hemminger
  2024-11-15 11:00   ` Bruce Richardson
  2024-11-15  6:05 ` [PATCH 06/16] eal: fix out of bounds access in devargs Stephen Hemminger
                   ` (11 subsequent siblings)
  16 siblings, 1 reply; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-15  6:05 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger, Ian Stokes, Bruce Richardson

There are two branches in the cascading if/else that have same
condition and code; remove one. Update the code to follow DPDK
style where all statements in if should have brackets if any
leg requires them.

Link: https://pvs-studio.com/en/blog/posts/cpp/1183/

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 drivers/net/i40e/i40e_fdir.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/drivers/net/i40e/i40e_fdir.c b/drivers/net/i40e/i40e_fdir.c
index 47f79ecf11..6861bea99a 100644
--- a/drivers/net/i40e/i40e_fdir.c
+++ b/drivers/net/i40e/i40e_fdir.c
@@ -599,18 +599,16 @@ i40e_flow_fdir_fill_eth_ip_head(struct i40e_pf *pf,
 		} else if (cus_pctype->index == I40E_CUSTOMIZED_ESP_IPV4_UDP) {
 			len = fill_ip4_head(fdir_input, raw_pkt, IPPROTO_UDP,
 					len, ether_type);
-		} else if (cus_pctype->index == I40E_CUSTOMIZED_ESP_IPV4_UDP) {
-			len = fill_ip4_head(fdir_input, raw_pkt, IPPROTO_UDP,
-					len, ether_type);
-		} else if (cus_pctype->index == I40E_CUSTOMIZED_ESP_IPV6)
+		} else if (cus_pctype->index == I40E_CUSTOMIZED_ESP_IPV6) {
 			len = fill_ip6_head(fdir_input, raw_pkt, IPPROTO_ESP,
 					len, ether_type);
-		else if (cus_pctype->index == I40E_CUSTOMIZED_ESP_IPV6_UDP)
+		} else if (cus_pctype->index == I40E_CUSTOMIZED_ESP_IPV6_UDP) {
 			len = fill_ip6_head(fdir_input, raw_pkt, IPPROTO_UDP,
 					len, ether_type);
-		else if (cus_pctype->index == I40E_CUSTOMIZED_IPV6_L2TPV3)
+		} else if (cus_pctype->index == I40E_CUSTOMIZED_IPV6_L2TPV3) {
 			len = fill_ip6_head(fdir_input, raw_pkt, IPPROTO_L2TP,
 					len, ether_type);
+		}
 	} else {
 		PMD_DRV_LOG(ERR, "unknown pctype %u.", fdir_input->pctype);
 		return -1;
-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH 06/16] eal: fix out of bounds access in devargs
  2024-11-15  6:05 [PATCH 00/16] small bug fixes from PVS studio bug list Stephen Hemminger
                   ` (4 preceding siblings ...)
  2024-11-15  6:05 ` [PATCH 05/16] net/i40e: remove duplicate code Stephen Hemminger
@ 2024-11-15  6:05 ` Stephen Hemminger
  2024-11-15  6:05 ` [PATCH 07/16] net/qede: fix missing debug string Stephen Hemminger
                   ` (10 subsequent siblings)
  16 siblings, 0 replies; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-15  6:05 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger, xuemingl, stable, Tyler Retzlaff, Gaetan Rivet

The code for parsing layers in devargs could reference past
the end of layers[] array on stack.

Link: https://pvs-studio.com/en/blog/posts/cpp/1183/

Fixes: 9a1a9e4a2ddd ("devargs: support path value with global device syntax")
Cc: xuemingl@nvidia.com
Cc: stable@dpdk.org
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 lib/eal/common/eal_common_devargs.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/eal/common/eal_common_devargs.c b/lib/eal/common/eal_common_devargs.c
index a64805b268..dd857fc839 100644
--- a/lib/eal/common/eal_common_devargs.c
+++ b/lib/eal/common/eal_common_devargs.c
@@ -88,7 +88,7 @@ rte_devargs_layers_parse(struct rte_devargs *devargs,
 	s = devargs->data;
 
 	while (s != NULL) {
-		if (nblayer > RTE_DIM(layers)) {
+		if (nblayer >= RTE_DIM(layers)) {
 			ret = -E2BIG;
 			goto get_out;
 		}
-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH 07/16] net/qede: fix missing debug string
  2024-11-15  6:05 [PATCH 00/16] small bug fixes from PVS studio bug list Stephen Hemminger
                   ` (5 preceding siblings ...)
  2024-11-15  6:05 ` [PATCH 06/16] eal: fix out of bounds access in devargs Stephen Hemminger
@ 2024-11-15  6:05 ` Stephen Hemminger
  2024-11-15  6:05 ` [PATCH 08/16] examples/ptpclient: replace rte_memcpy with assignment Stephen Hemminger
                   ` (9 subsequent siblings)
  16 siblings, 0 replies; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-15  6:05 UTC (permalink / raw)
  To: dev
  Cc: Stephen Hemminger, rmody, stable, Devendra Singh Rawat,
	Alok Prasad, Igor Russkikh

The array of debug status strings did not match possible enum
values. Add the missing element and a static assert to make sure
the table has all possible values.

For more complete description see.
Link: https://pvs-studio.com/en/blog/posts/cpp/1176/

Fixes: ec55c118792b ("net/qede: add infrastructure for debug data collection")
Cc: rmody@marvell.com
Cc: stable@dpdk.org

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 drivers/net/qede/qede_debug.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/net/qede/qede_debug.c b/drivers/net/qede/qede_debug.c
index 18f2d988fb..4997f98a5d 100644
--- a/drivers/net/qede/qede_debug.c
+++ b/drivers/net/qede/qede_debug.c
@@ -5614,6 +5614,8 @@ static const char * const s_status_str[] = {
 	/* DBG_STATUS_INVALID_FILTER_TRIGGER_DWORDS */
 	"The filter/trigger constraint dword offsets are not enabled for recording",
 
+	/* DBG_STATUS_NO_MATCHING_FRAMING_MODE */
+	"No matching frame mode",
 
 	/* DBG_STATUS_VFC_READ_ERROR */
 	"Error reading from VFC",
@@ -5759,6 +5761,7 @@ static const char * const s_status_str[] = {
 	/* DBG_STATUS_MISSING_TRIGGER_STATE_STORM */
 	"When triggering on Storm data, the Storm to trigger on must be specified"
 };
+static_assert(MAX_DBG_STATUS == RTE_DIM(s_status_str), "status string table mismatch");
 
 /* Idle check severity names array */
 static const char * const s_idle_chk_severity_str[] = {
-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH 08/16] examples/ptpclient: replace rte_memcpy with assignment
  2024-11-15  6:05 [PATCH 00/16] small bug fixes from PVS studio bug list Stephen Hemminger
                   ` (6 preceding siblings ...)
  2024-11-15  6:05 ` [PATCH 07/16] net/qede: fix missing debug string Stephen Hemminger
@ 2024-11-15  6:05 ` Stephen Hemminger
  2024-11-15  6:05 ` [PATCH 09/16] examples/ptpclient: fix self memcmp Stephen Hemminger
                   ` (8 subsequent siblings)
  16 siblings, 0 replies; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-15  6:05 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger, Kirill Rybalchenko

Don't use rte_memcpy() when not necessary. Structure assignment
is as fast and type safe.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 examples/ptpclient/ptpclient.c | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/examples/ptpclient/ptpclient.c b/examples/ptpclient/ptpclient.c
index 23fa487081..2ec532d058 100644
--- a/examples/ptpclient/ptpclient.c
+++ b/examples/ptpclient/ptpclient.c
@@ -415,9 +415,7 @@ parse_sync(struct ptpv2_time_receiver_ordinary *ptp_data, uint16_t rx_tstamp_idx
 	ptp_data->seqID_SYNC = rte_be_to_cpu_16(ptp_hdr->seq_id);
 
 	if (ptp_data->ptpset == 0) {
-		rte_memcpy(&ptp_data->transmitter_clock_id,
-				&ptp_hdr->source_port_id.clock_id,
-				sizeof(struct clock_id));
+		ptp_data->transmitter_clock_id = ptp_hdr->source_port_id.clock_id;
 		ptp_data->ptpset = 1;
 	}
 
@@ -522,9 +520,7 @@ parse_fup(struct ptpv2_time_receiver_ordinary *ptp_data)
 		client_clkid->id[6] = eth_hdr->src_addr.addr_bytes[4];
 		client_clkid->id[7] = eth_hdr->src_addr.addr_bytes[5];
 
-		rte_memcpy(&ptp_data->client_clock_id,
-			   client_clkid,
-			   sizeof(struct clock_id));
+		ptp_data->client_clock_id = *client_clkid;
 
 		/* Enable flag for hardware timestamping. */
 		created_pkt->ol_flags |= RTE_MBUF_F_TX_IEEE1588_TMST;
-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH 09/16] examples/ptpclient: fix self memcmp
  2024-11-15  6:05 [PATCH 00/16] small bug fixes from PVS studio bug list Stephen Hemminger
                   ` (7 preceding siblings ...)
  2024-11-15  6:05 ` [PATCH 08/16] examples/ptpclient: replace rte_memcpy with assignment Stephen Hemminger
@ 2024-11-15  6:05 ` Stephen Hemminger
  2024-11-15  6:05 ` [PATCH 10/16] net/octeon_ep: remove duplicate code Stephen Hemminger
                   ` (7 subsequent siblings)
  16 siblings, 0 replies; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-15  6:05 UTC (permalink / raw)
  To: dev
  Cc: Stephen Hemminger, danielx.t.mrzyglod, stable,
	Kirill Rybalchenko, John McNamara, Pablo de Lara

Calling memcmp on same structure will always be true.
Replace with same conditional used elsewhere.

Link: https://pvs-studio.com/en/blog/posts/cpp/1183/

Fixes: ab129e9065a5 ("examples/ptpclient: add minimal PTP client")
Cc: danielx.t.mrzyglod@intel.com
Cc: stable@dpdk.org

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 examples/ptpclient/ptpclient.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/examples/ptpclient/ptpclient.c b/examples/ptpclient/ptpclient.c
index 2ec532d058..d6dff2eb7e 100644
--- a/examples/ptpclient/ptpclient.c
+++ b/examples/ptpclient/ptpclient.c
@@ -419,7 +419,7 @@ parse_sync(struct ptpv2_time_receiver_ordinary *ptp_data, uint16_t rx_tstamp_idx
 		ptp_data->ptpset = 1;
 	}
 
-	if (memcmp(&ptp_hdr->source_port_id.clock_id,
+	if (memcmp(&ptp_data->transmitter_clock_id,
 			&ptp_hdr->source_port_id.clock_id,
 			sizeof(struct clock_id)) == 0) {
 
-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH 10/16] net/octeon_ep: remove duplicate code
  2024-11-15  6:05 [PATCH 00/16] small bug fixes from PVS studio bug list Stephen Hemminger
                   ` (8 preceding siblings ...)
  2024-11-15  6:05 ` [PATCH 09/16] examples/ptpclient: fix self memcmp Stephen Hemminger
@ 2024-11-15  6:05 ` Stephen Hemminger
  2024-11-15  6:05 ` [PATCH 11/16] net/hinic: fix flow type bitmask overflow Stephen Hemminger
                   ` (6 subsequent siblings)
  16 siblings, 0 replies; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-15  6:05 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger, Vamsi Attunuru, Anatoly Burakov

Both sides of the if in uninit are using same code.

Link: https://pvs-studio.com/en/blog/posts/cpp/1183/

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 drivers/net/octeon_ep/otx_ep_ethdev.c | 9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)

diff --git a/drivers/net/octeon_ep/otx_ep_ethdev.c b/drivers/net/octeon_ep/otx_ep_ethdev.c
index b4f8baf3b3..8b14734b0c 100644
--- a/drivers/net/octeon_ep/otx_ep_ethdev.c
+++ b/drivers/net/octeon_ep/otx_ep_ethdev.c
@@ -721,14 +721,9 @@ static const struct eth_dev_ops otx_ep_eth_dev_ops = {
 static int
 otx_ep_eth_dev_uninit(struct rte_eth_dev *eth_dev)
 {
-	if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
-		eth_dev->dev_ops = NULL;
-		eth_dev->rx_pkt_burst = NULL;
-		eth_dev->tx_pkt_burst = NULL;
-		return 0;
-	}
+	if (rte_eal_process_type() == RTE_PROC_PRIMARY)
+		otx_ep_mbox_uninit(eth_dev);
 
-	otx_ep_mbox_uninit(eth_dev);
 	eth_dev->dev_ops = NULL;
 	eth_dev->rx_pkt_burst = NULL;
 	eth_dev->tx_pkt_burst = NULL;
-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH 11/16] net/hinic: fix flow type bitmask overflow
  2024-11-15  6:05 [PATCH 00/16] small bug fixes from PVS studio bug list Stephen Hemminger
                   ` (9 preceding siblings ...)
  2024-11-15  6:05 ` [PATCH 10/16] net/octeon_ep: remove duplicate code Stephen Hemminger
@ 2024-11-15  6:05 ` Stephen Hemminger
  2024-11-15  6:05 ` [PATCH 12/16] crypto/dpaa2_sec: fix bitmask truncation Stephen Hemminger
                   ` (5 subsequent siblings)
  16 siblings, 0 replies; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-15  6:05 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger, cloud.wangxiaoyun, stable, Ziyang Xuan

The type mask is 64 bit value, doing a shift of literal 1 (32 bit)
will result in int type (32 bit) and cause truncation.

Link: https://pvs-studio.com/en/blog/posts/cpp/1183/
Fixes: f4ca3fd54c4d ("net/hinic: create and destroy flow director filter")
Cc: cloud.wangxiaoyun@huawei.com
Cc: stable@dpdk.org

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 drivers/net/hinic/hinic_pmd_flow.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/net/hinic/hinic_pmd_flow.c b/drivers/net/hinic/hinic_pmd_flow.c
index 8fdd5a35be..6b1ca6ff88 100644
--- a/drivers/net/hinic/hinic_pmd_flow.c
+++ b/drivers/net/hinic/hinic_pmd_flow.c
@@ -1979,8 +1979,8 @@ static int hinic_lookup_new_filter(struct hinic_5tuple_filter *filter,
 		return -EINVAL;
 	}
 
-	if (!(filter_info->type_mask & (1 << type_id))) {
-		filter_info->type_mask |= 1 << type_id;
+	if (!(filter_info->type_mask & (UINT64_C(1) << type_id))) {
+		filter_info->type_mask |= UINT64_C(1) << type_id;
 		filter->index = type_id;
 		filter_info->pkt_filters[type_id].enable = true;
 		filter_info->pkt_filters[type_id].pkt_proto =
@@ -2138,7 +2138,7 @@ static void hinic_remove_5tuple_filter(struct rte_eth_dev *dev,
 	filter_info->pkt_type = 0;
 	filter_info->qid = 0;
 	filter_info->pkt_filters[filter->index].qid = 0;
-	filter_info->type_mask &= ~(1 <<  (filter->index));
+	filter_info->type_mask &= ~(UINT64_C(1) << filter->index);
 	TAILQ_REMOVE(&filter_info->fivetuple_list, filter, entries);
 
 	rte_free(filter);
@@ -2268,8 +2268,8 @@ hinic_ethertype_filter_insert(struct hinic_filter_info *filter_info,
 	if (id < 0)
 		return -EINVAL;
 
-	if (!(filter_info->type_mask & (1 << id))) {
-		filter_info->type_mask |= 1 << id;
+	if (!(filter_info->type_mask & (UINT64_C(1) << id))) {
+		filter_info->type_mask |= UINT64_C(1) << id;
 		filter_info->pkt_filters[id].pkt_proto =
 			ethertype_filter->pkt_proto;
 		filter_info->pkt_filters[id].enable = ethertype_filter->enable;
@@ -2289,7 +2289,7 @@ hinic_ethertype_filter_remove(struct hinic_filter_info *filter_info,
 		return;
 
 	filter_info->pkt_type = 0;
-	filter_info->type_mask &= ~(1 << idx);
+	filter_info->type_mask &= ~(UINT64_C(1) << idx);
 	filter_info->pkt_filters[idx].pkt_proto = (uint16_t)0;
 	filter_info->pkt_filters[idx].enable = FALSE;
 	filter_info->pkt_filters[idx].qid = 0;
@@ -2355,7 +2355,7 @@ hinic_add_del_ethertype_filter(struct rte_eth_dev *dev,
 		if (i < 0)
 			return -EINVAL;
 
-		if ((filter_info->type_mask & (1 << i))) {
+		if ((filter_info->type_mask & (UINT64_C(1) << i))) {
 			filter_info->pkt_filters[i].enable = FALSE;
 			(void)hinic_set_fdir_filter(nic_dev->hwdev,
 					filter_info->pkt_type,
-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH 12/16] crypto/dpaa2_sec: fix bitmask truncation
  2024-11-15  6:05 [PATCH 00/16] small bug fixes from PVS studio bug list Stephen Hemminger
                   ` (10 preceding siblings ...)
  2024-11-15  6:05 ` [PATCH 11/16] net/hinic: fix flow type bitmask overflow Stephen Hemminger
@ 2024-11-15  6:05 ` Stephen Hemminger
  2024-11-18  7:03   ` Hemant Agrawal
  2024-11-15  6:05 ` [PATCH 13/16] crypto/dpaa_sec: " Stephen Hemminger
                   ` (4 subsequent siblings)
  16 siblings, 1 reply; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-15  6:05 UTC (permalink / raw)
  To: dev
  Cc: Stephen Hemminger, ashish.jain, stable, Gagandeep Singh,
	Hemant Agrawal, Akhil Goyal

The dqrr_held mask is 64 bit but updates were getting truncated
because 1 is of type int (32 bit) and the result shift of int is of
type int (32 bit); therefore any value >= 32 would get truncated.

Link: https://pvs-studio.com/en/blog/posts/cpp/1183/

Fixes: a77db24643b7 ("crypto/dpaa2_sec: support atomic queues")
Cc: ashish.jain@nxp.com
Cc: stable@dpdk.org

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c b/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c
index ec6577f64c..7ad8fd47dd 100644
--- a/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c
+++ b/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c
@@ -1491,8 +1491,8 @@ dpaa2_sec_enqueue_burst(void *qp, struct rte_crypto_op **ops,
 			if (*dpaa2_seqn((*ops)->sym->m_src)) {
 				if (*dpaa2_seqn((*ops)->sym->m_src) & QBMAN_ENQUEUE_FLAG_DCA) {
 					DPAA2_PER_LCORE_DQRR_SIZE--;
-					DPAA2_PER_LCORE_DQRR_HELD &= ~(1 <<
-					*dpaa2_seqn((*ops)->sym->m_src) &
+					DPAA2_PER_LCORE_DQRR_HELD &= ~(UINT64_C(1) <<
+						*dpaa2_seqn((*ops)->sym->m_src) &
 					QBMAN_EQCR_DCA_IDXMASK);
 				}
 				flags[loop] = *dpaa2_seqn((*ops)->sym->m_src);
@@ -1772,7 +1772,7 @@ dpaa2_sec_set_enqueue_descriptor(struct dpaa2_queue *dpaa2_q,
 		dq_idx = *dpaa2_seqn(m) - 1;
 		qbman_eq_desc_set_dca(eqdesc, 1, dq_idx, 0);
 		DPAA2_PER_LCORE_DQRR_SIZE--;
-		DPAA2_PER_LCORE_DQRR_HELD &= ~(1 << dq_idx);
+		DPAA2_PER_LCORE_DQRR_HELD &= ~(UINT64_C(1) << dq_idx);
 	}
 	*dpaa2_seqn(m) = DPAA2_INVALID_MBUF_SEQN;
 }
@@ -4055,7 +4055,7 @@ dpaa2_sec_process_atomic_event(struct qbman_swp *swp __rte_unused,
 	dqrr_index = qbman_get_dqrr_idx(dq);
 	*dpaa2_seqn(crypto_op->sym->m_src) = QBMAN_ENQUEUE_FLAG_DCA | dqrr_index;
 	DPAA2_PER_LCORE_DQRR_SIZE++;
-	DPAA2_PER_LCORE_DQRR_HELD |= 1 << dqrr_index;
+	DPAA2_PER_LCORE_DQRR_HELD |= UINT64_C(1) << dqrr_index;
 	DPAA2_PER_LCORE_DQRR_MBUF(dqrr_index) = crypto_op->sym->m_src;
 	ev->event_ptr = crypto_op;
 }
-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH 13/16] crypto/dpaa_sec: fix bitmask truncation
  2024-11-15  6:05 [PATCH 00/16] small bug fixes from PVS studio bug list Stephen Hemminger
                   ` (11 preceding siblings ...)
  2024-11-15  6:05 ` [PATCH 12/16] crypto/dpaa2_sec: fix bitmask truncation Stephen Hemminger
@ 2024-11-15  6:05 ` Stephen Hemminger
  2024-11-18  7:03   ` Hemant Agrawal
  2024-11-15  6:05 ` [PATCH 14/16] event/dpaa: " Stephen Hemminger
                   ` (3 subsequent siblings)
  16 siblings, 1 reply; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-15  6:05 UTC (permalink / raw)
  To: dev
  Cc: Stephen Hemminger, akhil.goyal, stable, Gagandeep Singh,
	Hemant Agrawal, Akhil Goyal

The dqrr_held mask is 64 bit but updates were getting truncated
because 1 is of type int (32 bit) and the result shift of int is of
type int (32 bit); therefore any value >= 32 would get truncated.

Link: https://pvs-studio.com/en/blog/posts/cpp/1183/

Fixes: fe3688ba7950 ("crypto/dpaa_sec: support event crypto adapter")
Cc: akhil.goyal@nxp.com
Cc: stable@dpdk.org

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 drivers/crypto/dpaa_sec/dpaa_sec.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/crypto/dpaa_sec/dpaa_sec.c b/drivers/crypto/dpaa_sec/dpaa_sec.c
index 3fa88ca968..e117cd77a6 100644
--- a/drivers/crypto/dpaa_sec/dpaa_sec.c
+++ b/drivers/crypto/dpaa_sec/dpaa_sec.c
@@ -1907,13 +1907,12 @@ dpaa_sec_enqueue_burst(void *qp, struct rte_crypto_op **ops,
 			op = *(ops++);
 			if (*dpaa_seqn(op->sym->m_src) != 0) {
 				index = *dpaa_seqn(op->sym->m_src) - 1;
-				if (DPAA_PER_LCORE_DQRR_HELD & (1 << index)) {
+				if (DPAA_PER_LCORE_DQRR_HELD & (UINT64_C(1) << index)) {
 					/* QM_EQCR_DCA_IDXMASK = 0x0f */
 					flags[loop] = ((index & 0x0f) << 8);
 					flags[loop] |= QMAN_ENQUEUE_FLAG_DCA;
 					DPAA_PER_LCORE_DQRR_SIZE--;
-					DPAA_PER_LCORE_DQRR_HELD &=
-								~(1 << index);
+					DPAA_PER_LCORE_DQRR_HELD &= ~(UINT64_C(1) << index);
 				}
 			}
 
@@ -3500,7 +3499,7 @@ dpaa_sec_process_atomic_event(void *event,
 	/* Save active dqrr entries */
 	index = ((uintptr_t)dqrr >> 6) & (16/*QM_DQRR_SIZE*/ - 1);
 	DPAA_PER_LCORE_DQRR_SIZE++;
-	DPAA_PER_LCORE_DQRR_HELD |= 1 << index;
+	DPAA_PER_LCORE_DQRR_HELD |= UINT64_C(1) << index;
 	DPAA_PER_LCORE_DQRR_MBUF(index) = ctx->op->sym->m_src;
 	ev->impl_opaque = index + 1;
 	*dpaa_seqn(ctx->op->sym->m_src) = (uint32_t)index + 1;
-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH 14/16] event/dpaa: fix bitmask truncation
  2024-11-15  6:05 [PATCH 00/16] small bug fixes from PVS studio bug list Stephen Hemminger
                   ` (12 preceding siblings ...)
  2024-11-15  6:05 ` [PATCH 13/16] crypto/dpaa_sec: " Stephen Hemminger
@ 2024-11-15  6:05 ` Stephen Hemminger
  2024-11-18  7:04   ` Hemant Agrawal
  2024-11-15  6:05 ` [PATCH 15/16] net/dpaa: " Stephen Hemminger
                   ` (2 subsequent siblings)
  16 siblings, 1 reply; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-15  6:05 UTC (permalink / raw)
  To: dev
  Cc: Stephen Hemminger, sunil.kori, stable, Hemant Agrawal,
	Sachin Saxena, skori

More bitmask truncation from mask computation.

Fixes: 0ee17f79ebd0 ("event/dpaa: add enqueue/dequeue")
Cc: sunil.kori@nxp.com
Cc: stable@dpdk.org

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 drivers/event/dpaa/dpaa_eventdev.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/event/dpaa/dpaa_eventdev.c b/drivers/event/dpaa/dpaa_eventdev.c
index 853cc1ecf9..400e0ecd1c 100644
--- a/drivers/event/dpaa/dpaa_eventdev.c
+++ b/drivers/event/dpaa/dpaa_eventdev.c
@@ -102,7 +102,7 @@ dpaa_event_enqueue_burst(void *port, const struct rte_event ev[],
 			qman_dca_index(ev[i].impl_opaque, 0);
 			mbuf = DPAA_PER_LCORE_DQRR_MBUF(i);
 			*dpaa_seqn(mbuf) = DPAA_INVALID_MBUF_SEQN;
-			DPAA_PER_LCORE_DQRR_HELD &= ~(1 << i);
+			DPAA_PER_LCORE_DQRR_HELD &= ~(UINT64_C(1) << i);
 			DPAA_PER_LCORE_DQRR_SIZE--;
 			break;
 		default:
@@ -199,11 +199,11 @@ dpaa_event_dequeue_burst(void *port, struct rte_event ev[],
 	/* Check if there are atomic contexts to be released */
 	i = 0;
 	while (DPAA_PER_LCORE_DQRR_SIZE) {
-		if (DPAA_PER_LCORE_DQRR_HELD & (1 << i)) {
+		if (DPAA_PER_LCORE_DQRR_HELD & (UINT64_C(1) << i)) {
 			qman_dca_index(i, 0);
 			mbuf = DPAA_PER_LCORE_DQRR_MBUF(i);
 			*dpaa_seqn(mbuf) = DPAA_INVALID_MBUF_SEQN;
-			DPAA_PER_LCORE_DQRR_HELD &= ~(1 << i);
+			DPAA_PER_LCORE_DQRR_HELD &= ~(UINT64_C(1) << i);
 			DPAA_PER_LCORE_DQRR_SIZE--;
 		}
 		i++;
@@ -263,11 +263,11 @@ dpaa_event_dequeue_burst_intr(void *port, struct rte_event ev[],
 	/* Check if there are atomic contexts to be released */
 	i = 0;
 	while (DPAA_PER_LCORE_DQRR_SIZE) {
-		if (DPAA_PER_LCORE_DQRR_HELD & (1 << i)) {
+		if (DPAA_PER_LCORE_DQRR_HELD & (UINT64_C(1) << i)) {
 			qman_dca_index(i, 0);
 			mbuf = DPAA_PER_LCORE_DQRR_MBUF(i);
 			*dpaa_seqn(mbuf) = DPAA_INVALID_MBUF_SEQN;
-			DPAA_PER_LCORE_DQRR_HELD &= ~(1 << i);
+			DPAA_PER_LCORE_DQRR_HELD &= ~(UINT64_C(1) << i);
 			DPAA_PER_LCORE_DQRR_SIZE--;
 		}
 		i++;
-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH 15/16] net/dpaa: fix bitmask truncation
  2024-11-15  6:05 [PATCH 00/16] small bug fixes from PVS studio bug list Stephen Hemminger
                   ` (13 preceding siblings ...)
  2024-11-15  6:05 ` [PATCH 14/16] event/dpaa: " Stephen Hemminger
@ 2024-11-15  6:05 ` Stephen Hemminger
  2024-11-18  7:04   ` Hemant Agrawal
  2024-11-15  6:05 ` [PATCH 16/16] net/dpaa2: " Stephen Hemminger
  2024-11-18 18:20 ` [PATCH v2 00/19] minor fixes from PVS studio bug list Stephen Hemminger
  16 siblings, 1 reply; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-15  6:05 UTC (permalink / raw)
  To: dev
  Cc: Stephen Hemminger, sunil.kori, stable, Hemant Agrawal,
	Sachin Saxena, skori, Nipun Gupta

The dqrr_held mask is 64 bit but updates were getting truncated
because 1 is of type int (32 bit) and the result shift of int is of
type int (32 bit); therefore any value >= 32 would get truncated.

Link: https://pvs-studio.com/en/blog/posts/cpp/1183/

Fixes: 5e7455931442 ("net/dpaa: support Rx queue configurations with eventdev")
Cc: sunil.kori@nxp.com
Cc: stable@dpdk.org

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 drivers/net/dpaa/dpaa_rxtx.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/net/dpaa/dpaa_rxtx.c b/drivers/net/dpaa/dpaa_rxtx.c
index 247e7b92ba..05bd73becf 100644
--- a/drivers/net/dpaa/dpaa_rxtx.c
+++ b/drivers/net/dpaa/dpaa_rxtx.c
@@ -842,7 +842,7 @@ dpaa_rx_cb_atomic(void *event,
 	/* Save active dqrr entries */
 	index = DQRR_PTR2IDX(dqrr);
 	DPAA_PER_LCORE_DQRR_SIZE++;
-	DPAA_PER_LCORE_DQRR_HELD |= 1 << index;
+	DPAA_PER_LCORE_DQRR_HELD |= UINT64_C(1) << index;
 	DPAA_PER_LCORE_DQRR_MBUF(index) = mbuf;
 	ev->impl_opaque = index + 1;
 	*dpaa_seqn(mbuf) = (uint32_t)index + 1;
@@ -1338,13 +1338,12 @@ dpaa_eth_queue_tx(void *q, struct rte_mbuf **bufs, uint16_t nb_bufs)
 			seqn = *dpaa_seqn(mbuf);
 			if (seqn != DPAA_INVALID_MBUF_SEQN) {
 				index = seqn - 1;
-				if (DPAA_PER_LCORE_DQRR_HELD & (1 << index)) {
+				if (DPAA_PER_LCORE_DQRR_HELD & (UINT64_C(1) << index)) {
 					flags[loop] =
 					   ((index & QM_EQCR_DCA_IDXMASK) << 8);
 					flags[loop] |= QMAN_ENQUEUE_FLAG_DCA;
 					DPAA_PER_LCORE_DQRR_SIZE--;
-					DPAA_PER_LCORE_DQRR_HELD &=
-								~(1 << index);
+					DPAA_PER_LCORE_DQRR_HELD &= ~(UINT64_C(1) << index);
 				}
 			}
 
-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH 16/16] net/dpaa2: fix bitmask truncation
  2024-11-15  6:05 [PATCH 00/16] small bug fixes from PVS studio bug list Stephen Hemminger
                   ` (14 preceding siblings ...)
  2024-11-15  6:05 ` [PATCH 15/16] net/dpaa: " Stephen Hemminger
@ 2024-11-15  6:05 ` Stephen Hemminger
  2024-11-18  7:04   ` Hemant Agrawal
  2024-11-18 18:20 ` [PATCH v2 00/19] minor fixes from PVS studio bug list Stephen Hemminger
  16 siblings, 1 reply; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-15  6:05 UTC (permalink / raw)
  To: dev
  Cc: Stephen Hemminger, nipun.gupta, stable, Hemant Agrawal,
	Sachin Saxena, Nipun Gupta

The dqrr_held mask is 64 bit but updates were getting truncated
because 1 is of type int (32 bit) and the result shift of int is of
type int (32 bit); therefore any value >= 32 would get truncated.

Link: https://pvs-studio.com/en/blog/posts/cpp/1183/

Fixes: 2d3788631862 ("net/dpaa2: support atomic queues")
Cc: nipun.gupta@nxp.com
Cc: stable@dpdk.org

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 drivers/net/dpaa2/dpaa2_rxtx.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/net/dpaa2/dpaa2_rxtx.c b/drivers/net/dpaa2/dpaa2_rxtx.c
index e3b6c7e460..e253bccecd 100644
--- a/drivers/net/dpaa2/dpaa2_rxtx.c
+++ b/drivers/net/dpaa2/dpaa2_rxtx.c
@@ -933,7 +933,7 @@ dpaa2_dev_process_atomic_event(struct qbman_swp *swp __rte_unused,
 	dqrr_index = qbman_get_dqrr_idx(dq);
 	*dpaa2_seqn(ev->mbuf) = dqrr_index + 1;
 	DPAA2_PER_LCORE_DQRR_SIZE++;
-	DPAA2_PER_LCORE_DQRR_HELD |= 1 << dqrr_index;
+	DPAA2_PER_LCORE_DQRR_HELD |= UINT64_C(1) << dqrr_index;
 	DPAA2_PER_LCORE_DQRR_MBUF(dqrr_index) = ev->mbuf;
 }
 
@@ -1317,7 +1317,7 @@ dpaa2_dev_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
 				flags[loop] = QBMAN_ENQUEUE_FLAG_DCA |
 						dqrr_index;
 				DPAA2_PER_LCORE_DQRR_SIZE--;
-				DPAA2_PER_LCORE_DQRR_HELD &= ~(1 << dqrr_index);
+				DPAA2_PER_LCORE_DQRR_HELD &= ~(UINT64_C(1) << dqrr_index);
 				*dpaa2_seqn(*bufs) = DPAA2_INVALID_MBUF_SEQN;
 			}
 
@@ -1575,7 +1575,7 @@ dpaa2_set_enqueue_descriptor(struct dpaa2_queue *dpaa2_q,
 		dq_idx = *dpaa2_seqn(m) - 1;
 		qbman_eq_desc_set_dca(eqdesc, 1, dq_idx, 0);
 		DPAA2_PER_LCORE_DQRR_SIZE--;
-		DPAA2_PER_LCORE_DQRR_HELD &= ~(1 << dq_idx);
+		DPAA2_PER_LCORE_DQRR_HELD &= ~(UINT64_C(1) << dq_idx);
 	}
 	*dpaa2_seqn(m) = DPAA2_INVALID_MBUF_SEQN;
 }
-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

* RE: [EXTERNAL] [PATCH 01/16] common/cnxk: remove duplicate condition
  2024-11-15  6:05 ` [PATCH 01/16] common/cnxk: remove duplicate condition Stephen Hemminger
@ 2024-11-15  6:16   ` Anoob Joseph
  0 siblings, 0 replies; 44+ messages in thread
From: Anoob Joseph @ 2024-11-15  6:16 UTC (permalink / raw)
  To: Stephen Hemminger, dev
  Cc: Nithin Kumar Dabilpuram, Kiran Kumar Kokkilagadda,
	Sunil Kumar Kori, Satha Koteswara Rao Kottidi, Harman Kalra

> The same condition is checked twice in an if statement.
> Harmless, but redundant.
>
> Link: https://urldefense.proofpoint.com/v2/url?u=https-3A__pvs-2Dstudio.com_en_blog_posts_cpp_1183_&d=DwIDAg&c=nKjWec2b6R0mOyPaz7xtfQ&r=jPfB8rwwviRSxyLWs2n6B-
> WYLn1v9SyTMrT5EQqh2TU&m=tCMuFtN3iZvm6NW4QbOzKChuntNLulIgTuVpxYI9t8tfV9TfaTSFRx49kikIS84j&s=2cGhW06MxChL2e5aNV_DQOLM1lQUuNBQKHQeLsS3IdE&e=
>
> Signed-off-by: Stephen Hemminger <mailto:stephen@networkplumber.org>

Acked-by: Anoob Joseph <anoobj@marvell.com>



^ permalink raw reply	[flat|nested] 44+ messages in thread

* Re: [PATCH 05/16] net/i40e: remove duplicate code
  2024-11-15  6:05 ` [PATCH 05/16] net/i40e: remove duplicate code Stephen Hemminger
@ 2024-11-15 11:00   ` Bruce Richardson
  0 siblings, 0 replies; 44+ messages in thread
From: Bruce Richardson @ 2024-11-15 11:00 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: dev, Ian Stokes

On Thu, Nov 14, 2024 at 10:05:42PM -0800, Stephen Hemminger wrote:
> There are two branches in the cascading if/else that have same
> condition and code; remove one. Update the code to follow DPDK
> style where all statements in if should have brackets if any
> leg requires them.
> 

Not actually DPDK style, that is just something that checkpatch recommends
because it is kernel style. DPDK style guide says[1] "Braces that are not
necessary should be left out."
That said, most legs of this if-else block have it so ok to have that
change included for consistency.

[1] https://doc.dpdk.org/guides/contributing/coding_style.html#control-statements-and-loops

> Link: https://pvs-studio.com/en/blog/posts/cpp/1183/

Fixes: 2ab5c84605f0 ("net/i40e: fix ESP flow creation")

Acked-by: Bruce Richardson <bruce.richardson@intel.com>

> 
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
> ---
>  drivers/net/i40e/i40e_fdir.c | 10 ++++------
>  1 file changed, 4 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/net/i40e/i40e_fdir.c b/drivers/net/i40e/i40e_fdir.c
> index 47f79ecf11..6861bea99a 100644
> --- a/drivers/net/i40e/i40e_fdir.c
> +++ b/drivers/net/i40e/i40e_fdir.c
> @@ -599,18 +599,16 @@ i40e_flow_fdir_fill_eth_ip_head(struct i40e_pf *pf,
>  		} else if (cus_pctype->index == I40E_CUSTOMIZED_ESP_IPV4_UDP) {
>  			len = fill_ip4_head(fdir_input, raw_pkt, IPPROTO_UDP,
>  					len, ether_type);
> -		} else if (cus_pctype->index == I40E_CUSTOMIZED_ESP_IPV4_UDP) {
> -			len = fill_ip4_head(fdir_input, raw_pkt, IPPROTO_UDP,
> -					len, ether_type);
> -		} else if (cus_pctype->index == I40E_CUSTOMIZED_ESP_IPV6)
> +		} else if (cus_pctype->index == I40E_CUSTOMIZED_ESP_IPV6) {
>  			len = fill_ip6_head(fdir_input, raw_pkt, IPPROTO_ESP,
>  					len, ether_type);
> -		else if (cus_pctype->index == I40E_CUSTOMIZED_ESP_IPV6_UDP)
> +		} else if (cus_pctype->index == I40E_CUSTOMIZED_ESP_IPV6_UDP) {
>  			len = fill_ip6_head(fdir_input, raw_pkt, IPPROTO_UDP,
>  					len, ether_type);
> -		else if (cus_pctype->index == I40E_CUSTOMIZED_IPV6_L2TPV3)
> +		} else if (cus_pctype->index == I40E_CUSTOMIZED_IPV6_L2TPV3) {
>  			len = fill_ip6_head(fdir_input, raw_pkt, IPPROTO_L2TP,
>  					len, ether_type);
> +		}
>  	} else {
>  		PMD_DRV_LOG(ERR, "unknown pctype %u.", fdir_input->pctype);
>  		return -1;
> -- 
> 2.45.2
> 

^ permalink raw reply	[flat|nested] 44+ messages in thread

* Re: [PATCH 12/16] crypto/dpaa2_sec: fix bitmask truncation
  2024-11-15  6:05 ` [PATCH 12/16] crypto/dpaa2_sec: fix bitmask truncation Stephen Hemminger
@ 2024-11-18  7:03   ` Hemant Agrawal
  0 siblings, 0 replies; 44+ messages in thread
From: Hemant Agrawal @ 2024-11-18  7:03 UTC (permalink / raw)
  To: Stephen Hemminger, dev
  Cc: ashish.jain, stable, Gagandeep Singh, Hemant Agrawal, Akhil Goyal


On 15-11-2024 11:35, Stephen Hemminger wrote:
> The dqrr_held mask is 64 bit but updates were getting truncated
> because 1 is of type int (32 bit) and the result shift of int is of
> type int (32 bit); therefore any value >= 32 would get truncated.
>
> Link: https://pvs-studio.com/en/blog/posts/cpp/1183/
>
> Fixes: a77db24643b7 ("crypto/dpaa2_sec: support atomic queues")
> Cc: ashish.jain@nxp.com
> Cc: stable@dpdk.org
>
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
> ---
>   drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c | 8 ++++----
>   1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c b/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c
> index ec6577f64c..7ad8fd47dd 100644
> --- a/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c
> +++ b/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c
> @@ -1491,8 +1491,8 @@ dpaa2_sec_enqueue_burst(void *qp, struct rte_crypto_op **ops,
>   			if (*dpaa2_seqn((*ops)->sym->m_src)) {
>   				if (*dpaa2_seqn((*ops)->sym->m_src) & QBMAN_ENQUEUE_FLAG_DCA) {
>   					DPAA2_PER_LCORE_DQRR_SIZE--;
> -					DPAA2_PER_LCORE_DQRR_HELD &= ~(1 <<
> -					*dpaa2_seqn((*ops)->sym->m_src) &
> +					DPAA2_PER_LCORE_DQRR_HELD &= ~(UINT64_C(1) <<
> +						*dpaa2_seqn((*ops)->sym->m_src) &
>   					QBMAN_EQCR_DCA_IDXMASK);
>   				}
>   				flags[loop] = *dpaa2_seqn((*ops)->sym->m_src);
> @@ -1772,7 +1772,7 @@ dpaa2_sec_set_enqueue_descriptor(struct dpaa2_queue *dpaa2_q,
>   		dq_idx = *dpaa2_seqn(m) - 1;
>   		qbman_eq_desc_set_dca(eqdesc, 1, dq_idx, 0);
>   		DPAA2_PER_LCORE_DQRR_SIZE--;
> -		DPAA2_PER_LCORE_DQRR_HELD &= ~(1 << dq_idx);
> +		DPAA2_PER_LCORE_DQRR_HELD &= ~(UINT64_C(1) << dq_idx);
>   	}
>   	*dpaa2_seqn(m) = DPAA2_INVALID_MBUF_SEQN;
>   }
> @@ -4055,7 +4055,7 @@ dpaa2_sec_process_atomic_event(struct qbman_swp *swp __rte_unused,
>   	dqrr_index = qbman_get_dqrr_idx(dq);
>   	*dpaa2_seqn(crypto_op->sym->m_src) = QBMAN_ENQUEUE_FLAG_DCA | dqrr_index;
>   	DPAA2_PER_LCORE_DQRR_SIZE++;
> -	DPAA2_PER_LCORE_DQRR_HELD |= 1 << dqrr_index;
> +	DPAA2_PER_LCORE_DQRR_HELD |= UINT64_C(1) << dqrr_index;
>   	DPAA2_PER_LCORE_DQRR_MBUF(dqrr_index) = crypto_op->sym->m_src;
>   	ev->event_ptr = crypto_op;
>   }
Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com>


^ permalink raw reply	[flat|nested] 44+ messages in thread

* Re: [PATCH 13/16] crypto/dpaa_sec: fix bitmask truncation
  2024-11-15  6:05 ` [PATCH 13/16] crypto/dpaa_sec: " Stephen Hemminger
@ 2024-11-18  7:03   ` Hemant Agrawal
  0 siblings, 0 replies; 44+ messages in thread
From: Hemant Agrawal @ 2024-11-18  7:03 UTC (permalink / raw)
  To: Stephen Hemminger, dev
  Cc: akhil.goyal, stable, Gagandeep Singh, Hemant Agrawal, Akhil Goyal


On 15-11-2024 11:35, Stephen Hemminger wrote:
> The dqrr_held mask is 64 bit but updates were getting truncated
> because 1 is of type int (32 bit) and the result shift of int is of
> type int (32 bit); therefore any value >= 32 would get truncated.
>
> Link: https://pvs-studio.com/en/blog/posts/cpp/1183/
>
> Fixes: fe3688ba7950 ("crypto/dpaa_sec: support event crypto adapter")
> Cc: akhil.goyal@nxp.com
> Cc: stable@dpdk.org
>
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
> ---
>   drivers/crypto/dpaa_sec/dpaa_sec.c | 7 +++----
>   1 file changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/crypto/dpaa_sec/dpaa_sec.c b/drivers/crypto/dpaa_sec/dpaa_sec.c
> index 3fa88ca968..e117cd77a6 100644
> --- a/drivers/crypto/dpaa_sec/dpaa_sec.c
> +++ b/drivers/crypto/dpaa_sec/dpaa_sec.c
> @@ -1907,13 +1907,12 @@ dpaa_sec_enqueue_burst(void *qp, struct rte_crypto_op **ops,
>   			op = *(ops++);
>   			if (*dpaa_seqn(op->sym->m_src) != 0) {
>   				index = *dpaa_seqn(op->sym->m_src) - 1;
> -				if (DPAA_PER_LCORE_DQRR_HELD & (1 << index)) {
> +				if (DPAA_PER_LCORE_DQRR_HELD & (UINT64_C(1) << index)) {
>   					/* QM_EQCR_DCA_IDXMASK = 0x0f */
>   					flags[loop] = ((index & 0x0f) << 8);
>   					flags[loop] |= QMAN_ENQUEUE_FLAG_DCA;
>   					DPAA_PER_LCORE_DQRR_SIZE--;
> -					DPAA_PER_LCORE_DQRR_HELD &=
> -								~(1 << index);
> +					DPAA_PER_LCORE_DQRR_HELD &= ~(UINT64_C(1) << index);
>   				}
>   			}
>   
> @@ -3500,7 +3499,7 @@ dpaa_sec_process_atomic_event(void *event,
>   	/* Save active dqrr entries */
>   	index = ((uintptr_t)dqrr >> 6) & (16/*QM_DQRR_SIZE*/ - 1);
>   	DPAA_PER_LCORE_DQRR_SIZE++;
> -	DPAA_PER_LCORE_DQRR_HELD |= 1 << index;
> +	DPAA_PER_LCORE_DQRR_HELD |= UINT64_C(1) << index;
>   	DPAA_PER_LCORE_DQRR_MBUF(index) = ctx->op->sym->m_src;
>   	ev->impl_opaque = index + 1;
>   	*dpaa_seqn(ctx->op->sym->m_src) = (uint32_t)index + 1;
Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com>


^ permalink raw reply	[flat|nested] 44+ messages in thread

* Re: [PATCH 14/16] event/dpaa: fix bitmask truncation
  2024-11-15  6:05 ` [PATCH 14/16] event/dpaa: " Stephen Hemminger
@ 2024-11-18  7:04   ` Hemant Agrawal
  0 siblings, 0 replies; 44+ messages in thread
From: Hemant Agrawal @ 2024-11-18  7:04 UTC (permalink / raw)
  To: Stephen Hemminger, dev
  Cc: sunil.kori, stable, Hemant Agrawal, Sachin Saxena, skori


On 15-11-2024 11:35, Stephen Hemminger wrote:
> More bitmask truncation from mask computation.
>
> Fixes: 0ee17f79ebd0 ("event/dpaa: add enqueue/dequeue")
> Cc: sunil.kori@nxp.com
> Cc: stable@dpdk.org
>
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
> ---
>   drivers/event/dpaa/dpaa_eventdev.c | 10 +++++-----
>   1 file changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/event/dpaa/dpaa_eventdev.c b/drivers/event/dpaa/dpaa_eventdev.c
> index 853cc1ecf9..400e0ecd1c 100644
> --- a/drivers/event/dpaa/dpaa_eventdev.c
> +++ b/drivers/event/dpaa/dpaa_eventdev.c
> @@ -102,7 +102,7 @@ dpaa_event_enqueue_burst(void *port, const struct rte_event ev[],
>   			qman_dca_index(ev[i].impl_opaque, 0);
>   			mbuf = DPAA_PER_LCORE_DQRR_MBUF(i);
>   			*dpaa_seqn(mbuf) = DPAA_INVALID_MBUF_SEQN;
> -			DPAA_PER_LCORE_DQRR_HELD &= ~(1 << i);
> +			DPAA_PER_LCORE_DQRR_HELD &= ~(UINT64_C(1) << i);
>   			DPAA_PER_LCORE_DQRR_SIZE--;
>   			break;
>   		default:
> @@ -199,11 +199,11 @@ dpaa_event_dequeue_burst(void *port, struct rte_event ev[],
>   	/* Check if there are atomic contexts to be released */
>   	i = 0;
>   	while (DPAA_PER_LCORE_DQRR_SIZE) {
> -		if (DPAA_PER_LCORE_DQRR_HELD & (1 << i)) {
> +		if (DPAA_PER_LCORE_DQRR_HELD & (UINT64_C(1) << i)) {
>   			qman_dca_index(i, 0);
>   			mbuf = DPAA_PER_LCORE_DQRR_MBUF(i);
>   			*dpaa_seqn(mbuf) = DPAA_INVALID_MBUF_SEQN;
> -			DPAA_PER_LCORE_DQRR_HELD &= ~(1 << i);
> +			DPAA_PER_LCORE_DQRR_HELD &= ~(UINT64_C(1) << i);
>   			DPAA_PER_LCORE_DQRR_SIZE--;
>   		}
>   		i++;
> @@ -263,11 +263,11 @@ dpaa_event_dequeue_burst_intr(void *port, struct rte_event ev[],
>   	/* Check if there are atomic contexts to be released */
>   	i = 0;
>   	while (DPAA_PER_LCORE_DQRR_SIZE) {
> -		if (DPAA_PER_LCORE_DQRR_HELD & (1 << i)) {
> +		if (DPAA_PER_LCORE_DQRR_HELD & (UINT64_C(1) << i)) {
>   			qman_dca_index(i, 0);
>   			mbuf = DPAA_PER_LCORE_DQRR_MBUF(i);
>   			*dpaa_seqn(mbuf) = DPAA_INVALID_MBUF_SEQN;
> -			DPAA_PER_LCORE_DQRR_HELD &= ~(1 << i);
> +			DPAA_PER_LCORE_DQRR_HELD &= ~(UINT64_C(1) << i);
>   			DPAA_PER_LCORE_DQRR_SIZE--;
>   		}
>   		i++;
Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com>


^ permalink raw reply	[flat|nested] 44+ messages in thread

* Re: [PATCH 15/16] net/dpaa: fix bitmask truncation
  2024-11-15  6:05 ` [PATCH 15/16] net/dpaa: " Stephen Hemminger
@ 2024-11-18  7:04   ` Hemant Agrawal
  0 siblings, 0 replies; 44+ messages in thread
From: Hemant Agrawal @ 2024-11-18  7:04 UTC (permalink / raw)
  To: Stephen Hemminger, dev
  Cc: sunil.kori, stable, Hemant Agrawal, Sachin Saxena, skori, Nipun Gupta

Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com>

On 15-11-2024 11:35, Stephen Hemminger wrote:
> The dqrr_held mask is 64 bit but updates were getting truncated
> because 1 is of type int (32 bit) and the result shift of int is of
> type int (32 bit); therefore any value >= 32 would get truncated.
>
> Link: https://pvs-studio.com/en/blog/posts/cpp/1183/
>
> Fixes: 5e7455931442 ("net/dpaa: support Rx queue configurations with eventdev")
> Cc: sunil.kori@nxp.com
> Cc: stable@dpdk.org
>
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
> ---
>   drivers/net/dpaa/dpaa_rxtx.c | 7 +++----
>   1 file changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/dpaa/dpaa_rxtx.c b/drivers/net/dpaa/dpaa_rxtx.c
> index 247e7b92ba..05bd73becf 100644
> --- a/drivers/net/dpaa/dpaa_rxtx.c
> +++ b/drivers/net/dpaa/dpaa_rxtx.c
> @@ -842,7 +842,7 @@ dpaa_rx_cb_atomic(void *event,
>   	/* Save active dqrr entries */
>   	index = DQRR_PTR2IDX(dqrr);
>   	DPAA_PER_LCORE_DQRR_SIZE++;
> -	DPAA_PER_LCORE_DQRR_HELD |= 1 << index;
> +	DPAA_PER_LCORE_DQRR_HELD |= UINT64_C(1) << index;
>   	DPAA_PER_LCORE_DQRR_MBUF(index) = mbuf;
>   	ev->impl_opaque = index + 1;
>   	*dpaa_seqn(mbuf) = (uint32_t)index + 1;
> @@ -1338,13 +1338,12 @@ dpaa_eth_queue_tx(void *q, struct rte_mbuf **bufs, uint16_t nb_bufs)
>   			seqn = *dpaa_seqn(mbuf);
>   			if (seqn != DPAA_INVALID_MBUF_SEQN) {
>   				index = seqn - 1;
> -				if (DPAA_PER_LCORE_DQRR_HELD & (1 << index)) {
> +				if (DPAA_PER_LCORE_DQRR_HELD & (UINT64_C(1) << index)) {
>   					flags[loop] =
>   					   ((index & QM_EQCR_DCA_IDXMASK) << 8);
>   					flags[loop] |= QMAN_ENQUEUE_FLAG_DCA;
>   					DPAA_PER_LCORE_DQRR_SIZE--;
> -					DPAA_PER_LCORE_DQRR_HELD &=
> -								~(1 << index);
> +					DPAA_PER_LCORE_DQRR_HELD &= ~(UINT64_C(1) << index);
>   				}
>   			}
>   

^ permalink raw reply	[flat|nested] 44+ messages in thread

* Re: [PATCH 16/16] net/dpaa2: fix bitmask truncation
  2024-11-15  6:05 ` [PATCH 16/16] net/dpaa2: " Stephen Hemminger
@ 2024-11-18  7:04   ` Hemant Agrawal
  0 siblings, 0 replies; 44+ messages in thread
From: Hemant Agrawal @ 2024-11-18  7:04 UTC (permalink / raw)
  To: Stephen Hemminger, dev
  Cc: nipun.gupta, stable, Hemant Agrawal, Sachin Saxena, Nipun Gupta

Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com>

On 15-11-2024 11:35, Stephen Hemminger wrote:
> The dqrr_held mask is 64 bit but updates were getting truncated
> because 1 is of type int (32 bit) and the result shift of int is of
> type int (32 bit); therefore any value >= 32 would get truncated.
>
> Link: https://pvs-studio.com/en/blog/posts/cpp/1183/
>
> Fixes: 2d3788631862 ("net/dpaa2: support atomic queues")
> Cc: nipun.gupta@nxp.com
> Cc: stable@dpdk.org
>
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
> ---
>   drivers/net/dpaa2/dpaa2_rxtx.c | 6 +++---
>   1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/dpaa2/dpaa2_rxtx.c b/drivers/net/dpaa2/dpaa2_rxtx.c
> index e3b6c7e460..e253bccecd 100644
> --- a/drivers/net/dpaa2/dpaa2_rxtx.c
> +++ b/drivers/net/dpaa2/dpaa2_rxtx.c
> @@ -933,7 +933,7 @@ dpaa2_dev_process_atomic_event(struct qbman_swp *swp __rte_unused,
>   	dqrr_index = qbman_get_dqrr_idx(dq);
>   	*dpaa2_seqn(ev->mbuf) = dqrr_index + 1;
>   	DPAA2_PER_LCORE_DQRR_SIZE++;
> -	DPAA2_PER_LCORE_DQRR_HELD |= 1 << dqrr_index;
> +	DPAA2_PER_LCORE_DQRR_HELD |= UINT64_C(1) << dqrr_index;
>   	DPAA2_PER_LCORE_DQRR_MBUF(dqrr_index) = ev->mbuf;
>   }
>   
> @@ -1317,7 +1317,7 @@ dpaa2_dev_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
>   				flags[loop] = QBMAN_ENQUEUE_FLAG_DCA |
>   						dqrr_index;
>   				DPAA2_PER_LCORE_DQRR_SIZE--;
> -				DPAA2_PER_LCORE_DQRR_HELD &= ~(1 << dqrr_index);
> +				DPAA2_PER_LCORE_DQRR_HELD &= ~(UINT64_C(1) << dqrr_index);
>   				*dpaa2_seqn(*bufs) = DPAA2_INVALID_MBUF_SEQN;
>   			}
>   
> @@ -1575,7 +1575,7 @@ dpaa2_set_enqueue_descriptor(struct dpaa2_queue *dpaa2_q,
>   		dq_idx = *dpaa2_seqn(m) - 1;
>   		qbman_eq_desc_set_dca(eqdesc, 1, dq_idx, 0);
>   		DPAA2_PER_LCORE_DQRR_SIZE--;
> -		DPAA2_PER_LCORE_DQRR_HELD &= ~(1 << dq_idx);
> +		DPAA2_PER_LCORE_DQRR_HELD &= ~(UINT64_C(1) << dq_idx);
>   	}
>   	*dpaa2_seqn(m) = DPAA2_INVALID_MBUF_SEQN;
>   }

^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH v2 00/19] minor fixes from PVS studio bug list
  2024-11-15  6:05 [PATCH 00/16] small bug fixes from PVS studio bug list Stephen Hemminger
                   ` (15 preceding siblings ...)
  2024-11-15  6:05 ` [PATCH 16/16] net/dpaa2: " Stephen Hemminger
@ 2024-11-18 18:20 ` Stephen Hemminger
  2024-11-18 18:20   ` [PATCH v2 01/19] common/cnxk: remove duplicate condition Stephen Hemminger
                     ` (18 more replies)
  16 siblings, 19 replies; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-18 18:20 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger

More bug fixes from PVS studio bug reports.
And one other fix to ptpclient.

Stephen Hemminger (19):
  common/cnxk: remove duplicate condition
  net/cpfl: avoid calling log (printf) with null
  raw/cnxk_gpio: fix file descriptor leak
  net/ntnic: remove dead code
  net/i40e: remove duplicate code
  eal: fix out of bounds access in devargs
  net/qede: fix missing debug string
  examples/ptpclient: replace rte_memcpy with assignment
  examples/ptpclient: fix self memcmp
  net/octeon_ep: remove duplicate code
  net/hinic: fix flow type bitmask overflow
  crypto/dpaa2_sec: fix bitmask truncation
  crypto/dpaa_sec: fix bitmask truncation
  event/dpaa: fix bitmask truncation
  net/dpaa: fix bitmask truncation
  net/dpaa2: fix bitmask truncation
  net/qede: don't use same loop variable twice
  examples/l3fwd: fix operator precedence bugs
  common/cnxk: fix null ptr check

v2 - add a few more fixes, and rebase

 drivers/common/cnxk/cnxk_security.c         | 16 ++++++++------
 drivers/common/cnxk/roc_bphy_cgx.c          | 12 +++++------
 drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c |  8 +++----
 drivers/crypto/dpaa_sec/dpaa_sec.c          |  7 +++---
 drivers/event/dpaa/dpaa_eventdev.c          | 10 ++++-----
 drivers/net/cpfl/cpfl_ethdev.c              |  2 +-
 drivers/net/dpaa/dpaa_rxtx.c                |  7 +++---
 drivers/net/dpaa2/dpaa2_rxtx.c              |  6 +++---
 drivers/net/hinic/hinic_pmd_flow.c          | 14 ++++++------
 drivers/net/i40e/i40e_fdir.c                | 10 ++++-----
 drivers/net/ntnic/ntnic_ethdev.c            |  8 -------
 drivers/net/octeon_ep/otx_ep_ethdev.c       |  9 ++------
 drivers/net/qede/base/ecore_dcbx.c          |  8 +++----
 drivers/net/qede/qede_debug.c               |  5 +++++
 drivers/raw/cnxk_gpio/cnxk_gpio_selftest.c  | 24 +++++++++++++--------
 examples/l3fwd-power/main.c                 |  4 ++--
 examples/l3fwd/main.c                       |  5 +++--
 examples/ptpclient/ptpclient.c              | 10 +++------
 lib/eal/common/eal_common_devargs.c         |  2 +-
 19 files changed, 81 insertions(+), 86 deletions(-)

-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH v2 01/19] common/cnxk: remove duplicate condition
  2024-11-18 18:20 ` [PATCH v2 00/19] minor fixes from PVS studio bug list Stephen Hemminger
@ 2024-11-18 18:20   ` Stephen Hemminger
  2024-11-18 18:20   ` [PATCH v2 02/19] net/cpfl: avoid calling log (printf) with null Stephen Hemminger
                     ` (17 subsequent siblings)
  18 siblings, 0 replies; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-18 18:20 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger, Anoob Joseph

The same condition is checked twice in an if statement.
Harmless, but redundant.

Link: https://pvs-studio.com/en/blog/posts/cpp/1183/

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Anoob Joseph <anoobj@marvell.com>
---
 drivers/common/cnxk/cnxk_security.c | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/drivers/common/cnxk/cnxk_security.c b/drivers/common/cnxk/cnxk_security.c
index c2871ad2bd..9446c14ac8 100644
--- a/drivers/common/cnxk/cnxk_security.c
+++ b/drivers/common/cnxk/cnxk_security.c
@@ -174,9 +174,11 @@ ot_ipsec_sa_common_param_fill(union roc_ot_ipsec_sa_word2 *w2, uint8_t *cipher_k
 	}
 
 	/* Set AES key length */
-	if (w2->s.enc_type == ROC_IE_SA_ENC_AES_CBC || w2->s.enc_type == ROC_IE_SA_ENC_AES_CCM ||
-	    w2->s.enc_type == ROC_IE_SA_ENC_AES_CTR || w2->s.enc_type == ROC_IE_SA_ENC_AES_GCM ||
-	    w2->s.enc_type == ROC_IE_SA_ENC_AES_CCM || w2->s.auth_type == ROC_IE_SA_AUTH_AES_GMAC) {
+	if (w2->s.enc_type == ROC_IE_SA_ENC_AES_CBC ||
+	    w2->s.enc_type == ROC_IE_SA_ENC_AES_CTR ||
+	    w2->s.enc_type == ROC_IE_SA_ENC_AES_GCM ||
+	    w2->s.enc_type == ROC_IE_SA_ENC_AES_CCM ||
+	    w2->s.auth_type == ROC_IE_SA_AUTH_AES_GMAC) {
 		switch (length) {
 		case ROC_CPT_AES128_KEY_LEN:
 			w2->s.aes_key_len = ROC_IE_SA_AES_KEY_LEN_128;
@@ -879,9 +881,11 @@ on_ipsec_sa_ctl_set(struct rte_security_ipsec_xform *ipsec,
 	}
 
 	/* Set AES key length */
-	if (ctl->enc_type == ROC_IE_SA_ENC_AES_CBC || ctl->enc_type == ROC_IE_SA_ENC_AES_CCM ||
-	    ctl->enc_type == ROC_IE_SA_ENC_AES_CTR || ctl->enc_type == ROC_IE_SA_ENC_AES_GCM ||
-	    ctl->enc_type == ROC_IE_SA_ENC_AES_CCM || ctl->auth_type == ROC_IE_SA_AUTH_AES_GMAC) {
+	if (ctl->enc_type == ROC_IE_SA_ENC_AES_CBC ||
+	    ctl->enc_type == ROC_IE_SA_ENC_AES_CTR ||
+	    ctl->enc_type == ROC_IE_SA_ENC_AES_GCM ||
+	    ctl->enc_type == ROC_IE_SA_ENC_AES_CCM ||
+	    ctl->auth_type == ROC_IE_SA_AUTH_AES_GMAC) {
 		switch (aes_key_len) {
 		case 16:
 			ctl->aes_key_len = ROC_IE_SA_AES_KEY_LEN_128;
-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH v2 02/19] net/cpfl: avoid calling log (printf) with null
  2024-11-18 18:20 ` [PATCH v2 00/19] minor fixes from PVS studio bug list Stephen Hemminger
  2024-11-18 18:20   ` [PATCH v2 01/19] common/cnxk: remove duplicate condition Stephen Hemminger
@ 2024-11-18 18:20   ` Stephen Hemminger
  2024-11-18 18:20   ` [PATCH v2 03/19] raw/cnxk_gpio: fix file descriptor leak Stephen Hemminger
                     ` (16 subsequent siblings)
  18 siblings, 0 replies; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-18 18:20 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger

The log message would always refer to str variable which
is NULL here. Looks like author intended to print original
parameter.

Link: https://pvs-studio.com/en/blog/posts/cpp/1183/

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 drivers/net/cpfl/cpfl_ethdev.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/cpfl/cpfl_ethdev.c b/drivers/net/cpfl/cpfl_ethdev.c
index 6f6707a0bd..1817221652 100644
--- a/drivers/net/cpfl/cpfl_ethdev.c
+++ b/drivers/net/cpfl/cpfl_ethdev.c
@@ -1580,7 +1580,7 @@ parse_repr(const char *key __rte_unused, const char *value, void *args)
 		RTE_DIM(eth_da->representor_ports));
 done:
 	if (str == NULL) {
-		PMD_DRV_LOG(ERR, "wrong representor format: %s", str);
+		PMD_DRV_LOG(ERR, "wrong representor format: %s", value);
 		return -1;
 	}
 
-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH v2 03/19] raw/cnxk_gpio: fix file descriptor leak
  2024-11-18 18:20 ` [PATCH v2 00/19] minor fixes from PVS studio bug list Stephen Hemminger
  2024-11-18 18:20   ` [PATCH v2 01/19] common/cnxk: remove duplicate condition Stephen Hemminger
  2024-11-18 18:20   ` [PATCH v2 02/19] net/cpfl: avoid calling log (printf) with null Stephen Hemminger
@ 2024-11-18 18:20   ` Stephen Hemminger
  2024-11-18 18:20   ` [PATCH v2 04/19] net/ntnic: remove dead code Stephen Hemminger
                     ` (15 subsequent siblings)
  18 siblings, 0 replies; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-18 18:20 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger, tduszynski

The function would leak file if fscanf failed.
There is a working version in other file, clone that.

Link: https://pvs-studio.com/en/blog/posts/cpp/1183/

Fixes: 0e6557b448fa ("raw/cnxk_gpio: add self test")
Cc: tduszynski@marvell.com

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 drivers/raw/cnxk_gpio/cnxk_gpio_selftest.c | 24 ++++++++++++++--------
 1 file changed, 15 insertions(+), 9 deletions(-)

diff --git a/drivers/raw/cnxk_gpio/cnxk_gpio_selftest.c b/drivers/raw/cnxk_gpio/cnxk_gpio_selftest.c
index 2f3973a7b5..a0d9942f20 100644
--- a/drivers/raw/cnxk_gpio/cnxk_gpio_selftest.c
+++ b/drivers/raw/cnxk_gpio/cnxk_gpio_selftest.c
@@ -34,24 +34,30 @@ cnxk_gpio_attr_exists(const char *attr)
 static int
 cnxk_gpio_read_attr(char *attr, char *val)
 {
+	int ret, ret2;
 	FILE *fp;
-	int ret;
 
 	fp = fopen(attr, "r");
 	if (!fp)
 		return -errno;
 
 	ret = fscanf(fp, "%s", val);
-	if (ret < 0)
-		return -errno;
-	if (ret != 1)
-		return -EIO;
+	if (ret < 0) {
+		ret = -errno;
+		goto out;
+	}
+	if (ret != 1) {
+		ret = -EIO;
+		goto out;
+	}
 
-	ret = fclose(fp);
-	if (ret)
-		return -errno;
+	ret = 0;
+out:
+	ret2 = fclose(fp);
+	if (!ret)
+		ret = ret2;
 
-	return 0;
+	return ret;
 }
 
 #define CNXK_GPIO_ERR_STR(err, str, ...) do {                                  \
-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH v2 04/19] net/ntnic: remove dead code
  2024-11-18 18:20 ` [PATCH v2 00/19] minor fixes from PVS studio bug list Stephen Hemminger
                     ` (2 preceding siblings ...)
  2024-11-18 18:20   ` [PATCH v2 03/19] raw/cnxk_gpio: fix file descriptor leak Stephen Hemminger
@ 2024-11-18 18:20   ` Stephen Hemminger
  2024-11-18 18:20   ` [PATCH v2 05/19] net/i40e: remove duplicate code Stephen Hemminger
                     ` (14 subsequent siblings)
  18 siblings, 0 replies; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-18 18:20 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger

The loop to update speed would not work because num_port_speeds
was always zero so it did nothing. And the array of pls_mbps
was only used inside the loop but never set.

Link: https://pvs-studio.com/en/blog/posts/cpp/1183/

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 drivers/net/ntnic/ntnic_ethdev.c | 8 --------
 1 file changed, 8 deletions(-)

diff --git a/drivers/net/ntnic/ntnic_ethdev.c b/drivers/net/ntnic/ntnic_ethdev.c
index 2a2643a106..467fea4bf2 100644
--- a/drivers/net/ntnic/ntnic_ethdev.c
+++ b/drivers/net/ntnic/ntnic_ethdev.c
@@ -2037,8 +2037,6 @@ nthw_pci_dev_init(struct rte_pci_device *pci_dev)
 	uint32_t exception_path = 0;
 	struct flow_queue_id_s queue_ids[MAX_QUEUES];
 	int n_phy_ports;
-	struct port_link_speed pls_mbps[NUM_ADAPTER_PORTS_MAX] = { 0 };
-	int num_port_speeds = 0;
 	enum flow_eth_dev_profile profile = FLOW_ETH_DEV_PROFILE_INLINE;
 
 	NT_LOG_DBGX(DBG, NTNIC, "Dev %s PF #%i Init : %02x:%02x:%i", pci_dev->name,
@@ -2178,12 +2176,6 @@ nthw_pci_dev_init(struct rte_pci_device *pci_dev)
 	p_nt_drv->b_shutdown = false;
 	p_nt_drv->adapter_info.pb_shutdown = &p_nt_drv->b_shutdown;
 
-	for (int i = 0; i < num_port_speeds; ++i) {
-		struct adapter_info_s *p_adapter_info = &p_nt_drv->adapter_info;
-		nt_link_speed_t link_speed = convert_link_speed(pls_mbps[i].link_speed);
-		port_ops->set_link_speed(p_adapter_info, i, link_speed);
-	}
-
 	/* store context */
 	store_pdrv(p_drv);
 
-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH v2 05/19] net/i40e: remove duplicate code
  2024-11-18 18:20 ` [PATCH v2 00/19] minor fixes from PVS studio bug list Stephen Hemminger
                     ` (3 preceding siblings ...)
  2024-11-18 18:20   ` [PATCH v2 04/19] net/ntnic: remove dead code Stephen Hemminger
@ 2024-11-18 18:20   ` Stephen Hemminger
  2024-11-18 18:20   ` [PATCH v2 06/19] eal: fix out of bounds access in devargs Stephen Hemminger
                     ` (13 subsequent siblings)
  18 siblings, 0 replies; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-18 18:20 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger, Bruce Richardson

There are two branches in the cascading if/else that have same
condition and code; remove one. Update the code to follow DPDK
style where all statements in if should have brackets if any
leg requires them.

Link: https://pvs-studio.com/en/blog/posts/cpp/1183/
Fixes: 2ab5c84605f0 ("net/i40e: fix ESP flow creation")

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
 drivers/net/i40e/i40e_fdir.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/drivers/net/i40e/i40e_fdir.c b/drivers/net/i40e/i40e_fdir.c
index 47f79ecf11..6861bea99a 100644
--- a/drivers/net/i40e/i40e_fdir.c
+++ b/drivers/net/i40e/i40e_fdir.c
@@ -599,18 +599,16 @@ i40e_flow_fdir_fill_eth_ip_head(struct i40e_pf *pf,
 		} else if (cus_pctype->index == I40E_CUSTOMIZED_ESP_IPV4_UDP) {
 			len = fill_ip4_head(fdir_input, raw_pkt, IPPROTO_UDP,
 					len, ether_type);
-		} else if (cus_pctype->index == I40E_CUSTOMIZED_ESP_IPV4_UDP) {
-			len = fill_ip4_head(fdir_input, raw_pkt, IPPROTO_UDP,
-					len, ether_type);
-		} else if (cus_pctype->index == I40E_CUSTOMIZED_ESP_IPV6)
+		} else if (cus_pctype->index == I40E_CUSTOMIZED_ESP_IPV6) {
 			len = fill_ip6_head(fdir_input, raw_pkt, IPPROTO_ESP,
 					len, ether_type);
-		else if (cus_pctype->index == I40E_CUSTOMIZED_ESP_IPV6_UDP)
+		} else if (cus_pctype->index == I40E_CUSTOMIZED_ESP_IPV6_UDP) {
 			len = fill_ip6_head(fdir_input, raw_pkt, IPPROTO_UDP,
 					len, ether_type);
-		else if (cus_pctype->index == I40E_CUSTOMIZED_IPV6_L2TPV3)
+		} else if (cus_pctype->index == I40E_CUSTOMIZED_IPV6_L2TPV3) {
 			len = fill_ip6_head(fdir_input, raw_pkt, IPPROTO_L2TP,
 					len, ether_type);
+		}
 	} else {
 		PMD_DRV_LOG(ERR, "unknown pctype %u.", fdir_input->pctype);
 		return -1;
-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH v2 06/19] eal: fix out of bounds access in devargs
  2024-11-18 18:20 ` [PATCH v2 00/19] minor fixes from PVS studio bug list Stephen Hemminger
                     ` (4 preceding siblings ...)
  2024-11-18 18:20   ` [PATCH v2 05/19] net/i40e: remove duplicate code Stephen Hemminger
@ 2024-11-18 18:20   ` Stephen Hemminger
  2024-11-18 18:20   ` [PATCH v2 07/19] net/qede: fix missing debug string Stephen Hemminger
                     ` (12 subsequent siblings)
  18 siblings, 0 replies; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-18 18:20 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger, xuemingl, stable

The code for parsing layers in devargs could reference past
the end of layers[] array on stack.

Link: https://pvs-studio.com/en/blog/posts/cpp/1183/

Fixes: 9a1a9e4a2ddd ("devargs: support path value with global device syntax")
Cc: xuemingl@nvidia.com
Cc: stable@dpdk.org
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 lib/eal/common/eal_common_devargs.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/eal/common/eal_common_devargs.c b/lib/eal/common/eal_common_devargs.c
index a64805b268..dd857fc839 100644
--- a/lib/eal/common/eal_common_devargs.c
+++ b/lib/eal/common/eal_common_devargs.c
@@ -88,7 +88,7 @@ rte_devargs_layers_parse(struct rte_devargs *devargs,
 	s = devargs->data;
 
 	while (s != NULL) {
-		if (nblayer > RTE_DIM(layers)) {
+		if (nblayer >= RTE_DIM(layers)) {
 			ret = -E2BIG;
 			goto get_out;
 		}
-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH v2 07/19] net/qede: fix missing debug string
  2024-11-18 18:20 ` [PATCH v2 00/19] minor fixes from PVS studio bug list Stephen Hemminger
                     ` (5 preceding siblings ...)
  2024-11-18 18:20   ` [PATCH v2 06/19] eal: fix out of bounds access in devargs Stephen Hemminger
@ 2024-11-18 18:20   ` Stephen Hemminger
  2024-11-18 18:20   ` [PATCH v2 08/19] examples/ptpclient: replace rte_memcpy with assignment Stephen Hemminger
                     ` (11 subsequent siblings)
  18 siblings, 0 replies; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-18 18:20 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger, rmody, stable

The array of debug status strings did not match possible enum
values. Add the missing element and a static assert to make sure
the table has all possible values.

For more complete description see.
Link: https://pvs-studio.com/en/blog/posts/cpp/1176/

Fixes: ec55c118792b ("net/qede: add infrastructure for debug data collection")
Cc: rmody@marvell.com
Cc: stable@dpdk.org

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 drivers/net/qede/qede_debug.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/net/qede/qede_debug.c b/drivers/net/qede/qede_debug.c
index 18f2d988fb..1d3147b724 100644
--- a/drivers/net/qede/qede_debug.c
+++ b/drivers/net/qede/qede_debug.c
@@ -4,6 +4,7 @@
  * www.marvell.com
  */
 
+#include <assert.h>
 #include <rte_common.h>
 #include "base/bcm_osal.h"
 #include "base/ecore.h"
@@ -82,6 +83,7 @@ static const char * const s_mem_group_names[] = {
 	"TM_MEM",
 	"TASK_CFC_MEM",
 };
+static_assert(RTE_DIM(s_mem_group_names) == MEM_GROUPS_NUM, "memory group string mismatch");
 
 /* Idle check conditions */
 
@@ -5614,6 +5616,8 @@ static const char * const s_status_str[] = {
 	/* DBG_STATUS_INVALID_FILTER_TRIGGER_DWORDS */
 	"The filter/trigger constraint dword offsets are not enabled for recording",
 
+	/* DBG_STATUS_NO_MATCHING_FRAMING_MODE */
+	"No matching frame mode",
 
 	/* DBG_STATUS_VFC_READ_ERROR */
 	"Error reading from VFC",
@@ -5759,6 +5763,7 @@ static const char * const s_status_str[] = {
 	/* DBG_STATUS_MISSING_TRIGGER_STATE_STORM */
 	"When triggering on Storm data, the Storm to trigger on must be specified"
 };
+static_assert(RTE_DIM(s_status_str) == MAX_DBG_STATUS, "status string table mismatch");
 
 /* Idle check severity names array */
 static const char * const s_idle_chk_severity_str[] = {
-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH v2 08/19] examples/ptpclient: replace rte_memcpy with assignment
  2024-11-18 18:20 ` [PATCH v2 00/19] minor fixes from PVS studio bug list Stephen Hemminger
                     ` (6 preceding siblings ...)
  2024-11-18 18:20   ` [PATCH v2 07/19] net/qede: fix missing debug string Stephen Hemminger
@ 2024-11-18 18:20   ` Stephen Hemminger
  2024-11-18 18:20   ` [PATCH v2 09/19] examples/ptpclient: fix self memcmp Stephen Hemminger
                     ` (10 subsequent siblings)
  18 siblings, 0 replies; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-18 18:20 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger

Don't use rte_memcpy() when not necessary. Structure assignment
is as fast and type safe.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 examples/ptpclient/ptpclient.c | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/examples/ptpclient/ptpclient.c b/examples/ptpclient/ptpclient.c
index 23fa487081..2ec532d058 100644
--- a/examples/ptpclient/ptpclient.c
+++ b/examples/ptpclient/ptpclient.c
@@ -415,9 +415,7 @@ parse_sync(struct ptpv2_time_receiver_ordinary *ptp_data, uint16_t rx_tstamp_idx
 	ptp_data->seqID_SYNC = rte_be_to_cpu_16(ptp_hdr->seq_id);
 
 	if (ptp_data->ptpset == 0) {
-		rte_memcpy(&ptp_data->transmitter_clock_id,
-				&ptp_hdr->source_port_id.clock_id,
-				sizeof(struct clock_id));
+		ptp_data->transmitter_clock_id = ptp_hdr->source_port_id.clock_id;
 		ptp_data->ptpset = 1;
 	}
 
@@ -522,9 +520,7 @@ parse_fup(struct ptpv2_time_receiver_ordinary *ptp_data)
 		client_clkid->id[6] = eth_hdr->src_addr.addr_bytes[4];
 		client_clkid->id[7] = eth_hdr->src_addr.addr_bytes[5];
 
-		rte_memcpy(&ptp_data->client_clock_id,
-			   client_clkid,
-			   sizeof(struct clock_id));
+		ptp_data->client_clock_id = *client_clkid;
 
 		/* Enable flag for hardware timestamping. */
 		created_pkt->ol_flags |= RTE_MBUF_F_TX_IEEE1588_TMST;
-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH v2 09/19] examples/ptpclient: fix self memcmp
  2024-11-18 18:20 ` [PATCH v2 00/19] minor fixes from PVS studio bug list Stephen Hemminger
                     ` (7 preceding siblings ...)
  2024-11-18 18:20   ` [PATCH v2 08/19] examples/ptpclient: replace rte_memcpy with assignment Stephen Hemminger
@ 2024-11-18 18:20   ` Stephen Hemminger
  2024-11-18 18:20   ` [PATCH v2 10/19] net/octeon_ep: remove duplicate code Stephen Hemminger
                     ` (9 subsequent siblings)
  18 siblings, 0 replies; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-18 18:20 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger, danielx.t.mrzyglod, stable

Calling memcmp on same structure will always be true.
Replace with same conditional used elsewhere.

Link: https://pvs-studio.com/en/blog/posts/cpp/1183/

Fixes: ab129e9065a5 ("examples/ptpclient: add minimal PTP client")
Cc: danielx.t.mrzyglod@intel.com
Cc: stable@dpdk.org

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 examples/ptpclient/ptpclient.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/examples/ptpclient/ptpclient.c b/examples/ptpclient/ptpclient.c
index 2ec532d058..d6dff2eb7e 100644
--- a/examples/ptpclient/ptpclient.c
+++ b/examples/ptpclient/ptpclient.c
@@ -419,7 +419,7 @@ parse_sync(struct ptpv2_time_receiver_ordinary *ptp_data, uint16_t rx_tstamp_idx
 		ptp_data->ptpset = 1;
 	}
 
-	if (memcmp(&ptp_hdr->source_port_id.clock_id,
+	if (memcmp(&ptp_data->transmitter_clock_id,
 			&ptp_hdr->source_port_id.clock_id,
 			sizeof(struct clock_id)) == 0) {
 
-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH v2 10/19] net/octeon_ep: remove duplicate code
  2024-11-18 18:20 ` [PATCH v2 00/19] minor fixes from PVS studio bug list Stephen Hemminger
                     ` (8 preceding siblings ...)
  2024-11-18 18:20   ` [PATCH v2 09/19] examples/ptpclient: fix self memcmp Stephen Hemminger
@ 2024-11-18 18:20   ` Stephen Hemminger
  2024-11-18 18:20   ` [PATCH v2 11/19] net/hinic: fix flow type bitmask overflow Stephen Hemminger
                     ` (8 subsequent siblings)
  18 siblings, 0 replies; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-18 18:20 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger

Both sides of the if in uninit are using same code.

Link: https://pvs-studio.com/en/blog/posts/cpp/1183/

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 drivers/net/octeon_ep/otx_ep_ethdev.c | 9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)

diff --git a/drivers/net/octeon_ep/otx_ep_ethdev.c b/drivers/net/octeon_ep/otx_ep_ethdev.c
index b4f8baf3b3..8b14734b0c 100644
--- a/drivers/net/octeon_ep/otx_ep_ethdev.c
+++ b/drivers/net/octeon_ep/otx_ep_ethdev.c
@@ -721,14 +721,9 @@ static const struct eth_dev_ops otx_ep_eth_dev_ops = {
 static int
 otx_ep_eth_dev_uninit(struct rte_eth_dev *eth_dev)
 {
-	if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
-		eth_dev->dev_ops = NULL;
-		eth_dev->rx_pkt_burst = NULL;
-		eth_dev->tx_pkt_burst = NULL;
-		return 0;
-	}
+	if (rte_eal_process_type() == RTE_PROC_PRIMARY)
+		otx_ep_mbox_uninit(eth_dev);
 
-	otx_ep_mbox_uninit(eth_dev);
 	eth_dev->dev_ops = NULL;
 	eth_dev->rx_pkt_burst = NULL;
 	eth_dev->tx_pkt_burst = NULL;
-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH v2 11/19] net/hinic: fix flow type bitmask overflow
  2024-11-18 18:20 ` [PATCH v2 00/19] minor fixes from PVS studio bug list Stephen Hemminger
                     ` (9 preceding siblings ...)
  2024-11-18 18:20   ` [PATCH v2 10/19] net/octeon_ep: remove duplicate code Stephen Hemminger
@ 2024-11-18 18:20   ` Stephen Hemminger
  2024-11-18 18:20   ` [PATCH v2 12/19] crypto/dpaa2_sec: fix bitmask truncation Stephen Hemminger
                     ` (7 subsequent siblings)
  18 siblings, 0 replies; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-18 18:20 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger, cloud.wangxiaoyun, stable

The type mask is 64 bit value, doing a shift of literal 1 (32 bit)
will result in int type (32 bit) and cause truncation.

Link: https://pvs-studio.com/en/blog/posts/cpp/1183/
Fixes: f4ca3fd54c4d ("net/hinic: create and destroy flow director filter")
Cc: cloud.wangxiaoyun@huawei.com
Cc: stable@dpdk.org

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 drivers/net/hinic/hinic_pmd_flow.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/net/hinic/hinic_pmd_flow.c b/drivers/net/hinic/hinic_pmd_flow.c
index 8fdd5a35be..6b1ca6ff88 100644
--- a/drivers/net/hinic/hinic_pmd_flow.c
+++ b/drivers/net/hinic/hinic_pmd_flow.c
@@ -1979,8 +1979,8 @@ static int hinic_lookup_new_filter(struct hinic_5tuple_filter *filter,
 		return -EINVAL;
 	}
 
-	if (!(filter_info->type_mask & (1 << type_id))) {
-		filter_info->type_mask |= 1 << type_id;
+	if (!(filter_info->type_mask & (UINT64_C(1) << type_id))) {
+		filter_info->type_mask |= UINT64_C(1) << type_id;
 		filter->index = type_id;
 		filter_info->pkt_filters[type_id].enable = true;
 		filter_info->pkt_filters[type_id].pkt_proto =
@@ -2138,7 +2138,7 @@ static void hinic_remove_5tuple_filter(struct rte_eth_dev *dev,
 	filter_info->pkt_type = 0;
 	filter_info->qid = 0;
 	filter_info->pkt_filters[filter->index].qid = 0;
-	filter_info->type_mask &= ~(1 <<  (filter->index));
+	filter_info->type_mask &= ~(UINT64_C(1) << filter->index);
 	TAILQ_REMOVE(&filter_info->fivetuple_list, filter, entries);
 
 	rte_free(filter);
@@ -2268,8 +2268,8 @@ hinic_ethertype_filter_insert(struct hinic_filter_info *filter_info,
 	if (id < 0)
 		return -EINVAL;
 
-	if (!(filter_info->type_mask & (1 << id))) {
-		filter_info->type_mask |= 1 << id;
+	if (!(filter_info->type_mask & (UINT64_C(1) << id))) {
+		filter_info->type_mask |= UINT64_C(1) << id;
 		filter_info->pkt_filters[id].pkt_proto =
 			ethertype_filter->pkt_proto;
 		filter_info->pkt_filters[id].enable = ethertype_filter->enable;
@@ -2289,7 +2289,7 @@ hinic_ethertype_filter_remove(struct hinic_filter_info *filter_info,
 		return;
 
 	filter_info->pkt_type = 0;
-	filter_info->type_mask &= ~(1 << idx);
+	filter_info->type_mask &= ~(UINT64_C(1) << idx);
 	filter_info->pkt_filters[idx].pkt_proto = (uint16_t)0;
 	filter_info->pkt_filters[idx].enable = FALSE;
 	filter_info->pkt_filters[idx].qid = 0;
@@ -2355,7 +2355,7 @@ hinic_add_del_ethertype_filter(struct rte_eth_dev *dev,
 		if (i < 0)
 			return -EINVAL;
 
-		if ((filter_info->type_mask & (1 << i))) {
+		if ((filter_info->type_mask & (UINT64_C(1) << i))) {
 			filter_info->pkt_filters[i].enable = FALSE;
 			(void)hinic_set_fdir_filter(nic_dev->hwdev,
 					filter_info->pkt_type,
-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH v2 12/19] crypto/dpaa2_sec: fix bitmask truncation
  2024-11-18 18:20 ` [PATCH v2 00/19] minor fixes from PVS studio bug list Stephen Hemminger
                     ` (10 preceding siblings ...)
  2024-11-18 18:20   ` [PATCH v2 11/19] net/hinic: fix flow type bitmask overflow Stephen Hemminger
@ 2024-11-18 18:20   ` Stephen Hemminger
  2024-11-18 18:20   ` [PATCH v2 13/19] crypto/dpaa_sec: " Stephen Hemminger
                     ` (6 subsequent siblings)
  18 siblings, 0 replies; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-18 18:20 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger, ashish.jain, stable, Hemant Agrawal

The dqrr_held mask is 64 bit but updates were getting truncated
because 1 is of type int (32 bit) and the result shift of int is of
type int (32 bit); therefore any value >= 32 would get truncated.

Link: https://pvs-studio.com/en/blog/posts/cpp/1183/

Fixes: a77db24643b7 ("crypto/dpaa2_sec: support atomic queues")
Cc: ashish.jain@nxp.com
Cc: stable@dpdk.org

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c b/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c
index ec6577f64c..7ad8fd47dd 100644
--- a/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c
+++ b/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c
@@ -1491,8 +1491,8 @@ dpaa2_sec_enqueue_burst(void *qp, struct rte_crypto_op **ops,
 			if (*dpaa2_seqn((*ops)->sym->m_src)) {
 				if (*dpaa2_seqn((*ops)->sym->m_src) & QBMAN_ENQUEUE_FLAG_DCA) {
 					DPAA2_PER_LCORE_DQRR_SIZE--;
-					DPAA2_PER_LCORE_DQRR_HELD &= ~(1 <<
-					*dpaa2_seqn((*ops)->sym->m_src) &
+					DPAA2_PER_LCORE_DQRR_HELD &= ~(UINT64_C(1) <<
+						*dpaa2_seqn((*ops)->sym->m_src) &
 					QBMAN_EQCR_DCA_IDXMASK);
 				}
 				flags[loop] = *dpaa2_seqn((*ops)->sym->m_src);
@@ -1772,7 +1772,7 @@ dpaa2_sec_set_enqueue_descriptor(struct dpaa2_queue *dpaa2_q,
 		dq_idx = *dpaa2_seqn(m) - 1;
 		qbman_eq_desc_set_dca(eqdesc, 1, dq_idx, 0);
 		DPAA2_PER_LCORE_DQRR_SIZE--;
-		DPAA2_PER_LCORE_DQRR_HELD &= ~(1 << dq_idx);
+		DPAA2_PER_LCORE_DQRR_HELD &= ~(UINT64_C(1) << dq_idx);
 	}
 	*dpaa2_seqn(m) = DPAA2_INVALID_MBUF_SEQN;
 }
@@ -4055,7 +4055,7 @@ dpaa2_sec_process_atomic_event(struct qbman_swp *swp __rte_unused,
 	dqrr_index = qbman_get_dqrr_idx(dq);
 	*dpaa2_seqn(crypto_op->sym->m_src) = QBMAN_ENQUEUE_FLAG_DCA | dqrr_index;
 	DPAA2_PER_LCORE_DQRR_SIZE++;
-	DPAA2_PER_LCORE_DQRR_HELD |= 1 << dqrr_index;
+	DPAA2_PER_LCORE_DQRR_HELD |= UINT64_C(1) << dqrr_index;
 	DPAA2_PER_LCORE_DQRR_MBUF(dqrr_index) = crypto_op->sym->m_src;
 	ev->event_ptr = crypto_op;
 }
-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH v2 13/19] crypto/dpaa_sec: fix bitmask truncation
  2024-11-18 18:20 ` [PATCH v2 00/19] minor fixes from PVS studio bug list Stephen Hemminger
                     ` (11 preceding siblings ...)
  2024-11-18 18:20   ` [PATCH v2 12/19] crypto/dpaa2_sec: fix bitmask truncation Stephen Hemminger
@ 2024-11-18 18:20   ` Stephen Hemminger
  2024-11-18 18:20   ` [PATCH v2 14/19] event/dpaa: " Stephen Hemminger
                     ` (5 subsequent siblings)
  18 siblings, 0 replies; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-18 18:20 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger, akhil.goyal, stable, Hemant Agrawal

The dqrr_held mask is 64 bit but updates were getting truncated
because 1 is of type int (32 bit) and the result shift of int is of
type int (32 bit); therefore any value >= 32 would get truncated.

Link: https://pvs-studio.com/en/blog/posts/cpp/1183/

Fixes: fe3688ba7950 ("crypto/dpaa_sec: support event crypto adapter")
Cc: akhil.goyal@nxp.com
Cc: stable@dpdk.org

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 drivers/crypto/dpaa_sec/dpaa_sec.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/crypto/dpaa_sec/dpaa_sec.c b/drivers/crypto/dpaa_sec/dpaa_sec.c
index 3fa88ca968..e117cd77a6 100644
--- a/drivers/crypto/dpaa_sec/dpaa_sec.c
+++ b/drivers/crypto/dpaa_sec/dpaa_sec.c
@@ -1907,13 +1907,12 @@ dpaa_sec_enqueue_burst(void *qp, struct rte_crypto_op **ops,
 			op = *(ops++);
 			if (*dpaa_seqn(op->sym->m_src) != 0) {
 				index = *dpaa_seqn(op->sym->m_src) - 1;
-				if (DPAA_PER_LCORE_DQRR_HELD & (1 << index)) {
+				if (DPAA_PER_LCORE_DQRR_HELD & (UINT64_C(1) << index)) {
 					/* QM_EQCR_DCA_IDXMASK = 0x0f */
 					flags[loop] = ((index & 0x0f) << 8);
 					flags[loop] |= QMAN_ENQUEUE_FLAG_DCA;
 					DPAA_PER_LCORE_DQRR_SIZE--;
-					DPAA_PER_LCORE_DQRR_HELD &=
-								~(1 << index);
+					DPAA_PER_LCORE_DQRR_HELD &= ~(UINT64_C(1) << index);
 				}
 			}
 
@@ -3500,7 +3499,7 @@ dpaa_sec_process_atomic_event(void *event,
 	/* Save active dqrr entries */
 	index = ((uintptr_t)dqrr >> 6) & (16/*QM_DQRR_SIZE*/ - 1);
 	DPAA_PER_LCORE_DQRR_SIZE++;
-	DPAA_PER_LCORE_DQRR_HELD |= 1 << index;
+	DPAA_PER_LCORE_DQRR_HELD |= UINT64_C(1) << index;
 	DPAA_PER_LCORE_DQRR_MBUF(index) = ctx->op->sym->m_src;
 	ev->impl_opaque = index + 1;
 	*dpaa_seqn(ctx->op->sym->m_src) = (uint32_t)index + 1;
-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH v2 14/19] event/dpaa: fix bitmask truncation
  2024-11-18 18:20 ` [PATCH v2 00/19] minor fixes from PVS studio bug list Stephen Hemminger
                     ` (12 preceding siblings ...)
  2024-11-18 18:20   ` [PATCH v2 13/19] crypto/dpaa_sec: " Stephen Hemminger
@ 2024-11-18 18:20   ` Stephen Hemminger
  2024-11-18 18:20   ` [PATCH v2 15/19] net/dpaa: " Stephen Hemminger
                     ` (4 subsequent siblings)
  18 siblings, 0 replies; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-18 18:20 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger, sunil.kori, stable, Hemant Agrawal

More bitmask truncation from mask computation.

Fixes: 0ee17f79ebd0 ("event/dpaa: add enqueue/dequeue")
Cc: sunil.kori@nxp.com
Cc: stable@dpdk.org

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 drivers/event/dpaa/dpaa_eventdev.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/event/dpaa/dpaa_eventdev.c b/drivers/event/dpaa/dpaa_eventdev.c
index 853cc1ecf9..400e0ecd1c 100644
--- a/drivers/event/dpaa/dpaa_eventdev.c
+++ b/drivers/event/dpaa/dpaa_eventdev.c
@@ -102,7 +102,7 @@ dpaa_event_enqueue_burst(void *port, const struct rte_event ev[],
 			qman_dca_index(ev[i].impl_opaque, 0);
 			mbuf = DPAA_PER_LCORE_DQRR_MBUF(i);
 			*dpaa_seqn(mbuf) = DPAA_INVALID_MBUF_SEQN;
-			DPAA_PER_LCORE_DQRR_HELD &= ~(1 << i);
+			DPAA_PER_LCORE_DQRR_HELD &= ~(UINT64_C(1) << i);
 			DPAA_PER_LCORE_DQRR_SIZE--;
 			break;
 		default:
@@ -199,11 +199,11 @@ dpaa_event_dequeue_burst(void *port, struct rte_event ev[],
 	/* Check if there are atomic contexts to be released */
 	i = 0;
 	while (DPAA_PER_LCORE_DQRR_SIZE) {
-		if (DPAA_PER_LCORE_DQRR_HELD & (1 << i)) {
+		if (DPAA_PER_LCORE_DQRR_HELD & (UINT64_C(1) << i)) {
 			qman_dca_index(i, 0);
 			mbuf = DPAA_PER_LCORE_DQRR_MBUF(i);
 			*dpaa_seqn(mbuf) = DPAA_INVALID_MBUF_SEQN;
-			DPAA_PER_LCORE_DQRR_HELD &= ~(1 << i);
+			DPAA_PER_LCORE_DQRR_HELD &= ~(UINT64_C(1) << i);
 			DPAA_PER_LCORE_DQRR_SIZE--;
 		}
 		i++;
@@ -263,11 +263,11 @@ dpaa_event_dequeue_burst_intr(void *port, struct rte_event ev[],
 	/* Check if there are atomic contexts to be released */
 	i = 0;
 	while (DPAA_PER_LCORE_DQRR_SIZE) {
-		if (DPAA_PER_LCORE_DQRR_HELD & (1 << i)) {
+		if (DPAA_PER_LCORE_DQRR_HELD & (UINT64_C(1) << i)) {
 			qman_dca_index(i, 0);
 			mbuf = DPAA_PER_LCORE_DQRR_MBUF(i);
 			*dpaa_seqn(mbuf) = DPAA_INVALID_MBUF_SEQN;
-			DPAA_PER_LCORE_DQRR_HELD &= ~(1 << i);
+			DPAA_PER_LCORE_DQRR_HELD &= ~(UINT64_C(1) << i);
 			DPAA_PER_LCORE_DQRR_SIZE--;
 		}
 		i++;
-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH v2 15/19] net/dpaa: fix bitmask truncation
  2024-11-18 18:20 ` [PATCH v2 00/19] minor fixes from PVS studio bug list Stephen Hemminger
                     ` (13 preceding siblings ...)
  2024-11-18 18:20   ` [PATCH v2 14/19] event/dpaa: " Stephen Hemminger
@ 2024-11-18 18:20   ` Stephen Hemminger
  2024-11-18 18:20   ` [PATCH v2 16/19] net/dpaa2: " Stephen Hemminger
                     ` (3 subsequent siblings)
  18 siblings, 0 replies; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-18 18:20 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger, sunil.kori, stable, Hemant Agrawal

The dqrr_held mask is 64 bit but updates were getting truncated
because 1 is of type int (32 bit) and the result shift of int is of
type int (32 bit); therefore any value >= 32 would get truncated.

Link: https://pvs-studio.com/en/blog/posts/cpp/1183/

Fixes: 5e7455931442 ("net/dpaa: support Rx queue configurations with eventdev")
Cc: sunil.kori@nxp.com
Cc: stable@dpdk.org

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 drivers/net/dpaa/dpaa_rxtx.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/net/dpaa/dpaa_rxtx.c b/drivers/net/dpaa/dpaa_rxtx.c
index 247e7b92ba..05bd73becf 100644
--- a/drivers/net/dpaa/dpaa_rxtx.c
+++ b/drivers/net/dpaa/dpaa_rxtx.c
@@ -842,7 +842,7 @@ dpaa_rx_cb_atomic(void *event,
 	/* Save active dqrr entries */
 	index = DQRR_PTR2IDX(dqrr);
 	DPAA_PER_LCORE_DQRR_SIZE++;
-	DPAA_PER_LCORE_DQRR_HELD |= 1 << index;
+	DPAA_PER_LCORE_DQRR_HELD |= UINT64_C(1) << index;
 	DPAA_PER_LCORE_DQRR_MBUF(index) = mbuf;
 	ev->impl_opaque = index + 1;
 	*dpaa_seqn(mbuf) = (uint32_t)index + 1;
@@ -1338,13 +1338,12 @@ dpaa_eth_queue_tx(void *q, struct rte_mbuf **bufs, uint16_t nb_bufs)
 			seqn = *dpaa_seqn(mbuf);
 			if (seqn != DPAA_INVALID_MBUF_SEQN) {
 				index = seqn - 1;
-				if (DPAA_PER_LCORE_DQRR_HELD & (1 << index)) {
+				if (DPAA_PER_LCORE_DQRR_HELD & (UINT64_C(1) << index)) {
 					flags[loop] =
 					   ((index & QM_EQCR_DCA_IDXMASK) << 8);
 					flags[loop] |= QMAN_ENQUEUE_FLAG_DCA;
 					DPAA_PER_LCORE_DQRR_SIZE--;
-					DPAA_PER_LCORE_DQRR_HELD &=
-								~(1 << index);
+					DPAA_PER_LCORE_DQRR_HELD &= ~(UINT64_C(1) << index);
 				}
 			}
 
-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH v2 16/19] net/dpaa2: fix bitmask truncation
  2024-11-18 18:20 ` [PATCH v2 00/19] minor fixes from PVS studio bug list Stephen Hemminger
                     ` (14 preceding siblings ...)
  2024-11-18 18:20   ` [PATCH v2 15/19] net/dpaa: " Stephen Hemminger
@ 2024-11-18 18:20   ` Stephen Hemminger
  2024-11-18 18:20   ` [PATCH v2 17/19] net/qede: don't use same loop variable twice Stephen Hemminger
                     ` (2 subsequent siblings)
  18 siblings, 0 replies; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-18 18:20 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger, nipun.gupta, stable, Hemant Agrawal

The dqrr_held mask is 64 bit but updates were getting truncated
because 1 is of type int (32 bit) and the result shift of int is of
type int (32 bit); therefore any value >= 32 would get truncated.

Link: https://pvs-studio.com/en/blog/posts/cpp/1183/

Fixes: 2d3788631862 ("net/dpaa2: support atomic queues")
Cc: nipun.gupta@nxp.com
Cc: stable@dpdk.org

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 drivers/net/dpaa2/dpaa2_rxtx.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/net/dpaa2/dpaa2_rxtx.c b/drivers/net/dpaa2/dpaa2_rxtx.c
index e3b6c7e460..e253bccecd 100644
--- a/drivers/net/dpaa2/dpaa2_rxtx.c
+++ b/drivers/net/dpaa2/dpaa2_rxtx.c
@@ -933,7 +933,7 @@ dpaa2_dev_process_atomic_event(struct qbman_swp *swp __rte_unused,
 	dqrr_index = qbman_get_dqrr_idx(dq);
 	*dpaa2_seqn(ev->mbuf) = dqrr_index + 1;
 	DPAA2_PER_LCORE_DQRR_SIZE++;
-	DPAA2_PER_LCORE_DQRR_HELD |= 1 << dqrr_index;
+	DPAA2_PER_LCORE_DQRR_HELD |= UINT64_C(1) << dqrr_index;
 	DPAA2_PER_LCORE_DQRR_MBUF(dqrr_index) = ev->mbuf;
 }
 
@@ -1317,7 +1317,7 @@ dpaa2_dev_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
 				flags[loop] = QBMAN_ENQUEUE_FLAG_DCA |
 						dqrr_index;
 				DPAA2_PER_LCORE_DQRR_SIZE--;
-				DPAA2_PER_LCORE_DQRR_HELD &= ~(1 << dqrr_index);
+				DPAA2_PER_LCORE_DQRR_HELD &= ~(UINT64_C(1) << dqrr_index);
 				*dpaa2_seqn(*bufs) = DPAA2_INVALID_MBUF_SEQN;
 			}
 
@@ -1575,7 +1575,7 @@ dpaa2_set_enqueue_descriptor(struct dpaa2_queue *dpaa2_q,
 		dq_idx = *dpaa2_seqn(m) - 1;
 		qbman_eq_desc_set_dca(eqdesc, 1, dq_idx, 0);
 		DPAA2_PER_LCORE_DQRR_SIZE--;
-		DPAA2_PER_LCORE_DQRR_HELD &= ~(1 << dq_idx);
+		DPAA2_PER_LCORE_DQRR_HELD &= ~(UINT64_C(1) << dq_idx);
 	}
 	*dpaa2_seqn(m) = DPAA2_INVALID_MBUF_SEQN;
 }
-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH v2 17/19] net/qede: don't use same loop variable twice
  2024-11-18 18:20 ` [PATCH v2 00/19] minor fixes from PVS studio bug list Stephen Hemminger
                     ` (15 preceding siblings ...)
  2024-11-18 18:20   ` [PATCH v2 16/19] net/dpaa2: " Stephen Hemminger
@ 2024-11-18 18:20   ` Stephen Hemminger
  2024-11-18 18:20   ` [PATCH v2 18/19] examples/l3fwd: fix operator precedence bugs Stephen Hemminger
  2024-11-18 18:21   ` [PATCH v2 19/19] common/cnxk: fix null ptr check Stephen Hemminger
  18 siblings, 0 replies; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-18 18:20 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger, rasesh.mody, stable

Using variable in outer loop, and inner loop is obvious bug.
This bug is in base code, so likely on other platforms as well.

Link: https://pvs-studio.com/en/blog/posts/cpp/1183/
Fixes: 81dba2b2ff61 ("net/qede/base: add LLDP support")
Cc: rasesh.mody@cavium.com
Cc: stable@dpdk.org

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 drivers/net/qede/base/ecore_dcbx.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/net/qede/base/ecore_dcbx.c b/drivers/net/qede/base/ecore_dcbx.c
index 31234f18cf..72bbedd65a 100644
--- a/drivers/net/qede/base/ecore_dcbx.c
+++ b/drivers/net/qede/base/ecore_dcbx.c
@@ -1363,7 +1363,7 @@ ecore_lldp_mib_update_event(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt)
 	struct ecore_dcbx_mib_meta_data data;
 	enum _ecore_status_t rc = ECORE_SUCCESS;
 	struct lldp_received_tlvs_s tlvs;
-	int i;
+	int i, j;
 
 	for (i = 0; i < LLDP_MAX_LLDP_AGENTS; i++) {
 		OSAL_MEM_ZERO(&data, sizeof(data));
@@ -1381,9 +1381,9 @@ ecore_lldp_mib_update_event(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt)
 		if (!tlvs.length)
 			continue;
 
-		for (i = 0; i < MAX_TLV_BUFFER; i++)
-			tlvs.tlvs_buffer[i] =
-				OSAL_CPU_TO_BE32(tlvs.tlvs_buffer[i]);
+		for (j = 0; j < MAX_TLV_BUFFER; j++)
+			tlvs.tlvs_buffer[j] =
+				OSAL_CPU_TO_BE32(tlvs.tlvs_buffer[j]);
 
 		OSAL_LLDP_RX_TLVS(p_hwfn, tlvs.tlvs_buffer, tlvs.length);
 	}
-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH v2 18/19] examples/l3fwd: fix operator precedence bugs
  2024-11-18 18:20 ` [PATCH v2 00/19] minor fixes from PVS studio bug list Stephen Hemminger
                     ` (16 preceding siblings ...)
  2024-11-18 18:20   ` [PATCH v2 17/19] net/qede: don't use same loop variable twice Stephen Hemminger
@ 2024-11-18 18:20   ` Stephen Hemminger
  2024-11-18 18:21   ` [PATCH v2 19/19] common/cnxk: fix null ptr check Stephen Hemminger
  18 siblings, 0 replies; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-18 18:20 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger, stable

The expression:

  if ((socketid = rte_lcore_to_socket_id(lcore) != 0) &&

gets evaluated as sockeid = (rte_lcore_to_socket_id(lcore) != 0)
which is not what was intended. This is goes all the way back
to first release.

Link: https://pvs-studio.com/en/blog/posts/cpp/1183/
Fixes: af75078fece3 ("first public release")
Cc: stable@dpdk.org

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 examples/l3fwd-power/main.c | 4 ++--
 examples/l3fwd/main.c       | 5 +++--
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/examples/l3fwd-power/main.c b/examples/l3fwd-power/main.c
index ae8b55924e..7957ea6c95 100644
--- a/examples/l3fwd-power/main.c
+++ b/examples/l3fwd-power/main.c
@@ -1412,8 +1412,8 @@ check_lcore_params(void)
 							"mask\n", lcore);
 			return -1;
 		}
-		if ((socketid = rte_lcore_to_socket_id(lcore) != 0) &&
-							(numa_on == 0)) {
+		socketid = rte_lcore_to_socket_id(lcore);
+		if (socketid != 0 && numa_on == 0) {
 			printf("warning: lcore %u is on socket %d with numa "
 						"off\n", lcore, socketid);
 		}
diff --git a/examples/l3fwd/main.c b/examples/l3fwd/main.c
index 6e2155e005..14076e07cc 100644
--- a/examples/l3fwd/main.c
+++ b/examples/l3fwd/main.c
@@ -307,8 +307,9 @@ check_lcore_params(void)
 			printf("error: lcore %u is not enabled in lcore mask\n", lcore);
 			return -1;
 		}
-		if ((socketid = rte_lcore_to_socket_id(lcore) != 0) &&
-			(numa_on == 0)) {
+
+		socketid = rte_lcore_to_socket_id(lcore);
+		if (socketid != 0 && numa_on == 0) {
 			printf("warning: lcore %u is on socket %d with numa off\n",
 				lcore, socketid);
 		}
-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

* [PATCH v2 19/19] common/cnxk: fix null ptr check
  2024-11-18 18:20 ` [PATCH v2 00/19] minor fixes from PVS studio bug list Stephen Hemminger
                     ` (17 preceding siblings ...)
  2024-11-18 18:20   ` [PATCH v2 18/19] examples/l3fwd: fix operator precedence bugs Stephen Hemminger
@ 2024-11-18 18:21   ` Stephen Hemminger
  18 siblings, 0 replies; 44+ messages in thread
From: Stephen Hemminger @ 2024-11-18 18:21 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger, tduszynski

The pointer mode is used then checked which is a bug reported
by PVS studio and Coverity.

Fixes: bd2fd34ab86f ("common/cnxk: sync eth mode change command with firmware")
Cc: tduszynski@marvell.com

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 drivers/common/cnxk/roc_bphy_cgx.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/common/cnxk/roc_bphy_cgx.c b/drivers/common/cnxk/roc_bphy_cgx.c
index 4f43605e10..6e5cfc7b1d 100644
--- a/drivers/common/cnxk/roc_bphy_cgx.c
+++ b/drivers/common/cnxk/roc_bphy_cgx.c
@@ -369,20 +369,20 @@ roc_bphy_cgx_set_link_mode(struct roc_bphy_cgx *roc_cgx, unsigned int lmac,
 {
 	uint64_t scr1, scr0;
 
+	if (!mode)
+		return -EINVAL;
+
+	if (!roc_cgx)
+		return -EINVAL;
+
 	if (roc_model_is_cn9k() &&
 	    (mode->use_portm_idx || mode->portm_idx || mode->mode_group_idx)) {
 		return -ENOTSUP;
 	}
 
-	if (!roc_cgx)
-		return -EINVAL;
-
 	if (!roc_bphy_cgx_lmac_exists(roc_cgx, lmac))
 		return -ENODEV;
 
-	if (!mode)
-		return -EINVAL;
-
 	scr1 = FIELD_PREP(SCR1_ETH_CMD_ID, ETH_CMD_MODE_CHANGE) |
 	       FIELD_PREP(SCR1_ETH_MODE_CHANGE_ARGS_SPEED, mode->speed) |
 	       FIELD_PREP(SCR1_ETH_MODE_CHANGE_ARGS_DUPLEX, mode->full_duplex) |
-- 
2.45.2


^ permalink raw reply	[flat|nested] 44+ messages in thread

end of thread, other threads:[~2024-11-18 18:24 UTC | newest]

Thread overview: 44+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-11-15  6:05 [PATCH 00/16] small bug fixes from PVS studio bug list Stephen Hemminger
2024-11-15  6:05 ` [PATCH 01/16] common/cnxk: remove duplicate condition Stephen Hemminger
2024-11-15  6:16   ` [EXTERNAL] " Anoob Joseph
2024-11-15  6:05 ` [PATCH 02/16] net/cpfl: avoid calling log (printf) with null Stephen Hemminger
2024-11-15  6:05 ` [PATCH 03/16] raw/cnxk_gpio: fix file descriptor leak Stephen Hemminger
2024-11-15  6:05 ` [PATCH 04/16] net/ntnic: remove dead code Stephen Hemminger
2024-11-15  6:05 ` [PATCH 05/16] net/i40e: remove duplicate code Stephen Hemminger
2024-11-15 11:00   ` Bruce Richardson
2024-11-15  6:05 ` [PATCH 06/16] eal: fix out of bounds access in devargs Stephen Hemminger
2024-11-15  6:05 ` [PATCH 07/16] net/qede: fix missing debug string Stephen Hemminger
2024-11-15  6:05 ` [PATCH 08/16] examples/ptpclient: replace rte_memcpy with assignment Stephen Hemminger
2024-11-15  6:05 ` [PATCH 09/16] examples/ptpclient: fix self memcmp Stephen Hemminger
2024-11-15  6:05 ` [PATCH 10/16] net/octeon_ep: remove duplicate code Stephen Hemminger
2024-11-15  6:05 ` [PATCH 11/16] net/hinic: fix flow type bitmask overflow Stephen Hemminger
2024-11-15  6:05 ` [PATCH 12/16] crypto/dpaa2_sec: fix bitmask truncation Stephen Hemminger
2024-11-18  7:03   ` Hemant Agrawal
2024-11-15  6:05 ` [PATCH 13/16] crypto/dpaa_sec: " Stephen Hemminger
2024-11-18  7:03   ` Hemant Agrawal
2024-11-15  6:05 ` [PATCH 14/16] event/dpaa: " Stephen Hemminger
2024-11-18  7:04   ` Hemant Agrawal
2024-11-15  6:05 ` [PATCH 15/16] net/dpaa: " Stephen Hemminger
2024-11-18  7:04   ` Hemant Agrawal
2024-11-15  6:05 ` [PATCH 16/16] net/dpaa2: " Stephen Hemminger
2024-11-18  7:04   ` Hemant Agrawal
2024-11-18 18:20 ` [PATCH v2 00/19] minor fixes from PVS studio bug list Stephen Hemminger
2024-11-18 18:20   ` [PATCH v2 01/19] common/cnxk: remove duplicate condition Stephen Hemminger
2024-11-18 18:20   ` [PATCH v2 02/19] net/cpfl: avoid calling log (printf) with null Stephen Hemminger
2024-11-18 18:20   ` [PATCH v2 03/19] raw/cnxk_gpio: fix file descriptor leak Stephen Hemminger
2024-11-18 18:20   ` [PATCH v2 04/19] net/ntnic: remove dead code Stephen Hemminger
2024-11-18 18:20   ` [PATCH v2 05/19] net/i40e: remove duplicate code Stephen Hemminger
2024-11-18 18:20   ` [PATCH v2 06/19] eal: fix out of bounds access in devargs Stephen Hemminger
2024-11-18 18:20   ` [PATCH v2 07/19] net/qede: fix missing debug string Stephen Hemminger
2024-11-18 18:20   ` [PATCH v2 08/19] examples/ptpclient: replace rte_memcpy with assignment Stephen Hemminger
2024-11-18 18:20   ` [PATCH v2 09/19] examples/ptpclient: fix self memcmp Stephen Hemminger
2024-11-18 18:20   ` [PATCH v2 10/19] net/octeon_ep: remove duplicate code Stephen Hemminger
2024-11-18 18:20   ` [PATCH v2 11/19] net/hinic: fix flow type bitmask overflow Stephen Hemminger
2024-11-18 18:20   ` [PATCH v2 12/19] crypto/dpaa2_sec: fix bitmask truncation Stephen Hemminger
2024-11-18 18:20   ` [PATCH v2 13/19] crypto/dpaa_sec: " Stephen Hemminger
2024-11-18 18:20   ` [PATCH v2 14/19] event/dpaa: " Stephen Hemminger
2024-11-18 18:20   ` [PATCH v2 15/19] net/dpaa: " Stephen Hemminger
2024-11-18 18:20   ` [PATCH v2 16/19] net/dpaa2: " Stephen Hemminger
2024-11-18 18:20   ` [PATCH v2 17/19] net/qede: don't use same loop variable twice Stephen Hemminger
2024-11-18 18:20   ` [PATCH v2 18/19] examples/l3fwd: fix operator precedence bugs Stephen Hemminger
2024-11-18 18:21   ` [PATCH v2 19/19] common/cnxk: fix null ptr check Stephen Hemminger

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).