]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
RDMA/nes: Free IRQ before killing tasklet
authorRoland Dreier <rolandd@cisco.com>
Fri, 18 Apr 2008 16:25:17 +0000 (16:25 +0000)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 1 May 2008 21:44:34 +0000 (14:44 -0700)
commit: 4cd1e5eb3cbe6e0cc934959770b4c60eac6ecf66

Move the free_irq() call in nes_remove() to before the tasklet_kill();
otherwise there is a window after tasklet_kill() where a new interrupt
can be handled and reschedule the tasklet, leading to a use-after-free
crash.

Signed-off-by: Roland Dreier <rolandd@cisco.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/infiniband/hw/nes/nes.c

index b2112f5a422fbd8bcf6d993f707a0b8b604ad5e1..a3b23749483c9dcdd7c7ffbae8dbbc3241eea644 100644 (file)
@@ -751,13 +751,13 @@ static void __devexit nes_remove(struct pci_dev *pcidev)
 
        list_del(&nesdev->list);
        nes_destroy_cqp(nesdev);
+
+       free_irq(pcidev->irq, nesdev);
        tasklet_kill(&nesdev->dpc_tasklet);
 
        /* Deallocate the Adapter Structure */
        nes_destroy_adapter(nesdev->nesadapter);
 
-       free_irq(pcidev->irq, nesdev);
-
        if (nesdev->msi_enabled) {
                pci_disable_msi(pcidev);
        }