HID: lg4ff: Remove sysfs iface before deallocating memory
This patch fixes a possible race condition caused by the sysfs interface being removed after the memory used by the interface was already kfree'd. Signed-off-by: Michal Malý <madcatsxter@gmail.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
This commit is contained in:
Родитель
8577dbf9d6
Коммит
6a2e176b2d
|
@ -1,8 +1,6 @@
|
|||
#ifndef __HID_LG_H
|
||||
#define __HID_LG_H
|
||||
|
||||
#include <linux/spinlock.h>
|
||||
|
||||
struct lg_drv_data {
|
||||
unsigned long quirks;
|
||||
void *device_props; /* Device specific properties */
|
||||
|
|
|
@ -466,6 +466,9 @@ int lg4ff_deinit(struct hid_device *hid)
|
|||
bool found = 0;
|
||||
struct lg4ff_device_entry *entry;
|
||||
struct list_head *h, *g;
|
||||
|
||||
device_remove_file(&hid->dev, &dev_attr_range);
|
||||
|
||||
list_for_each_safe(h, g, &device_list.list) {
|
||||
entry = list_entry(h, struct lg4ff_device_entry, list);
|
||||
if (strcmp(entry->device_id, (&hid->dev)->kobj.name) == 0) {
|
||||
|
@ -478,11 +481,10 @@ int lg4ff_deinit(struct hid_device *hid)
|
|||
}
|
||||
|
||||
if (!found) {
|
||||
dbg_hid("Device entry not found!\n");
|
||||
hid_err(hid, "Device entry not found!\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
device_remove_file(&hid->dev, &dev_attr_range);
|
||||
dbg_hid("Device successfully unregistered\n");
|
||||
return 0;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче