From c063a2a8ad55ba9aefde49fd968af3c77aec42da Mon Sep 17 00:00:00 2001 From: Ferruh Yigit Date: Fri, 20 Oct 2017 00:39:52 +0100 Subject: [PATCH] ethdev: check more errors in xstats retrieval Some function calls in xstat functions can return negative values to indicate the error, check return values for those cases. Coverity issue: 195028, 195026 Fixes: 8c49d5f1c219 ("ethdev: rework xstats retrieve by id") Cc: stable@dpdk.org Signed-off-by: Ferruh Yigit Acked-by: Thomas Monjalon --- lib/librte_ether/rte_ethdev.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c index 8bcd3a22bb..17ebb94d15 100644 --- a/lib/librte_ether/rte_ethdev.c +++ b/lib/librte_ether/rte_ethdev.c @@ -1661,11 +1661,16 @@ rte_eth_xstats_get_names_by_id(uint16_t port_id, unsigned int expected_entries; struct rte_eth_dev *dev; unsigned int i; + int ret; RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); - expected_entries = get_xstats_count(port_id); dev = &rte_eth_devices[port_id]; + ret = get_xstats_count(port_id); + if (ret < 0) + return ret; + expected_entries = (unsigned int)ret; + /* Return max number of stats if no ids given */ if (!ids) { if (!xstats_names) @@ -1809,6 +1814,7 @@ rte_eth_xstats_get_by_id(uint16_t port_id, const uint64_t *ids, uint16_t expected_entries; struct rte_eth_dev *dev; unsigned int i; + int ret; RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); expected_entries = get_xstats_count(port_id); @@ -1849,8 +1855,10 @@ rte_eth_xstats_get_by_id(uint16_t port_id, const uint64_t *ids, } /* Fill the xstats structure */ - num_xstats_filled = rte_eth_xstats_get(port_id, xstats, - expected_entries); + ret = rte_eth_xstats_get(port_id, xstats, expected_entries); + if (ret < 0) + return ret; + num_xstats_filled = (unsigned int)ret; /* Return all stats */ if (!ids) { -- 2.20.1