lkml.org 
[lkml]   [2021]   [Mar]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 101/663] dpaa2-eth: fix memory leak in XDP_REDIRECT
    Date
    From: Ioana Ciornei <ioana.ciornei@nxp.com>

    [ Upstream commit e12be9139cca26d689fe1a9257054b76752f725b ]

    If xdp_do_redirect() fails, the calling driver should handle recycling
    or freeing of the page associated with the frame. The dpaa2-eth driver
    didn't do either of them and just incremented a counter.
    Fix this by trying to DMA map back the page and recycle it or, if the
    mapping fails, just free it.

    Fixes: d678be1dc1ec ("dpaa2-eth: add XDP_REDIRECT support")
    Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c | 14 ++++++++++++--
    1 file changed, 12 insertions(+), 2 deletions(-)

    diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
    index d880ab2a7d962..f91c67489e629 100644
    --- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
    +++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
    @@ -399,10 +399,20 @@ static u32 dpaa2_eth_run_xdp(struct dpaa2_eth_priv *priv,
    xdp.frame_sz = DPAA2_ETH_RX_BUF_RAW_SIZE;

    err = xdp_do_redirect(priv->net_dev, &xdp, xdp_prog);
    - if (unlikely(err))
    + if (unlikely(err)) {
    + addr = dma_map_page(priv->net_dev->dev.parent,
    + virt_to_page(vaddr), 0,
    + priv->rx_buf_size, DMA_BIDIRECTIONAL);
    + if (unlikely(dma_mapping_error(priv->net_dev->dev.parent, addr))) {
    + free_pages((unsigned long)vaddr, 0);
    + } else {
    + ch->buf_count++;
    + dpaa2_eth_xdp_release_buf(priv, ch, addr);
    + }
    ch->stats.xdp_drop++;
    - else
    + } else {
    ch->stats.xdp_redirect++;
    + }
    break;
    }

    --
    2.27.0


    \
     
     \ /
      Last update: 2021-03-02 01:11    [W:2.975 / U:0.952 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site