[PATCH] serial: icom: Disable the PCI device on final adapter release

Myeonghun Pak posted 1 patch 1 week, 3 days ago
drivers/tty/serial/icom.c | 1 +
1 file changed, 1 insertion(+)
[PATCH] serial: icom: Disable the PCI device on final adapter release
Posted by Myeonghun Pak 1 week, 3 days ago
icom_probe() enables the PCI device, but the final adapter release
never disables it. Balance the enable after releasing the IRQ, mapping
and PCI regions, while the adapter's PCI device pointer is still valid.

The imbalance is already present in the initial Git import.

This issue was identified during our ongoing static-analysis research
while reviewing kernel code.

Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Cc: stable@vger.kernel.org
Assisted-by: LLM
Co-developed-by: Ijae Kim <ae878000@gmail.com>
Signed-off-by: Ijae Kim <ae878000@gmail.com>
Signed-off-by: Myeonghun Pak <mhun512@gmail.com>
---
 drivers/tty/serial/icom.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/tty/serial/icom.c b/drivers/tty/serial/icom.c
--- a/drivers/tty/serial/icom.c
+++ b/drivers/tty/serial/icom.c
@@ -1691,6 +1691,7 @@ static void icom_kref_release(struct kref *kref)
 	free_irq(icom_adapter->pci_dev->irq, (void *) icom_adapter);
 	iounmap(icom_adapter->base_addr);
 	pci_release_regions(icom_adapter->pci_dev);
+	pci_disable_device(icom_adapter->pci_dev);
 	icom_free_adapter(icom_adapter);
 }
Re: [PATCH] serial: icom: Disable the PCI device on final adapter release
Posted by Greg Kroah-Hartman 1 day, 21 hours ago
On Mon, Sep 14, 2026 at 08:59:59PM -0400, Myeonghun Pak wrote:
> icom_probe() enables the PCI device, but the final adapter release
> never disables it. Balance the enable after releasing the IRQ, mapping
> and PCI regions, while the adapter's PCI device pointer is still valid.
> 
> The imbalance is already present in the initial Git import.
> 
> This issue was identified during our ongoing static-analysis research
> while reviewing kernel code.
> 
> Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
> Cc: stable@vger.kernel.org
> Assisted-by: LLM
> Co-developed-by: Ijae Kim <ae878000@gmail.com>
> Signed-off-by: Ijae Kim <ae878000@gmail.com>
> Signed-off-by: Myeonghun Pak <mhun512@gmail.com>
> ---
>  drivers/tty/serial/icom.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/tty/serial/icom.c b/drivers/tty/serial/icom.c
> --- a/drivers/tty/serial/icom.c
> +++ b/drivers/tty/serial/icom.c
> @@ -1691,6 +1691,7 @@ static void icom_kref_release(struct kref *kref)
>  	free_irq(icom_adapter->pci_dev->irq, (void *) icom_adapter);
>  	iounmap(icom_adapter->base_addr);
>  	pci_release_regions(icom_adapter->pci_dev);
> +	pci_disable_device(icom_adapter->pci_dev);

Are you sure this is correct?  Lots of time disabling the device is not
what you want to do as it can cause hardware problems.

Have you tested this on the hardware?  If not, I can't take it for
obvious reasons.

thanks,

greg k-h