[dpdk-dev] [PATCH] xstats: fix behavior when a null array is provided

2016-04-06 Thread Thomas Monjalon
2016-04-05 11:06, Van Haaren, Harry:
> > From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Olivier Matz
> > Subject: [dpdk-dev] [PATCH] xstats: fix behavior when a null array is 
> > provided
> > 
> > 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(_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);
> >   1520xstats[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 
> 
> I'm unsure on how verbose commit messages are ideal,
> but there's certainly enough description here :)
> 
> Acked-by: Harry van Haaren 

Applied, thanks


[dpdk-dev] [PATCH] xstats: fix behavior when a null array is provided

2016-04-05 Thread Van Haaren, Harry
> From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Olivier Matz
> Subject: [dpdk-dev] [PATCH] xstats: fix behavior when a null array is provided
> 
> 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 */
>   1514for (i = 0; i < RTE_NB_STATS; i++) {
>   1515stats_ptr = RTE_PTR_ADD(_stats,
>   1516
>   rte_stats_strings[i].offset);
>   1517val = *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 

I'm unsure on how verbose commit messages are ideal,
but there's certainly enough description here :)

Acked-by: Harry van Haaren 


[dpdk-dev] [PATCH] xstats: fix behavior when a null array is provided

2016-04-04 Thread Olivier Matz
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(_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);
  1520xstats[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 
---
 lib/librte_ether/rte_ethdev.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
index 76a30fd..60d2573 100644
--- a/lib/librte_ether/rte_ethdev.c
+++ b/lib/librte_ether/rte_ethdev.c
@@ -1503,7 +1503,7 @@ rte_eth_xstats_get(uint8_t port_id, struct rte_eth_xstats 
*xstats,
return xcount;
}

-   if (n < count + xcount)
+   if (n < count + xcount || xstats == NULL)
return count + xcount;

/* now fill the xstats structure */
-- 
2.1.4