| From b14de3857227cd978f515247853fd15cc2425d3e Mon Sep 17 00:00:00 2001 |
| From: Ionut Nicu <ionut.nicu@gmail.com> |
| Date: Tue, 28 Dec 2010 22:21:08 +0200 |
| Subject: USB: ti_usb: fix module removal |
| |
| From: Ionut Nicu <ionut.nicu@gmail.com> |
| |
| commit b14de3857227cd978f515247853fd15cc2425d3e upstream. |
| |
| If usb_deregister() is called after usb_serial_deregister() when |
| the device is plugged in, the following Oops occurs: |
| |
| [ 95.337377] BUG: unable to handle kernel NULL pointer dereference at 00000010 |
| [ 95.338236] IP: [<c0776b2d>] klist_put+0x12/0x62 |
| [ 95.338356] *pdpt = 000000003001a001 *pde = 0000000000000000 |
| [ 95.338356] Oops: 0000 [#1] SMP |
| [ 95.340499] last sysfs file: /sys/devices/pci0000:00/0000:00:1d.2/usb8/idVendor |
| [ 95.340499] Modules linked in: ti_usb_3410_5052(-) usbserial cpufreq_ondemand acpi_cpufreq mperf iptable_nat nf_nat iptable_mangle ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 ip6table_filter ip6_tables ipv6 uinput arc4 ecb iwlagn iwlcore mac80211 cfg80211 microcode pcspkr acer_wmi joydev wmi sky2 [last unloaded: scsi_wait_scan] |
| [ 95.341908] |
| [ 95.341908] Pid: 1532, comm: modprobe Not tainted 2.6.37-rc7+ #6 Eiger /Aspire 5930 |
| [ 95.341908] EIP: 0060:[<c0776b2d>] EFLAGS: 00010246 CPU: 0 |
| [ 95.341908] EIP is at klist_put+0x12/0x62 |
| [ 95.341908] EAX: 00000000 EBX: eedc0c84 ECX: c09c21b4 EDX: 00000001 |
| [ 95.341908] ESI: 00000000 EDI: efaa0c1c EBP: f214fe2c ESP: f214fe1c |
| [ 95.341908] DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 |
| [ 95.341908] Process modprobe (pid: 1532, ti=f214e000 task=efaaf080 task.ti=f214e000) |
| [ 95.341908] Stack: |
| [ 95.341908] f214fe24 eedc0c84 efaaf080 efaa0c1c f214fe34 c0776ba8 f214fe5c c0776c76 |
| [ 95.341908] c09c21b4 c09c21b4 eedc0c84 efaaf080 00000000 c0634398 eafe2d1c f7b515f0 |
| [ 95.341908] f214fe6c c0631b5c eafe2d50 eafe2d1c f214fe7c c0631ba2 eafe2d1c eafe2c00 |
| [ 95.341908] Call Trace: |
| [ 95.341908] [<c0776ba8>] ? klist_del+0xd/0xf |
| [ 95.341908] [<c0776c76>] ? klist_remove+0x48/0x74 |
| [ 95.341908] [<c0634398>] ? devres_release_all+0x49/0x51 |
| [ 95.341908] [<c0631b5c>] ? __device_release_driver+0x7b/0xa4 |
| [ 95.341908] [<c0631ba2>] ? device_release_driver+0x1d/0x28 |
| [ 95.341908] [<c06317c4>] ? bus_remove_device+0x92/0xa1 |
| [ 95.341908] [<c062f3d8>] ? device_del+0xf9/0x13e |
| [ 95.341908] [<f7b06146>] ? usb_serial_disconnect+0xd9/0x116 [usbserial] |
| [ 95.341908] [<c0681e3f>] ? usb_disable_interface+0x32/0x40 |
| [ 95.341908] [<c0683972>] ? usb_unbind_interface+0x48/0xfd |
| [ 95.341908] [<c0631b43>] ? __device_release_driver+0x62/0xa4 |
| [ 95.341908] [<c06320b9>] ? driver_detach+0x62/0x81 |
| [ 95.341908] [<c0631a41>] ? bus_remove_driver+0x8f/0xae |
| [ 95.341908] [<c063214c>] ? driver_unregister+0x50/0x57 |
| [ 95.341908] [<c0682f95>] ? usb_deregister+0x77/0x84 |
| [ 95.341908] [<f7b505b6>] ? ti_exit+0x26/0x28 [ti_usb_3410_5052] |
| [ 95.341908] [<c046a307>] ? sys_delete_module+0x181/0x1de |
| [ 95.341908] [<c04e2727>] ? path_put+0x1a/0x1d |
| [ 95.341908] [<c047f4c5>] ? audit_syscall_entry+0x116/0x138 |
| [ 95.341908] [<c04094df>] ? sysenter_do_call+0x12/0x28 |
| [ 95.341908] Code: 00 83 7d f0 00 74 09 85 f6 74 05 89 f0 ff 55 f0 8b 43 04 5a 5b 5e 5f 5d c3 55 89 e5 57 56 53 89 c3 83 ec 04 8b 30 83 e6 fe 89 f0 <8b> 7e 10 88 55 f0 e8 47 26 01 00 8a 55 f0 84 d2 74 17 f6 03 01 |
| [ 95.341908] EIP: [<c0776b2d>] klist_put+0x12/0x62 SS:ESP 0068:f214fe1c |
| [ 95.341908] CR2: 0000000000000010 |
| [ 95.342357] ---[ end trace 8124d00ad871ad18 ]--- |
| |
| Signed-off-by: Ionut Nicu <ionut.nicu@mindbit.ro> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/usb/serial/ti_usb_3410_5052.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/usb/serial/ti_usb_3410_5052.c |
| +++ b/drivers/usb/serial/ti_usb_3410_5052.c |
| @@ -366,9 +366,9 @@ failed_1port: |
| |
| static void __exit ti_exit(void) |
| { |
| + usb_deregister(&ti_usb_driver); |
| usb_serial_deregister(&ti_1port_device); |
| usb_serial_deregister(&ti_2port_device); |
| - usb_deregister(&ti_usb_driver); |
| } |
| |
| |