[lkml]   [2009]   [Jun]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    Subject[patch 25/87] icom: fix rmmod crash
    2.6.29-stable review patch.  If anyone has any objections, please let us know.


    From: Breno Leitao <>

    commit 95caa0a9bdaf93607bd0cc8932f53112496f2f22 upstream.

    Actually the icom driver is crashing when is being removed because
    the driver is kfreeing the adapter structure before calling
    pci_release_regions(), which result in the following error:

    Unable to handle kernel paging request for data at address 0x6b6b6b6b6b6b6d33
    Faulting instruction address: 0xc000000000246b80
    Oops: Kernel access of bad area, sig: 11 [#1]
    [c000000012d436a0] [c0000000001002d0] .kfree+0x120/0x34c (unreliable)
    [c000000012d43730] [c000000000246d60] .pci_release_selected_regions+0x3c/0x68
    [c000000012d437c0] [d000000002d54700] .icom_kref_release+0xf4/0x118 [icom]
    [c000000012d43850] [c000000000232e50] .kref_put+0x74/0x94
    [c000000012d438d0] [d000000002d56c58] .icom_remove+0x40/0xa4 [icom]
    [c000000012d43960] [c000000000249e48] .pci_device_remove+0x50/0x90
    [c000000012d439e0] [c0000000002d68d8] .__device_release_driver+0x94/0xd4
    [c000000012d43a70] [c0000000002d7104] .driver_detach+0xf8/0x12c
    [c000000012d43b00] [c0000000002d549c] .bus_remove_driver+0xbc/0x11c
    [c000000012d43b90] [c0000000002d71dc] .driver_unregister+0x60/0x80
    [c000000012d43c20] [c00000000024a07c] .pci_unregister_driver+0x44/0xe8
    [c000000012d43cb0] [d000000002d56bf4] .icom_exit+0x1c/0x40 [icom]
    [c000000012d43d30] [c000000000095fa8] .SyS_delete_module+0x214/0x2a8
    [c000000012d43e30] [c00000000000852c] syscall_exit+0x0/0x40

    Signed-off-by: Breno Leitao <>
    Cc: Alan Cox <>
    Signed-off-by: Linus Torvalds <>
    Signed-off-by: Greg Kroah-Hartman <>

    drivers/serial/icom.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    --- a/drivers/serial/icom.c
    +++ b/drivers/serial/icom.c
    @@ -1482,8 +1482,8 @@ static void icom_remove_adapter(struct i

    free_irq(icom_adapter->pci_dev->irq, (void *) icom_adapter);
    - icom_free_adapter(icom_adapter);
    + icom_free_adapter(icom_adapter);

    static void icom_kref_release(struct kref *kref)

     \ /
      Last update: 2009-06-09 12:27    [W:0.021 / U:3.324 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site