Re: [PATCH net] liquidio: Fix possible memory leak in lio_reset_queues()
From: Jacob Keller
Date: Mon Jul 27 2026 - 18:57:32 EST
On 7/27/2026 1:02 AM, Abdun Nihaal wrote:
> The memory allocated in lio_setup_glists() and setup_rx_oom_poll_fn() is
> not freed in some of the error paths in lio_reset_queues().
> Fix that by adding the corresponding free functions to the error paths.
>
> Fixes: 4b6e326b2d34 ("liquidio: Per queue oom work queue")
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Abdun Nihaal <nihaal@xxxxxxxxxxxxxx>
> ---
> Compile tested only. Issue found using static analysis.
>
Would be nice if we had a reproduction but I suspect this is tricky to
do without some kind of fault injection.
Reviewed-by: Jacob Keller <jacob.e.keller@xxxxxxxxx>
> drivers/net/ethernet/cavium/liquidio/lio_ethtool.c | 9 +++++++--
> 1 file changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/net/ethernet/cavium/liquidio/lio_ethtool.c b/drivers/net/ethernet/cavium/liquidio/lio_ethtool.c
> index c849e2c871a9..222ef0b661da 100644
> --- a/drivers/net/ethernet/cavium/liquidio/lio_ethtool.c
> +++ b/drivers/net/ethernet/cavium/liquidio/lio_ethtool.c
> @@ -1242,15 +1242,20 @@ static int lio_reset_queues(struct net_device *netdev, uint32_t num_qs)
>
> if (setup_rx_oom_poll_fn(netdev)) {
> dev_err(&oct->pci_dev->dev, "lio_setup_rx_oom_poll_fn failed\n");
> + lio_delete_glists(lio);
> return 1;
> }
>
> /* Send firmware the information about new number of queues
> * if the interface is a VF or a PF that is SRIOV enabled.
> */
> - if (oct->sriov_info.sriov_enabled || OCTEON_CN23XX_VF(oct))
> - if (lio_send_queue_count_update(netdev, num_qs))
> + if (oct->sriov_info.sriov_enabled || OCTEON_CN23XX_VF(oct)) {
> + if (lio_send_queue_count_update(netdev, num_qs)) {
> + cleanup_rx_oom_poll_fn(netdev);
> + lio_delete_glists(lio);
> return -1;
> + }
> + }
> }
>
> return 0;