RE: [PATCH net v3 2/3] net: fealnx: disable the PCI device on remove and probe failure

From: Loktionov, Aleksandr

Date: Wed Oct 21 2026 - 06:44:11 EST




> -----Original Message-----
> From: Жамбакиев Радий Рикардинович <r.zhambakiev@xxxxxxxxxxxxxxxxx>
> Sent: Monday, October 19, 2026 3:43 PM
> To: Andrew Lunn <andrew+netdev@xxxxxxx>
> Cc: Жамбакиев Радий Рикардинович <r.zhambakiev@xxxxxxxxxxxxxxxxx>; David
> S. Miller <davem@xxxxxxxxxxxxx>; Eric Dumazet <edumazet@xxxxxxxxxx>;
> Jakub Kicinski <kuba@xxxxxxxxxx>; Paolo Abeni <pabeni@xxxxxxxxxx>;
> Michael Grzeschik <mgr@xxxxxxxxxx>; Jijie Shao <shaojijie@xxxxxxxxxx>;
> Loktionov, Aleksandr <aleksandr.loktionov@xxxxxxxxx>; Denis Benato
> <benato.denis96@xxxxxxxxx>; Uwe Kleine-König (The Capable Hub)
> <u.kleine-koenig@xxxxxxxxxxxx>; netdev@xxxxxxxxxxxxxxx; linux-
> kernel@xxxxxxxxxxxxxxx; lvc-project@xxxxxxxxxxxxxxxx;
> stable@xxxxxxxxxxxxxxx
> Subject: [PATCH net v3 2/3] net: fealnx: disable the PCI device on
> remove and probe failure
>
> From: Radiy Zhambakiev <r.zhambakiev@xxxxxxxxxxxxxxxxx>
>
> pci_enable_device() is called in probe, but the device is never disabled
> on probe failure or remove. Device remains enabled and bus mastering
> stays active.
>
> Add pci_disable_device() to the probe error unwind and to
> fealnx_remove_one(), after all other resources have been released.
>
> Found by Linux Verification Center (linuxtesting.org)
>
> Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Radiy Zhambakiev <r.zhambakiev@xxxxxxxxxxxxxxxxx>
> ---
> drivers/net/ethernet/fealnx.c | 12 ++++++++----
> 1 file changed, 8 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/ethernet/fealnx.c
> b/drivers/net/ethernet/fealnx.c index 68194c9ef332..b5e96c7037f3 100644
> --- a/drivers/net/ethernet/fealnx.c
> +++ b/drivers/net/ethernet/fealnx.c
> @@ -502,12 +502,13 @@ static int fealnx_init_one(struct pci_dev *pdev,
> if (len < MIN_REGION_SIZE) {
> dev_err(&pdev->dev,
> "region size %ld too small, aborting\n", len);
> - return -ENODEV;
> + err = -ENODEV;
> + goto err_out_disable;
> }
>
> - i = pci_request_regions(pdev, boardname);
> - if (i)
> - return i;
> + err = pci_request_regions(pdev, boardname);
> + if (err)
> + goto err_out_disable;
>
> irq = pdev->irq;
>
> @@ -671,6 +672,8 @@ static int fealnx_init_one(struct pci_dev *pdev,
> pci_iounmap(pdev, ioaddr);
> err_out_res:
> pci_release_regions(pdev);
> +err_out_disable:
> + pci_disable_device(pdev);
> return err;
> }
>
> @@ -690,6 +693,7 @@ static void fealnx_remove_one(struct pci_dev *pdev)
> pci_iounmap(pdev, np->mem);
> free_netdev(dev);
> pci_release_regions(pdev);
> + pci_disable_device(pdev);
> } else
> printk(KERN_ERR "fealnx: remove for unknown device\n"); }
> --
> 2.53.0

Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@xxxxxxxxx>