DPDK patches and discussions
 help / color / mirror / Atom feed
From: "huzaifa.rahman" <huzaifa.rahman@emumba.com>
To: matan@nvidia.com
Cc: dev@dpdk.org, viacheslavo@nvidia.com,
	"huzaifa.rahman" <huzaifa.rahman@emumba.com>
Subject: [PATCH] mlx5: initially reading xstats does not cause seg fault
Date: Thu, 18 Aug 2022 12:30:14 +0000	[thread overview]
Message-ID: <20220818123014.2515261-1-huzaifa.rahman@emumba.com> (raw)

Bugzilla ID: 296

the size of counters array in mlx5_xstats_get() was smaller
than the memory we are setting for this array in
mlx5_os_read_dev_counters(). due to which the extra memory is
corrupted and thus corrupting the seemingly unrelated variables.
this happens at the first run only because the n function arg
of mlx5_xstats_get() which is used to init counters array is
initialized by adding the preceding statistics which in our case
(i.e first run) is zero. after the initialization in
mlx5_os_stats_init() the mlx5_stats_n is populated and thus from
then onward the counters array size is correct

my changes will only affect the flow of the first run when we
need to initialize stats in mlx5_os_stats_init(). the size of the
counters array is set according the mlx5_stats_n variable. by doing
this we will avoid the memset corrupting other variables` memory

Signed-off-by: huzaifa.rahman <huzaifa.rahman@emumba.com>
---
 drivers/net/mlx5/mlx5_stats.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/net/mlx5/mlx5_stats.c b/drivers/net/mlx5/mlx5_stats.c
index f64fa3587b..bccfec10fb 100644
--- a/drivers/net/mlx5/mlx5_stats.c
+++ b/drivers/net/mlx5/mlx5_stats.c
@@ -40,7 +40,6 @@ mlx5_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *stats,
 {
 	struct mlx5_priv *priv = dev->data->dev_private;
 	unsigned int i;
-	uint64_t counters[n];
 	struct mlx5_xstats_ctrl *xstats_ctrl = &priv->xstats_ctrl;
 	uint16_t mlx5_stats_n = xstats_ctrl->mlx5_stats_n;
 
@@ -51,8 +50,11 @@ mlx5_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *stats,
 		stats_n = mlx5_os_get_stats_n(dev);
 		if (stats_n < 0)
 			return stats_n;
-		if (xstats_ctrl->stats_n != stats_n)
+		if (xstats_ctrl->stats_n != stats_n) {
 			mlx5_os_stats_init(dev);
+			n = xstats_ctrl->mlx5_stats_n;
+		}
+		uint64_t counters[n];
 		ret = mlx5_os_read_dev_counters(dev, counters);
 		if (ret)
 			return ret;
-- 
2.25.1


             reply	other threads:[~2022-08-18 12:30 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-18 12:30 huzaifa.rahman [this message]
2022-08-23  7:33 ` Kamil Vojanec
2022-09-22 10:39   ` Huzaifa Rahman
2022-11-10 10:07     ` Huzaifa Rahman
2022-11-10 10:53       ` Kamil Vojanec
2023-03-07 16:42 ` Slava Ovsiienko
2023-03-07 16:51 ` Slava Ovsiienko

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=20220818123014.2515261-1-huzaifa.rahman@emumba.com \
    --to=huzaifa.rahman@emumba.com \
    --cc=dev@dpdk.org \
    --cc=matan@nvidia.com \
    --cc=viacheslavo@nvidia.com \
    /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;
as well as URLs for NNTP newsgroup(s).