Message ID | 20220625003302.3501801-2-jesse.brandeburg@intel.com |
---|---|
State | Accepted |
Delegated to: | Anthony Nguyen |
Headers | show |
Series | fix bug and remove code | expand |
> -----Original Message----- > From: Intel-wired-lan <intel-wired-lan-bounces@osuosl.org> On Behalf Of > Jesse Brandeburg > Sent: Saturday, June 25, 2022 2:33 AM > To: intel-wired-lan@lists.osuosl.org > Cc: Patynowski, PrzemyslawX <przemyslawx.patynowski@intel.com>; > Brandeburg, Jesse <jesse.brandeburg@intel.com> > Subject: [Intel-wired-lan] [PATCH net v1 1/2] iavf: Fix handling of dummy > receive descriptors > > From: Przemyslaw Patynowski <przemyslawx.patynowski@intel.com> > > Fix memory leak caused by not handling dummy receive descriptor properly. > iavf_get_rx_buffer now sets the rx_buffer return value for dummy receive > descriptors. Without this patch, when the hardware writes a dummy > descriptor, iavf would not free the page allocated for the previous receive > buffer. This is an unlikely event but can still happen. > > [Jesse: massaged commit message] > > Fixes: efa14c398582 ("iavf: allow null RX descriptors") > Signed-off-by: Przemyslaw Patynowski > <przemyslawx.patynowski@intel.com> > Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com> > --- > drivers/net/ethernet/intel/iavf/iavf_txrx.c | 5 ++--- > 1 file changed, 2 insertions(+), 3 deletions(-) > > diff --git a/drivers/net/ethernet/intel/iavf/iavf_txrx.c > b/drivers/net/ethernet/intel/iavf/iavf_txrx.c > index 7bf8c25dc824..06d18797d25a 100644 > --- a/drivers/net/ethernet/intel/iavf/iavf_txrx.c > +++ b/drivers/net/ethernet/intel/iavf/iavf_txrx.c > @@ -1285,11 +1285,10 @@ static struct iavf_rx_buffer Tested-by: Konrad Jankowski <konrad0.jankowski@intel.com>
diff --git a/drivers/net/ethernet/intel/iavf/iavf_txrx.c b/drivers/net/ethernet/intel/iavf/iavf_txrx.c index 7bf8c25dc824..06d18797d25a 100644 --- a/drivers/net/ethernet/intel/iavf/iavf_txrx.c +++ b/drivers/net/ethernet/intel/iavf/iavf_txrx.c @@ -1285,11 +1285,10 @@ static struct iavf_rx_buffer *iavf_get_rx_buffer(struct iavf_ring *rx_ring, { struct iavf_rx_buffer *rx_buffer; - if (!size) - return NULL; - rx_buffer = &rx_ring->rx_bi[rx_ring->next_to_clean]; prefetchw(rx_buffer->page); + if (!size) + return rx_buffer; /* we are reusing so sync this buffer for CPU use */ dma_sync_single_range_for_cpu(rx_ring->dev,