* [PATCH 01/11] net/enetfec: fix file descriptor leak on read error
[not found] <20251006080410.1433284-1-hemant.agrawal@nxp.com>
@ 2025-10-06 8:04 ` Hemant Agrawal
2025-10-06 8:04 ` [PATCH 02/11] net/enetfec: fix out-of-bounds access in UIO mapping Hemant Agrawal
` (6 subsequent siblings)
7 siblings, 0 replies; 8+ messages in thread
From: Hemant Agrawal @ 2025-10-06 8:04 UTC (permalink / raw)
To: dev, stephen, david.marchand; +Cc: stable
The file descriptor was not closed when a read error occurred while
reading the first line from a UIO device file. This could lead to
resource leakage. The patch ensures the descriptor is closed in
case of read failure.
Fixes: b84fdd39638b ("net/enetfec: support UIO")
Cc: stable@dpdk.org
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
drivers/net/enetfec/enet_uio.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/drivers/net/enetfec/enet_uio.c b/drivers/net/enetfec/enet_uio.c
index 9f4e896985..23cb4e7e93 100644
--- a/drivers/net/enetfec/enet_uio.c
+++ b/drivers/net/enetfec/enet_uio.c
@@ -1,5 +1,5 @@
/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright 2021 NXP
+ * Copyright 2021,2024 NXP
*/
#include <stdbool.h>
@@ -66,13 +66,16 @@ file_read_first_line(const char root[], const char subdir[],
"%s/%s/%s", root, subdir, filename);
fd = open(absolute_file_name, O_RDONLY);
- if (fd <= 0)
+ if (fd < 0) {
ENETFEC_PMD_ERR("Error opening file %s", absolute_file_name);
+ return fd;
+ }
/* read UIO device name from first line in file */
ret = read(fd, line, FEC_UIO_MAX_DEVICE_FILE_NAME_LENGTH);
if (ret <= 0) {
ENETFEC_PMD_ERR("Error reading file %s", absolute_file_name);
+ close(fd);
return ret;
}
close(fd);
--
2.25.1
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 02/11] net/enetfec: fix out-of-bounds access in UIO mapping
[not found] <20251006080410.1433284-1-hemant.agrawal@nxp.com>
2025-10-06 8:04 ` [PATCH 01/11] net/enetfec: fix file descriptor leak on read error Hemant Agrawal
@ 2025-10-06 8:04 ` Hemant Agrawal
2025-10-06 8:04 ` [PATCH 03/11] net/enetfec: fix buffer descriptor size configuration Hemant Agrawal
` (5 subsequent siblings)
7 siblings, 0 replies; 8+ messages in thread
From: Hemant Agrawal @ 2025-10-06 8:04 UTC (permalink / raw)
To: dev, stephen, david.marchand; +Cc: Vanshika Shukla, stable
From: Vanshika Shukla <vanshika.shukla@nxp.com>
NXP internal Coverity flagged a potential out-of-bounds
access due to invalid mapping size. This patch adds a check to
ensure the mapping size is within valid bounds before proceeding
with memory mapping.
Fixes: b84fdd39638b ("net/enetfec: support UIO")
Cc: stable@dpdk.org
Signed-off-by: Vanshika Shukla <vanshika.shukla@nxp.com>
---
drivers/net/enetfec/enet_uio.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/net/enetfec/enet_uio.c b/drivers/net/enetfec/enet_uio.c
index 23cb4e7e93..f32d5e1b1e 100644
--- a/drivers/net/enetfec/enet_uio.c
+++ b/drivers/net/enetfec/enet_uio.c
@@ -1,5 +1,5 @@
/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright 2021,2024 NXP
+ * Copyright 2021,2024-2025 NXP
*/
#include <stdbool.h>
@@ -142,6 +142,10 @@ uio_map_mem(int uio_device_fd, int uio_device_id,
}
/* Read mapping size and physical address expressed in hexa(base 16) */
uio_map_size = strtol(uio_map_size_str, NULL, 16);
+ if (uio_map_size <= 0 || uio_map_size > INT_MAX) {
+ ENETFEC_PMD_ERR("Invalid mapping size: %u.", uio_map_size);
+ return NULL;
+ }
uio_map_p_addr = strtol(uio_map_p_addr_str, NULL, 16);
if (uio_map_id == 0) {
--
2.25.1
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 03/11] net/enetfec: fix buffer descriptor size configuration
[not found] <20251006080410.1433284-1-hemant.agrawal@nxp.com>
2025-10-06 8:04 ` [PATCH 01/11] net/enetfec: fix file descriptor leak on read error Hemant Agrawal
2025-10-06 8:04 ` [PATCH 02/11] net/enetfec: fix out-of-bounds access in UIO mapping Hemant Agrawal
@ 2025-10-06 8:04 ` Hemant Agrawal
2025-10-06 8:04 ` [PATCH 04/11] net/enetfec: fix incorrect Tx queue free logic Hemant Agrawal
` (4 subsequent siblings)
7 siblings, 0 replies; 8+ messages in thread
From: Hemant Agrawal @ 2025-10-06 8:04 UTC (permalink / raw)
To: dev, stephen, david.marchand; +Cc: stable
The driver previously allowed arbitrary descriptor counts, which could
lead to misaligned buffer allocations. This patch enforces the use of
fixed descriptor ring sizes for both RX and TX queues, ensuring proper
buffer allocation and avoiding potential runtime issues.
Fixes: bb5b5bf1e5c6 ("net/enetfec: support queue configuration")
Cc: stable@dpdk.org
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
drivers/net/enetfec/enet_ethdev.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/enetfec/enet_ethdev.c b/drivers/net/enetfec/enet_ethdev.c
index 7c2926409e..f7a45fcd4d 100644
--- a/drivers/net/enetfec/enet_ethdev.c
+++ b/drivers/net/enetfec/enet_ethdev.c
@@ -384,7 +384,7 @@ enetfec_tx_queue_setup(struct rte_eth_dev *dev,
return -ENOMEM;
}
- if (nb_desc > MAX_TX_BD_RING_SIZE) {
+ if (nb_desc != MAX_TX_BD_RING_SIZE) {
nb_desc = MAX_TX_BD_RING_SIZE;
ENETFEC_PMD_WARN("modified the nb_desc to MAX_TX_BD_RING_SIZE");
}
@@ -462,7 +462,7 @@ enetfec_rx_queue_setup(struct rte_eth_dev *dev,
return -ENOMEM;
}
- if (nb_rx_desc > MAX_RX_BD_RING_SIZE) {
+ if (nb_rx_desc != MAX_RX_BD_RING_SIZE) {
nb_rx_desc = MAX_RX_BD_RING_SIZE;
ENETFEC_PMD_WARN("modified the nb_desc to MAX_RX_BD_RING_SIZE");
}
--
2.25.1
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 04/11] net/enetfec: fix incorrect Tx queue free logic
[not found] <20251006080410.1433284-1-hemant.agrawal@nxp.com>
` (2 preceding siblings ...)
2025-10-06 8:04 ` [PATCH 03/11] net/enetfec: fix buffer descriptor size configuration Hemant Agrawal
@ 2025-10-06 8:04 ` Hemant Agrawal
2025-10-06 8:04 ` [PATCH 05/11] net/enetfec: fix checksum flag handling and error return Hemant Agrawal
` (3 subsequent siblings)
7 siblings, 0 replies; 8+ messages in thread
From: Hemant Agrawal @ 2025-10-06 8:04 UTC (permalink / raw)
To: dev, stephen, david.marchand; +Cc: stable
The TX queue cleanup mistakenly freed RX queue pointers instead of TX
queue pointers. This patch corrects the loop to free the correct memory.
Fixes: ecae71571b0d ("net/enetfec: support Rx/Tx")
Cc: stable@dpdk.org
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
drivers/net/enetfec/enet_ethdev.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/enetfec/enet_ethdev.c b/drivers/net/enetfec/enet_ethdev.c
index f7a45fcd4d..16f36a53f1 100644
--- a/drivers/net/enetfec/enet_ethdev.c
+++ b/drivers/net/enetfec/enet_ethdev.c
@@ -350,7 +350,7 @@ enet_free_queue(struct rte_eth_dev *dev)
for (i = 0; i < dev->data->nb_rx_queues; i++)
rte_free(fep->rx_queues[i]);
for (i = 0; i < dev->data->nb_tx_queues; i++)
- rte_free(fep->rx_queues[i]);
+ rte_free(fep->tx_queues[i]);
}
static const unsigned short offset_des_active_rxq[] = {
--
2.25.1
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 05/11] net/enetfec: fix checksum flag handling and error return
[not found] <20251006080410.1433284-1-hemant.agrawal@nxp.com>
` (3 preceding siblings ...)
2025-10-06 8:04 ` [PATCH 04/11] net/enetfec: fix incorrect Tx queue free logic Hemant Agrawal
@ 2025-10-06 8:04 ` Hemant Agrawal
2025-10-06 8:04 ` [PATCH 06/11] net/enetfec: fix to reject multi-queue configuration Hemant Agrawal
` (2 subsequent siblings)
7 siblings, 0 replies; 8+ messages in thread
From: Hemant Agrawal @ 2025-10-06 8:04 UTC (permalink / raw)
To: dev, stephen, david.marchand; +Cc: stable
- Corrects the logic for setting RX checksum flags based on error status.
- Updates TX checksum offload condition to check for TX flags.
- Fixes incorrect error return in RX queue setup by replacing `errno`
with `-ENOMEM`.
Fixes: ecae71571b0d ("net/enetfec: support Rx/Tx")
Cc: stable@dpdk.org
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
drivers/net/enetfec/enet_rxtx.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/net/enetfec/enet_rxtx.c b/drivers/net/enetfec/enet_rxtx.c
index 0aea8b240d..ea2c28a26b 100644
--- a/drivers/net/enetfec/enet_rxtx.c
+++ b/drivers/net/enetfec/enet_rxtx.c
@@ -121,10 +121,11 @@ enetfec_recv_pkts(void *rxq1, struct rte_mbuf **rx_pkts,
(rxq->fep->flag_csum & RX_FLAG_CSUM_EN)) {
if ((rte_read32(&ebdp->bd_esc) &
rte_cpu_to_le_32(RX_FLAG_CSUM_ERR)) == 0) {
- /* don't check it */
- mbuf->ol_flags = RTE_MBUF_F_RX_IP_CKSUM_BAD;
- } else {
+ /* No checksum error - checksum is good */
mbuf->ol_flags = RTE_MBUF_F_RX_IP_CKSUM_GOOD;
+ } else {
+ /* Checksum error detected */
+ mbuf->ol_flags = RTE_MBUF_F_RX_IP_CKSUM_BAD;
}
}
@@ -238,7 +239,8 @@ enetfec_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
if (txq->fep->bufdesc_ex) {
struct bufdesc_ex *ebdp = (struct bufdesc_ex *)bdp;
- if (mbuf->ol_flags == RTE_MBUF_F_RX_IP_CKSUM_GOOD)
+ if (mbuf->ol_flags & (RTE_MBUF_F_TX_IP_CKSUM | RTE_MBUF_F_TX_TCP_CKSUM |
+ RTE_MBUF_F_TX_UDP_CKSUM | RTE_MBUF_F_TX_SCTP_CKSUM))
estatus |= TX_BD_PINS | TX_BD_IINS;
rte_write32(0, &ebdp->bd_bdu);
--
2.25.1
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 06/11] net/enetfec: fix to reject multi-queue configuration
[not found] <20251006080410.1433284-1-hemant.agrawal@nxp.com>
` (4 preceding siblings ...)
2025-10-06 8:04 ` [PATCH 05/11] net/enetfec: fix checksum flag handling and error return Hemant Agrawal
@ 2025-10-06 8:04 ` Hemant Agrawal
2025-10-06 8:04 ` [PATCH 07/11] net/enetfec: fix memory leak in Rx buffer cleanup Hemant Agrawal
2025-10-06 8:04 ` [PATCH 08/11] net/enetfec: fix to add check for Rx/Tx deferred queue Hemant Agrawal
7 siblings, 0 replies; 8+ messages in thread
From: Hemant Agrawal @ 2025-10-06 8:04 UTC (permalink / raw)
To: dev, stephen, david.marchand; +Cc: stable
The enetfec PMD currently supports only a single TX queue. This patch
adds a check to prevent users from configuring more than one queue,
ensuring predictable behavior and avoiding unsupported configurations.
Fixes: bb5b5bf1e5c6 ("net/enetfec: support queue configuration")
Cc: stable@dpdk.org
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
drivers/net/enetfec/enet_ethdev.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/net/enetfec/enet_ethdev.c b/drivers/net/enetfec/enet_ethdev.c
index 16f36a53f1..bcecab828e 100644
--- a/drivers/net/enetfec/enet_ethdev.c
+++ b/drivers/net/enetfec/enet_ethdev.c
@@ -1,5 +1,5 @@
/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright 2020-2021 NXP
+ * Copyright 2020-2021,2023 NXP
*/
#include <inttypes.h>
@@ -377,6 +377,11 @@ enetfec_tx_queue_setup(struct rte_eth_dev *dev,
sizeof(struct bufdesc);
unsigned int dsize_log2 = rte_fls_u64(dsize) - 1;
+ if (queue_idx > 0) {
+ ENETFEC_PMD_ERR("Multi queue not supported");
+ return -EINVAL;
+ }
+
/* allocate transmit queue */
txq = rte_zmalloc(NULL, sizeof(*txq), RTE_CACHE_LINE_SIZE);
if (txq == NULL) {
--
2.25.1
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 07/11] net/enetfec: fix memory leak in Rx buffer cleanup
[not found] <20251006080410.1433284-1-hemant.agrawal@nxp.com>
` (5 preceding siblings ...)
2025-10-06 8:04 ` [PATCH 06/11] net/enetfec: fix to reject multi-queue configuration Hemant Agrawal
@ 2025-10-06 8:04 ` Hemant Agrawal
2025-10-06 8:04 ` [PATCH 08/11] net/enetfec: fix to add check for Rx/Tx deferred queue Hemant Agrawal
7 siblings, 0 replies; 8+ messages in thread
From: Hemant Agrawal @ 2025-10-06 8:04 UTC (permalink / raw)
To: dev, stephen, david.marchand; +Cc: stable
The RX buffer cleanup logic did not check for NULL before freeing mbufs,
which could lead to undefined behavior. This patch adds a NULL check
before freeing each mbuf.
Fixes: ecae71571b0d ("net/enetfec: support Rx/Tx")
Cc: stable@dpdk.org
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
drivers/net/enetfec/enet_ethdev.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/net/enetfec/enet_ethdev.c b/drivers/net/enetfec/enet_ethdev.c
index bcecab828e..60bb4f7ebd 100644
--- a/drivers/net/enetfec/enet_ethdev.c
+++ b/drivers/net/enetfec/enet_ethdev.c
@@ -1,5 +1,5 @@
/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright 2020-2021,2023 NXP
+ * Copyright 2020-2021,2023-2024 NXP
*/
#include <inttypes.h>
@@ -172,8 +172,10 @@ enet_free_buffers(struct rte_eth_dev *dev)
bdp = rxq->bd.base;
for (i = 0; i < rxq->bd.ring_size; i++) {
mbuf = rxq->rx_mbuf[i];
- rxq->rx_mbuf[i] = NULL;
- rte_pktmbuf_free(mbuf);
+ if (mbuf) {
+ rxq->rx_mbuf[i] = NULL;
+ rte_pktmbuf_free(mbuf);
+ }
bdp = enet_get_nextdesc(bdp, &rxq->bd);
}
}
@@ -547,7 +549,7 @@ enetfec_rx_queue_setup(struct rte_eth_dev *dev,
}
}
rte_free(rxq);
- return errno;
+ return -ENOMEM;
}
static const struct eth_dev_ops enetfec_ops = {
--
2.25.1
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 08/11] net/enetfec: fix to add check for Rx/Tx deferred queue
[not found] <20251006080410.1433284-1-hemant.agrawal@nxp.com>
` (6 preceding siblings ...)
2025-10-06 8:04 ` [PATCH 07/11] net/enetfec: fix memory leak in Rx buffer cleanup Hemant Agrawal
@ 2025-10-06 8:04 ` Hemant Agrawal
7 siblings, 0 replies; 8+ messages in thread
From: Hemant Agrawal @ 2025-10-06 8:04 UTC (permalink / raw)
To: dev, stephen, david.marchand; +Cc: stable
This patch adds a check to reject configuration of Tx deferred start,
which is not supported by the enetfec PMD. This ensures that unsupported
features are explicitly handled and reported.
Fixes: bb5b5bf1e5c6 ("net/enetfec: support queue configuration")
Cc: stable@dpdk.org
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
drivers/net/enetfec/enet_ethdev.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/drivers/net/enetfec/enet_ethdev.c b/drivers/net/enetfec/enet_ethdev.c
index 60bb4f7ebd..6d4d3e0fc2 100644
--- a/drivers/net/enetfec/enet_ethdev.c
+++ b/drivers/net/enetfec/enet_ethdev.c
@@ -384,6 +384,12 @@ enetfec_tx_queue_setup(struct rte_eth_dev *dev,
return -EINVAL;
}
+ /* Tx deferred start is not supported */
+ if (tx_conf->tx_deferred_start) {
+ ENETFEC_PMD_ERR("Tx deferred start not supported");
+ return -EINVAL;
+ }
+
/* allocate transmit queue */
txq = rte_zmalloc(NULL, sizeof(*txq), RTE_CACHE_LINE_SIZE);
if (txq == NULL) {
--
2.25.1
^ permalink raw reply [flat|nested] 8+ messages in thread