From: Maxime Leroy <maxime@leroys.fr>
To: dev@dpdk.org
Cc: hemant.agrawal@nxp.com, stephen@networkplumber.org,
david.marchand@redhat.com, Maxime Leroy <maxime@leroys.fr>,
stable@dpdk.org
Subject: [PATCH v3 14/17] net/dpaa2: fix MAC stats DMA alloc per xstats call
Date: Fri, 6 Mar 2026 14:30:32 +0100 [thread overview]
Message-ID: <20260306133035.179709-15-maxime@leroys.fr> (raw)
In-Reply-To: <20260226143341.282188-1-maxime@leroys.fr>
dpaa2_dev_mac_setup_stats() allocates and frees DMA buffers on every
xstats_get() call. This is wasteful and not thread-safe: concurrent
callers can overwrite priv pointers, leading to use-after-free. It
also does not check for allocation failure before passing IOVAs to
the MC firmware.
Move the DMA buffer allocation to dpaa2_dev_init() (only when MC
version supports MAC stats) and free them in dpaa2_dev_close(). In
xstats_get(), just check if the buffers were allocated.
Not tested, found by code review.
Fixes: d1cdef2ab592 ("net/dpaa2: add dpmac counters in xstats")
Cc: stable@dpdk.org
Reported-by: Stephen Hemminger <stephen@networkplumber.org>
Signed-off-by: Maxime Leroy <maxime@leroys.fr>
---
drivers/net/dpaa2/dpaa2_ethdev.c | 65 +++++++++++++++-----------------
1 file changed, 30 insertions(+), 35 deletions(-)
diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c
index 3875164794..d5e30ce5fb 100644
--- a/drivers/net/dpaa2/dpaa2_ethdev.c
+++ b/drivers/net/dpaa2/dpaa2_ethdev.c
@@ -1550,6 +1550,11 @@ dpaa2_dev_close(struct rte_eth_dev *dev)
rte_free(priv->extract.qos_extract_param);
+ rte_free(priv->cnt_idx_dma_mem);
+ rte_free(priv->cnt_values_dma_mem);
+ priv->cnt_idx_dma_mem = NULL;
+ priv->cnt_values_dma_mem = NULL;
+
DPAA2_PMD_INFO("%s: netdev deleted", dev->data->name);
return 0;
}
@@ -1905,7 +1910,6 @@ dpaa2_dev_xstats_get(struct rte_eth_dev *dev,
unsigned int i = 0, j = 0, num = RTE_DIM(dpaa2_xstats_strings);
struct dpaa2_dev_priv *priv = dev->data->dev_private;
union dpni_statistics value[13] = {};
- struct mc_version mc_ver_info = {0};
struct dpni_rx_tc_policing_cfg cfg;
uint8_t page_id, stats_id;
uint64_t *cnt_values;
@@ -1976,44 +1980,24 @@ dpaa2_dev_xstats_get(struct rte_eth_dev *dev,
i++;
}
- if (mc_get_version(dpni, CMD_PRI_LOW, &mc_ver_info))
- DPAA2_PMD_WARN("Unable to obtain MC version");
-
- /* mac_statistics supported on MC version > 10.39.0 */
- if (mc_ver_info.major >= MC_VER_MAJOR &&
- mc_ver_info.minor >= MC_VER_MINOR &&
- mc_ver_info.revision > 0) {
- dpaa2_dev_mac_setup_stats(dev);
- retcode = dpni_get_mac_statistics(dpni, CMD_PRI_LOW, priv->token,
- priv->cnt_idx_iova,
- priv->cnt_values_iova,
- DPAA2_MAC_NUM_STATS);
- if (retcode) {
- while (i >= (num - DPAA2_MAC_NUM_STATS) && i < num) {
- xstats[i].id = i;
- xstats[i].value = 0;
- i++;
- }
- }
- if (!retcode) {
- cnt_values = priv->cnt_values_dma_mem;
- while (i >= (num - DPAA2_MAC_NUM_STATS) && i < num) {
- /* mac counters value */
- xstats[i].id = i;
- xstats[i].value = rte_le_to_cpu_64(*cnt_values++);
- i++;
- }
- }
- rte_free(priv->cnt_values_dma_mem);
- rte_free(priv->cnt_idx_dma_mem);
- priv->cnt_idx_dma_mem = NULL;
- priv->cnt_values_dma_mem = NULL;
- } else {
+ if (priv->cnt_idx_dma_mem &&
+ !dpni_get_mac_statistics(dpni, CMD_PRI_LOW, priv->token,
+ priv->cnt_idx_iova,
+ priv->cnt_values_iova,
+ DPAA2_MAC_NUM_STATS)) {
+ cnt_values = priv->cnt_values_dma_mem;
while (i >= (num - DPAA2_MAC_NUM_STATS) && i < num) {
xstats[i].id = i;
- xstats[i].value = 0;
+ xstats[i].value = rte_le_to_cpu_64(*cnt_values++);
i++;
}
+ return i;
+ }
+
+ while (i >= (num - DPAA2_MAC_NUM_STATS) && i < num) {
+ xstats[i].id = i;
+ xstats[i].value = 0;
+ i++;
}
return i;
@@ -3155,6 +3139,17 @@ dpaa2_dev_init(struct rte_eth_dev *eth_dev)
priv->speed_capa = dpaa2_dev_get_speed_capability(eth_dev);
+ /* mac_statistics supported on MC version > 10.39.0 */
+ {
+ struct mc_version mc_ver_info = {0};
+
+ if (!mc_get_version(dpni_dev, CMD_PRI_LOW, &mc_ver_info) &&
+ mc_ver_info.major >= MC_VER_MAJOR &&
+ mc_ver_info.minor >= MC_VER_MINOR &&
+ mc_ver_info.revision > 0)
+ dpaa2_dev_mac_setup_stats(eth_dev);
+ }
+
return 0;
init_err:
dpaa2_dev_close(eth_dev);
--
2.43.0
next prev parent reply other threads:[~2026-03-06 13:32 UTC|newest]
Thread overview: 98+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-18 16:04 [PATCH 00/11] net/dpaa2: fixes and improvements Maxime Leroy
2026-02-18 16:04 ` [PATCH 01/11] net/dpaa2: fix queue block memory leak on port close Maxime Leroy
2026-02-18 16:04 ` [PATCH 02/11] net/dpaa2: fix rx error queue " Maxime Leroy
2026-02-19 10:56 ` Hemant Agrawal
2026-02-19 11:01 ` Hemant Agrawal
2026-02-18 16:04 ` [PATCH 03/11] net/dpaa2: warn on rx descriptor limit only in high perf buffer mode Maxime Leroy
2026-02-19 10:58 ` Hemant Agrawal
2026-02-18 16:04 ` [PATCH 04/11] net/dpaa2: fix rx error queue leak in alloc error path Maxime Leroy
2026-02-18 16:04 ` [PATCH 05/11] net/dpaa2: fix resource leak on softparser failure Maxime Leroy
2026-02-18 16:04 ` [PATCH 06/11] net/dpaa2: add devargs to disable Rx taildrop Maxime Leroy
2026-02-19 13:41 ` Hemant Agrawal
2026-02-18 16:04 ` [PATCH 07/11] net/dpaa2: replace data stashing getenv with devargs Maxime Leroy
2026-02-19 13:44 ` Hemant Agrawal
2026-02-18 16:04 ` [PATCH 08/11] net/dpaa2: fix link not up after port stop/start Maxime Leroy
2026-02-19 13:45 ` Hemant Agrawal
2026-02-18 16:04 ` [PATCH 09/11] net/dpaa2: use CHECK_INTERVAL macro in set_link_down Maxime Leroy
2026-02-19 13:46 ` Hemant Agrawal
2026-02-18 16:04 ` [PATCH 10/11] bus/fslmc: fix devargs not propagated on hotplug Maxime Leroy
2026-02-18 16:45 ` David Marchand
2026-02-19 9:05 ` Maxime Leroy
2026-02-19 16:52 ` David Marchand
2026-02-18 16:04 ` [PATCH 11/11] bus/fslmc: remove dead blocklist check in plug path Maxime Leroy
2026-02-18 17:01 ` David Marchand
2026-02-18 17:07 ` [PATCH 00/11] net/dpaa2: fixes and improvements Stephen Hemminger
2026-02-19 9:12 ` Maxime Leroy
2026-02-18 17:21 ` Stephen Hemminger
2026-02-26 14:33 ` [PATCH v2 00/17] " Maxime Leroy
2026-02-26 19:25 ` Stephen Hemminger
2026-03-05 16:55 ` David Marchand
2026-03-05 17:57 ` Stephen Hemminger
2026-03-06 8:09 ` Maxime Leroy
2026-03-06 13:30 ` [PATCH v3 " Maxime Leroy
2026-03-06 18:51 ` Stephen Hemminger
2026-03-09 9:45 ` Maxime Leroy
2026-03-09 10:29 ` Hemant Agrawal
2026-03-24 5:19 ` Hemant Agrawal
2026-03-25 20:45 ` [PATCH v4 " Maxime Leroy
2026-03-25 20:45 ` [PATCH v4 01/17] net/dpaa2: fix queue block memory leak on port close Maxime Leroy
2026-03-25 20:45 ` [PATCH v4 02/17] net/dpaa2: fix Rx error queue memory leaks Maxime Leroy
2026-03-25 20:45 ` [PATCH v4 03/17] net/dpaa2: warn on Rx descriptor limit in high perf mode Maxime Leroy
2026-03-25 20:45 ` [PATCH v4 04/17] net/dpaa2: fix resource leak on softparser failure Maxime Leroy
2026-03-25 20:45 ` [PATCH v4 05/17] net/dpaa2: fix link not up after port stop/start Maxime Leroy
2026-03-25 20:45 ` [PATCH v4 06/17] bus/fslmc: fix devargs not propagated on hotplug Maxime Leroy
2026-03-25 20:45 ` [PATCH v4 07/17] net/dpaa2: fix spurious VLAN insertion on non-VLAN packets Maxime Leroy
2026-03-25 20:45 ` [PATCH v4 08/17] net/dpaa2: fix error packet dump crash and memory leak Maxime Leroy
2026-03-25 20:45 ` [PATCH v4 09/17] net/dpaa2: fix L4 packet type in slow parse path Maxime Leroy
2026-03-25 20:45 ` [PATCH v4 10/17] net/dpaa2: fix L3/L4 checksum offload flags Maxime Leroy
2026-03-25 20:45 ` [PATCH v4 11/17] net/dpaa2: fix software taildrop buffer access Maxime Leroy
2026-03-25 20:45 ` [PATCH v4 12/17] net/dpaa2: fix burst mode info report Maxime Leroy
2026-03-25 20:45 ` [PATCH v4 13/17] net/dpaa2: add SG table walk upper bound in Rx path Maxime Leroy
2026-03-25 20:45 ` [PATCH v4 14/17] net/dpaa2: fix MAC stats DMA alloc per xstats call Maxime Leroy
2026-03-25 20:45 ` [PATCH v4 15/17] net/dpaa2: use check interval macro in link down path Maxime Leroy
2026-03-25 20:45 ` [PATCH v4 16/17] net/dpaa2: add devargs to disable Rx taildrop Maxime Leroy
2026-03-25 20:45 ` [PATCH v4 17/17] net/dpaa2: add devargs alternative for data stashing getenv Maxime Leroy
2026-03-26 22:42 ` [PATCH v4 00/17] net/dpaa2: fixes and improvements Stephen Hemminger
2026-03-06 13:30 ` [PATCH v3 01/17] net/dpaa2: fix queue block memory leak on port close Maxime Leroy
2026-03-06 13:30 ` [PATCH v3 02/17] net/dpaa2: fix Rx error queue memory leaks Maxime Leroy
2026-03-06 13:30 ` [PATCH v3 03/17] net/dpaa2: warn on Rx descriptor limit in high perf mode Maxime Leroy
2026-03-12 9:27 ` Hemant Agrawal
2026-03-18 15:17 ` Maxime Leroy
2026-03-06 13:30 ` [PATCH v3 04/17] net/dpaa2: fix resource leak on softparser failure Maxime Leroy
2026-03-06 13:30 ` [PATCH v3 05/17] net/dpaa2: fix link not up after port stop/start Maxime Leroy
2026-03-06 13:30 ` [PATCH v3 06/17] bus/fslmc: fix devargs not propagated on hotplug Maxime Leroy
2026-03-06 13:30 ` [PATCH v3 07/17] net/dpaa2: fix spurious VLAN insertion on non-VLAN packets Maxime Leroy
2026-03-06 13:30 ` [PATCH v3 08/17] net/dpaa2: fix error packet dump crash and memory leak Maxime Leroy
2026-03-06 13:30 ` [PATCH v3 09/17] net/dpaa2: fix L4 packet type in slow parse path Maxime Leroy
2026-03-06 13:30 ` [PATCH v3 10/17] net/dpaa2: fix L3/L4 checksum offload flags Maxime Leroy
2026-03-06 13:30 ` [PATCH v3 11/17] net/dpaa2: fix software taildrop buffer access Maxime Leroy
2026-03-06 13:30 ` [PATCH v3 12/17] net/dpaa2: fix burst mode info report Maxime Leroy
2026-03-06 13:30 ` [PATCH v3 13/17] net/dpaa2: add SG table walk upper bound in Rx path Maxime Leroy
2026-03-06 13:30 ` Maxime Leroy [this message]
2026-03-06 13:30 ` [PATCH v3 15/17] net/dpaa2: use check interval macro in link down path Maxime Leroy
2026-03-06 13:30 ` [PATCH v3 16/17] net/dpaa2: add devargs to disable Rx taildrop Maxime Leroy
2026-03-06 13:30 ` [PATCH v3 17/17] net/dpaa2: add devargs alternative for data stashing getenv Maxime Leroy
2026-03-06 17:48 ` Stephen Hemminger
2026-02-26 14:33 ` [PATCH v2 01/17] net/dpaa2: fix queue block memory leak on port close Maxime Leroy
2026-02-26 14:33 ` [PATCH v2 02/17] net/dpaa2: fix rx error queue memory leaks Maxime Leroy
2026-02-26 14:33 ` [PATCH v2 03/17] net/dpaa2: warn on rx descriptor limit only in high perf buffer mode Maxime Leroy
2026-02-26 19:24 ` Stephen Hemminger
2026-02-26 14:33 ` [PATCH v2 04/17] net/dpaa2: fix resource leak on softparser failure Maxime Leroy
2026-02-26 14:33 ` [PATCH v2 05/17] net/dpaa2: fix link not up after port stop/start Maxime Leroy
2026-02-26 14:33 ` [PATCH v2 06/17] bus/fslmc: fix devargs not propagated on hotplug Maxime Leroy
2026-02-26 14:33 ` [PATCH v2 07/17] net/dpaa2: fix spurious VLAN insertion on non-VLAN packets Maxime Leroy
2026-02-26 14:33 ` [PATCH v2 08/17] net/dpaa2: fix error packet dump crash and memory leak Maxime Leroy
2026-02-26 19:23 ` Stephen Hemminger
2026-02-26 14:33 ` [PATCH v2 09/17] net/dpaa2: fix L4 packet type classification in slow parse path Maxime Leroy
2026-02-26 14:33 ` [PATCH v2 10/17] net/dpaa2: fix L3/L4 checksum offload flags Maxime Leroy
2026-02-26 14:33 ` [PATCH v2 11/17] net/dpaa2: fix software taildrop buffer access Maxime Leroy
2026-02-26 19:21 ` Stephen Hemminger
2026-02-27 9:23 ` David Marchand
2026-02-27 21:29 ` Morten Brørup
2026-03-06 17:35 ` Stephen Hemminger
2026-02-26 14:33 ` [PATCH v2 12/17] net/dpaa2: fix burst mode info to report active burst function Maxime Leroy
2026-02-26 14:33 ` [PATCH v2 13/17] net/dpaa2: add SG table walk upper bound in Rx path Maxime Leroy
2026-02-26 14:33 ` [PATCH v2 14/17] net/dpaa2: fix MAC stats DMA buffer allocation per xstats call Maxime Leroy
2026-02-26 14:33 ` [PATCH v2 15/17] net/dpaa2: use CHECK_INTERVAL macro in set_link_down Maxime Leroy
2026-02-26 14:33 ` [PATCH v2 16/17] net/dpaa2: add devargs to disable Rx taildrop Maxime Leroy
2026-02-26 14:33 ` [PATCH v2 17/17] net/dpaa2: add devargs alternative for data stashing getenv Maxime Leroy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260306133035.179709-15-maxime@leroys.fr \
--to=maxime@leroys.fr \
--cc=david.marchand@redhat.com \
--cc=dev@dpdk.org \
--cc=hemant.agrawal@nxp.com \
--cc=stable@dpdk.org \
--cc=stephen@networkplumber.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox