Staging: asus_oled: fix NULL-ptr crash on unloading
Asus_oled triggers the following bug on module unloading: usbcore: deregistering interface driver asus-oled BUG: unable to handle kernel NULL pointer dereference at 0000000000000038 IP: [<ffffffff8111292b>] sysfs_delete_link+0x30/0x66 Call Trace: [<ffffffff81225373>] device_remove_class_symlinks+0x6b/0x70 [<ffffffff812256a8>] device_del+0x9f/0x1ab [<ffffffff812257c5>] device_unregister+0x11/0x1e [<ffffffffa000cb82>] asus_oled_disconnect+0x4f/0x9e [asus_oled] [<ffffffff81277430>] usb_unbind_interface+0x54/0x103 [<ffffffff812276c4>] __device_release_driver+0xa2/0xeb [<ffffffff81227794>] driver_detach+0x87/0xad [<ffffffff812269e9>] bus_remove_driver+0x91/0xc1 [<ffffffff81227fb4>] driver_unregister+0x66/0x6e [<ffffffff812771ed>] usb_deregister+0xbb/0xc4 [<ffffffffa000ce87>] asus_oled_exit+0x2f/0x31 [asus_oled] [<ffffffff81068365>] sys_delete_module+0x1b8/0x21b [<ffffffff810ae3de>] ? do_munmap+0x2ef/0x313 [<ffffffff813699bb>] system_call_fastpath+0x16/0x1b This is due to an incorrect destruction sequence in asus_oled_exit(). Fix the order, fixes the bug. Tested on an Asus G50V laptop only. Cc: Jakub Schmidtke <sjakub@gmail.com> Signed-off-by: Pekka Paalanen <pq@iki.fi> Cc: stable <stable@vger.kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
635032cb39
commit
3589e74595
|
@ -811,10 +811,9 @@ error:
|
||||||
|
|
||||||
static void __exit asus_oled_exit(void)
|
static void __exit asus_oled_exit(void)
|
||||||
{
|
{
|
||||||
|
usb_deregister(&oled_driver);
|
||||||
class_remove_file(oled_class, &class_attr_version.attr);
|
class_remove_file(oled_class, &class_attr_version.attr);
|
||||||
class_destroy(oled_class);
|
class_destroy(oled_class);
|
||||||
|
|
||||||
usb_deregister(&oled_driver);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module_init(asus_oled_init);
|
module_init(asus_oled_init);
|
||||||
|
|
Loading…
Reference in New Issue