projects
/
platform
/
kernel
/
linux-starfive.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
635032c
)
Staging: asus_oled: fix NULL-ptr crash on unloading
author
Pekka Paalanen
<pq@iki.fi>
Sun, 22 Jan 2012 14:33:47 +0000
(16:33 +0200)
committer
Greg Kroah-Hartman
<gregkh@linuxfoundation.org>
Wed, 8 Feb 2012 22:14:13 +0000
(14:14 -0800)
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>
drivers/staging/asus_oled/asus_oled.c
patch
|
blob
|
history
diff --git
a/drivers/staging/asus_oled/asus_oled.c
b/drivers/staging/asus_oled/asus_oled.c
index 2fdc5db68e1a09afebef37c3e6fea52f3df70ef2..1df9586f273088744c45b51254f5de273b32c389 100644
(file)
--- a/
drivers/staging/asus_oled/asus_oled.c
+++ b/
drivers/staging/asus_oled/asus_oled.c
@@
-811,10
+811,9
@@
error:
static void __exit asus_oled_exit(void)
{
+ usb_deregister(&oled_driver);
class_remove_file(oled_class, &class_attr_version.attr);
class_destroy(oled_class);
-
- usb_deregister(&oled_driver);
}
module_init(asus_oled_init);