USB: cypress_cy7c63: race disconnect/sysfs read-write leading to following NULL pointer
this driver sets intfdata to NULL while it still can be read and happily followed. Signed-off-by: Oliver Neukum <oneukum@suse.de> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
4edf2c8363
commit
949ce47168
@@ -246,11 +246,13 @@ static void cypress_disconnect(struct usb_interface *interface)
|
|||||||
struct cypress *dev;
|
struct cypress *dev;
|
||||||
|
|
||||||
dev = usb_get_intfdata(interface);
|
dev = usb_get_intfdata(interface);
|
||||||
usb_set_intfdata(interface, NULL);
|
|
||||||
|
|
||||||
/* remove device attribute files */
|
/* remove device attribute files */
|
||||||
device_remove_file(&interface->dev, &dev_attr_port0);
|
device_remove_file(&interface->dev, &dev_attr_port0);
|
||||||
device_remove_file(&interface->dev, &dev_attr_port1);
|
device_remove_file(&interface->dev, &dev_attr_port1);
|
||||||
|
/* the intfdata can be set to NULL only after the
|
||||||
|
* device files have been removed */
|
||||||
|
usb_set_intfdata(interface, NULL);
|
||||||
|
|
||||||
usb_put_dev(dev->udev);
|
usb_put_dev(dev->udev);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user