提交 3a22ebe9 编写于 作者: S Stefan Achatz 提交者: Jiri Kosina

HID: hidraw: fix hidraw_disconnect()

hidraw_disconnect() first sets an entry in hidraw_table to NULL
and calls device_destroy() afterwards. The thereby called
hidraw_release() tries to read this already cleared value resulting
in never removing any device from the list.
This got fixed by changing the order of events.
Signed-off-by: NStefan Achatz <erazor_de@users.sourceforge.net>
Signed-off-by: NJiri Kosina <jkosina@suse.cz>
上级 581548db
...@@ -428,12 +428,12 @@ void hidraw_disconnect(struct hid_device *hid) ...@@ -428,12 +428,12 @@ void hidraw_disconnect(struct hid_device *hid)
hidraw->exist = 0; hidraw->exist = 0;
device_destroy(hidraw_class, MKDEV(hidraw_major, hidraw->minor));
mutex_lock(&minors_lock); mutex_lock(&minors_lock);
hidraw_table[hidraw->minor] = NULL; hidraw_table[hidraw->minor] = NULL;
mutex_unlock(&minors_lock); mutex_unlock(&minors_lock);
device_destroy(hidraw_class, MKDEV(hidraw_major, hidraw->minor));
if (hidraw->open) { if (hidraw->open) {
hid_hw_close(hid); hid_hw_close(hid);
wake_up_interruptible(&hidraw->wait); wake_up_interruptible(&hidraw->wait);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册