diff options
Diffstat (limited to 'queue-6.6/firewire-ohci-prevent-leak-of-left-over-irq-on-unbind.patch')
-rw-r--r-- | queue-6.6/firewire-ohci-prevent-leak-of-left-over-irq-on-unbind.patch | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/queue-6.6/firewire-ohci-prevent-leak-of-left-over-irq-on-unbind.patch b/queue-6.6/firewire-ohci-prevent-leak-of-left-over-irq-on-unbind.patch new file mode 100644 index 0000000000..a562a8f9cb --- /dev/null +++ b/queue-6.6/firewire-ohci-prevent-leak-of-left-over-irq-on-unbind.patch @@ -0,0 +1,72 @@ +From 575801663c7dc38f826212b39e3b91a4a8661c33 Mon Sep 17 00:00:00 2001 +From: Edmund Raile <edmund.raile@proton.me> +Date: Thu, 29 Feb 2024 14:47:59 +0000 +Subject: firewire: ohci: prevent leak of left-over IRQ on unbind + +From: Edmund Raile <edmund.raile@proton.me> + +commit 575801663c7dc38f826212b39e3b91a4a8661c33 upstream. + +Commit 5a95f1ded28691e6 ("firewire: ohci: use devres for requested IRQ") +also removed the call to free_irq() in pci_remove(), leading to a +leftover irq of devm_request_irq() at pci_disable_msi() in pci_remove() +when unbinding the driver from the device + +remove_proc_entry: removing non-empty directory 'irq/136', leaking at +least 'firewire_ohci' +Call Trace: + ? remove_proc_entry+0x19c/0x1c0 + ? __warn+0x81/0x130 + ? remove_proc_entry+0x19c/0x1c0 + ? report_bug+0x171/0x1a0 + ? console_unlock+0x78/0x120 + ? handle_bug+0x3c/0x80 + ? exc_invalid_op+0x17/0x70 + ? asm_exc_invalid_op+0x1a/0x20 + ? remove_proc_entry+0x19c/0x1c0 + unregister_irq_proc+0xf4/0x120 + free_desc+0x3d/0xe0 + ? kfree+0x29f/0x2f0 + irq_free_descs+0x47/0x70 + msi_domain_free_locked.part.0+0x19d/0x1d0 + msi_domain_free_irqs_all_locked+0x81/0xc0 + pci_free_msi_irqs+0x12/0x40 + pci_disable_msi+0x4c/0x60 + pci_remove+0x9d/0xc0 [firewire_ohci + 01b483699bebf9cb07a3d69df0aa2bee71db1b26] + pci_device_remove+0x37/0xa0 + device_release_driver_internal+0x19f/0x200 + unbind_store+0xa1/0xb0 + +remove irq with devm_free_irq() before pci_disable_msi() +also remove it in fail_msi: of pci_probe() as this would lead to +an identical leak + +Cc: stable@vger.kernel.org +Fixes: 5a95f1ded28691e6 ("firewire: ohci: use devres for requested IRQ") +Signed-off-by: Edmund Raile <edmund.raile@proton.me> +Link: https://lore.kernel.org/r/20240229144723.13047-2-edmund.raile@proton.me +Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp> +Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> +--- + drivers/firewire/ohci.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/drivers/firewire/ohci.c ++++ b/drivers/firewire/ohci.c +@@ -3773,6 +3773,7 @@ static int pci_probe(struct pci_dev *dev + return 0; + + fail_msi: ++ devm_free_irq(&dev->dev, dev->irq, ohci); + pci_disable_msi(dev); + + return err; +@@ -3800,6 +3801,7 @@ static void pci_remove(struct pci_dev *d + + software_reset(ohci); + ++ devm_free_irq(&dev->dev, dev->irq, ohci); + pci_disable_msi(dev); + + dev_notice(&dev->dev, "removing fw-ohci device\n"); |