USB: fix read vs. disconnect race in cytherm driver
the disconnect method of this driver set intfdata to NULL before removing attribute files. The attributes' read methods will happily follow the NULL pointer. Here's the correct ordering. Signed-off-by : Oliver Neukum <oneukum@suse.de> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Этот коммит содержится в:

коммит произвёл
Greg Kroah-Hartman

родитель
54d2bc068f
Коммит
d718d2b178
@@ -399,7 +399,6 @@ static void cytherm_disconnect(struct usb_interface *interface)
|
||||
struct usb_cytherm *dev;
|
||||
|
||||
dev = usb_get_intfdata (interface);
|
||||
usb_set_intfdata (interface, NULL);
|
||||
|
||||
device_remove_file(&interface->dev, &dev_attr_brightness);
|
||||
device_remove_file(&interface->dev, &dev_attr_temp);
|
||||
@@ -407,6 +406,9 @@ static void cytherm_disconnect(struct usb_interface *interface)
|
||||
device_remove_file(&interface->dev, &dev_attr_port0);
|
||||
device_remove_file(&interface->dev, &dev_attr_port1);
|
||||
|
||||
/* first remove the files, then NULL the pointer */
|
||||
usb_set_intfdata (interface, NULL);
|
||||
|
||||
usb_put_dev(dev->udev);
|
||||
|
||||
kfree(dev);
|
||||
|
Ссылка в новой задаче
Block a user