Message ID | 20220307174739.55899-1-maciej.fijalkowski@intel.com |
---|---|
State | Accepted |
Delegated to: | Anthony Nguyen |
Headers | show |
Series | [intel-net] ice: fix NULL pointer dereference in ice_update_vsi_tx_ring_stats() | expand |
From: Maciej Fijalkowski <maciej.fijalkowski@intel.com> Date: Mon, 7 Mar 2022 18:47:39 +0100 > It is possible to do NULL pointer dereference in routine that updates > Tx ring stats. Currently only stats and bytes are updated when ring > pointer is valid, but later on ring is accessed to propagate gathered Tx > stats onto VSI stats. > > Change the existing logic to move to next ring when ring is NULL. > > Fixes: e72bba21355d ("ice: split ice_ring onto Tx/Rx separate structs") > Reported-by: kernel test robot <lkp@intel.com> > Reported-by: Dan Carpenter <dan.carpenter@oracle.com> > Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com> > --- > drivers/net/ethernet/intel/ice/ice_main.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c > index 289e5c99e313..d3f8b6468b92 100644 > --- a/drivers/net/ethernet/intel/ice/ice_main.c > +++ b/drivers/net/ethernet/intel/ice/ice_main.c > @@ -6145,8 +6145,9 @@ ice_update_vsi_tx_ring_stats(struct ice_vsi *vsi, > u64 pkts = 0, bytes = 0; > > ring = READ_ONCE(rings[i]); > - if (ring) > - ice_fetch_u64_stats_per_ring(&ring->syncp, ring->stats, &pkts, &bytes); > + if (!ring) > + continue; > + ice_fetch_u64_stats_per_ring(&ring->syncp, ring->stats, &pkts, &bytes); Nice catch, thanks! Acked-by: Alexander Lobakin <alexandr.lobakin@intel.com> > vsi_stats->tx_packets += pkts; > vsi_stats->tx_bytes += bytes; > vsi->tx_restart += ring->tx_stats.restart_q; ^^^^ lol > -- > 2.33.1 Al
> -----Original Message----- > From: Intel-wired-lan <intel-wired-lan-bounces@osuosl.org> On Behalf Of > Maciej Fijalkowski > Sent: Monday, March 7, 2022 11:18 PM > To: intel-wired-lan@lists.osuosl.org > Cc: netdev@vger.kernel.org; dan.carpenter@oracle.com; kuba@kernel.org; > bpf@vger.kernel.org; davem@davemloft.net; Karlsson, Magnus > <magnus.karlsson@intel.com> > Subject: [Intel-wired-lan] [PATCH intel-net] ice: fix NULL pointer dereference > in ice_update_vsi_tx_ring_stats() > > It is possible to do NULL pointer dereference in routine that updates Tx ring > stats. Currently only stats and bytes are updated when ring pointer is valid, > but later on ring is accessed to propagate gathered Tx stats onto VSI stats. > > Change the existing logic to move to next ring when ring is NULL. > > Fixes: e72bba21355d ("ice: split ice_ring onto Tx/Rx separate structs") > Reported-by: kernel test robot <lkp@intel.com> > Reported-by: Dan Carpenter <dan.carpenter@oracle.com> > Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com> > --- > drivers/net/ethernet/intel/ice/ice_main.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > Tested-by: Gurucharan <gurucharanx.g@intel.com> (A Contingent worker at Intel)
diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c index 289e5c99e313..d3f8b6468b92 100644 --- a/drivers/net/ethernet/intel/ice/ice_main.c +++ b/drivers/net/ethernet/intel/ice/ice_main.c @@ -6145,8 +6145,9 @@ ice_update_vsi_tx_ring_stats(struct ice_vsi *vsi, u64 pkts = 0, bytes = 0; ring = READ_ONCE(rings[i]); - if (ring) - ice_fetch_u64_stats_per_ring(&ring->syncp, ring->stats, &pkts, &bytes); + if (!ring) + continue; + ice_fetch_u64_stats_per_ring(&ring->syncp, ring->stats, &pkts, &bytes); vsi_stats->tx_packets += pkts; vsi_stats->tx_bytes += bytes; vsi->tx_restart += ring->tx_stats.restart_q;
It is possible to do NULL pointer dereference in routine that updates Tx ring stats. Currently only stats and bytes are updated when ring pointer is valid, but later on ring is accessed to propagate gathered Tx stats onto VSI stats. Change the existing logic to move to next ring when ring is NULL. Fixes: e72bba21355d ("ice: split ice_ring onto Tx/Rx separate structs") Reported-by: kernel test robot <lkp@intel.com> Reported-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com> --- drivers/net/ethernet/intel/ice/ice_main.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)