[PATCH] net: lan969x: fix page pool leak when RX DMA allocation fails

Daniel Machon daniel.machon at microchip.com
Tue Nov 3 04:26:00 PST 2026


Hi Wentao,

> lan969x_fdma_rx_alloc() creates the RX page pool and then allocates the
> FDMA coherent memory. If fdma_alloc_coherent() fails, the function
> returns without destroying the page pool.
> 
> The failure propagates out of lan969x_fdma_init(), and
> sparx5_frame_io_init() then marks the FDMA IRQ as unavailable, so
> lan969x_fdma_deinit() is never called on teardown and the page pool is
> never released. Destroy it before returning the error.
> 
> Fixes: d84ad2c0d80c ("net: lan969x: add FDMA implementation")
> Cc: stable at vger.kernel.org
> Assisted-by: DeepSeek-V4.1-Flash and OpenAI Codex
> Signed-off-by: Wentao Liang <vulab at iscas.ac.cn>
> ---
>  drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c b/drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
> index 053d125eda65..bc293ba1707d 100644
> --- a/drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
> +++ b/drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
> @@ -169,8 +169,10 @@ static int lan969x_fdma_rx_alloc(struct sparx5 *sparx5)
>                 return PTR_ERR(rx->page_pool);
> 
>         err = fdma_alloc_coherent(sparx5->dev, fdma);
> -       if (err)
> +       if (err) {
> +               page_pool_destroy(rx->page_pool);
>                 return err;
> +       }
> 
>         fdma_dcbs_init(fdma,
>                        FDMA_DCB_INFO_DATAL(fdma->db_size),
> --
> 2.34.1
>

Thanks. The leak is real, but this init path has another problem
of the same kind:

  - If lan969x_fdma_tx_alloc() fails, lan969x_fdma_init() only frees
    the RX coherent memory. The page pool and the RX pages that
    fdma_dcbs_init() already took from it are leaked, for the same
    reason you describe.

All of this has been there since the FDMA implementation was added, and only
triggers on allocation failures at probe. I have a net-next series for
MTU-dependent RX buffer sizes coming up (very soon, within days) that reworks
this exact code and its error unwind, so I'll fix this (and other related
issues) there.

I'd suggest dropping this one.

pw-bot: rejected

/Daniel




More information about the linux-arm-kernel mailing list