From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id AAA14A0093 for ; Mon, 7 Mar 2022 16:10:53 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A633B4068F; Mon, 7 Mar 2022 16:10:53 +0100 (CET) Received: from relay.smtp-ext.broadcom.com (lpdvsmtp11.broadcom.com [192.19.166.231]) by mails.dpdk.org (Postfix) with ESMTP id 091CE4014E for ; Mon, 7 Mar 2022 16:10:52 +0100 (CET) Received: from dhcp-10-123-153-22.dhcp.broadcom.net (bgccx-dev-host-lnx2.bec.broadcom.net [10.123.153.22]) by relay.smtp-ext.broadcom.com (Postfix) with ESMTP id 59035C0000E6; Mon, 7 Mar 2022 07:10:50 -0800 (PST) DKIM-Filter: OpenDKIM Filter v2.11.0 relay.smtp-ext.broadcom.com 59035C0000E6 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=broadcom.com; s=dkimrelay; t=1646665851; bh=+qSAP3Xw+wVeb8mbkxfUCBNovnR5XO2M/GUCdswpl6U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=buwZYNgErmQg8xwMKnah79n6mIrZZo+2I1Peq1WBISnsKFVviyquTWpu5Te2sqw8P 1qyymOJVbiPVlJ0MypGsEzG9WnlBOlNgN+tgQXoSjwzjcnPZ7j09OvXribPQHNq9gG D8+KrwVZtnzq1aZYBf7Wi/upbeOZfO6NcGM3toD0= From: Kalesh A P To: stable@dpdk.org Cc: christian.ehrhardt@canonical.com, ajit.khaparde@broadcom.com Subject: [PATCH 19.11 8/8] net/bnxt: fix xstats names query overrun Date: Mon, 7 Mar 2022 20:40:36 +0530 Message-Id: <20220307151036.7116-9-kalesh-anakkur.purayil@broadcom.com> X-Mailer: git-send-email 2.10.1 In-Reply-To: <20220307151036.7116-1-kalesh-anakkur.purayil@broadcom.com> References: <20220307151036.7116-1-kalesh-anakkur.purayil@broadcom.com> X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org From: Kalesh AP [ upstream commit 8dcee14fbfca8c90cd09c88e0fda65819d82ded6 ] When the xstats_names parameter to rte_eth_xstats_get_names() is non-NULL and the size parameter is less than the required number of entries, the driver must return the required size without modifying (and over-running) the caller's xstats_names array. Update bnxt_dev_xstats_get_names_op() in accordance with this requirement. Fixes: bfb9c2260be2 ("net/bnxt: support xstats get/reset") Signed-off-by: Lance Richardson Signed-off-by: Kalesh AP Acked-by: Ajit Khaparde --- drivers/net/bnxt/bnxt_stats.c | 61 ++++++++++++++++++++----------------------- 1 file changed, 29 insertions(+), 32 deletions(-) diff --git a/drivers/net/bnxt/bnxt_stats.c b/drivers/net/bnxt/bnxt_stats.c index ca66ce1..39fd100 100644 --- a/drivers/net/bnxt/bnxt_stats.c +++ b/drivers/net/bnxt/bnxt_stats.c @@ -597,7 +597,7 @@ int bnxt_dev_xstats_get_op(struct rte_eth_dev *eth_dev, int bnxt_dev_xstats_get_names_op(__rte_unused struct rte_eth_dev *eth_dev, struct rte_eth_xstat_name *xstats_names, - __rte_unused unsigned int limit) + unsigned int size) { /* Account for the Tx drop pkts aka the Anti spoof counter */ const unsigned int stat_cnt = RTE_DIM(bnxt_rx_stats_strings) + @@ -605,52 +605,49 @@ int bnxt_dev_xstats_get_names_op(__rte_unused struct rte_eth_dev *eth_dev, RTE_DIM(bnxt_rx_ext_stats_strings) + RTE_DIM(bnxt_tx_ext_stats_strings); struct bnxt *bp = (struct bnxt *)eth_dev->data->dev_private; - unsigned int i, count; + unsigned int i, count = 0; int rc; rc = is_bnxt_in_error(bp); if (rc) return rc; - if (xstats_names != NULL) { - count = 0; - - for (i = 0; i < RTE_DIM(bnxt_rx_stats_strings); i++) { - strlcpy(xstats_names[count].name, - bnxt_rx_stats_strings[i].name, - sizeof(xstats_names[count].name)); - count++; - } - - for (i = 0; i < RTE_DIM(bnxt_tx_stats_strings); i++) { - strlcpy(xstats_names[count].name, - bnxt_tx_stats_strings[i].name, - sizeof(xstats_names[count].name)); - count++; - } + if (xstats_names != NULL || size < stat_cnt) + return stat_cnt; + for (i = 0; i < RTE_DIM(bnxt_rx_stats_strings); i++) { strlcpy(xstats_names[count].name, - bnxt_func_stats_strings[4].name, + bnxt_rx_stats_strings[i].name, sizeof(xstats_names[count].name)); count++; + } - for (i = 0; i < RTE_DIM(bnxt_rx_ext_stats_strings); i++) { - strlcpy(xstats_names[count].name, - bnxt_rx_ext_stats_strings[i].name, - sizeof(xstats_names[count].name)); - - count++; - } + for (i = 0; i < RTE_DIM(bnxt_tx_stats_strings); i++) { + strlcpy(xstats_names[count].name, + bnxt_tx_stats_strings[i].name, + sizeof(xstats_names[count].name)); + count++; + } - for (i = 0; i < RTE_DIM(bnxt_tx_ext_stats_strings); i++) { - strlcpy(xstats_names[count].name, - bnxt_tx_ext_stats_strings[i].name, - sizeof(xstats_names[count].name)); + strlcpy(xstats_names[count].name, + bnxt_func_stats_strings[4].name, + sizeof(xstats_names[count].name)); + count++; - count++; - } + for (i = 0; i < RTE_DIM(bnxt_rx_ext_stats_strings); i++) { + strlcpy(xstats_names[count].name, + bnxt_rx_ext_stats_strings[i].name, + sizeof(xstats_names[count].name)); + count++; + } + for (i = 0; i < RTE_DIM(bnxt_tx_ext_stats_strings); i++) { + strlcpy(xstats_names[count].name, + bnxt_tx_ext_stats_strings[i].name, + sizeof(xstats_names[count].name)); + count++; } + return stat_cnt; } -- 2.10.1