ethdev: fix xstats retrieval with a null array
authorOlivier Matz <olivier.matz@6wind.com>
Mon, 4 Apr 2016 15:45:18 +0000 (17:45 +0200)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Wed, 6 Apr 2016 10:27:57 +0000 (12:27 +0200)
commit2329a101f478c6afe59b7d92a284d19b19e8326a
tree278771b9141511208e5898aab3399467bd6395d4
parent62a6588f2af71d34f396c0a91fce9e88e2ad1e66
ethdev: fix xstats retrieval with a null array

Coverity reports an issue in ethdev:

  *** CID 124562:  Null pointer dereferences  (FORWARD_NULL)
  /lib/librte_ether/rte_ethdev.c: 1518 in rte_eth_xstats_get()
  1512
  1513 /* global stats */
  1514      for (i = 0; i < RTE_NB_STATS; i++) {
  1515          stats_ptr = RTE_PTR_ADD(&eth_stats,
  1516
  rte_stats_strings[i].offset);
  1517 val = *stats_ptr;
  >>>     CID 124562:  Null pointer dereferences  (FORWARD_NULL)
  >>>     Dereferencing null pointer "xstats".
  1518                snprintf(xstats[count].name,
  sizeof(xstats[count].name),
  1519 "%s", rte_stats_strings[i].name);
  1520            xstats[count++].value = val;
  1521            }
  1522
  1523 /* per-rxq stats */

If a user calls rte_eth_xstats_get(portid, NULL, n) with n != 0,
it may result in a crash. Although the API documentation says that
n is the size of the table and xstats can be NULL if n == 0, we
can add an additional check here to make Coverity happy.

In that case, the return value is the same than when n == 0 is
passed, it returns the number of statistics.

Fixes: ce757f5c9a ("ethdev: new method to retrieve extended statistics")

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Harry van Haaren <harry.van.haaren@intel.com>
lib/librte_ether/rte_ethdev.c