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") Signed-off-by: Ferruh Yigit <ferruh.yi...@intel.com> Acked-by: Thomas Monjalon <tho...@monjalon.net> --- Cc: Lee Daly <lee.d...@intel.com> --- 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 15ed2df10..0b13a58db 100644 --- a/lib/librte_ether/rte_ethdev.c +++ b/lib/librte_ether/rte_ethdev.c @@ -1648,11 +1648,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) @@ -1796,6 +1801,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); @@ -1836,8 +1842,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.13.6