aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOliver Neukum <oneukum@suse.de>2007-03-30 04:52:16 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2007-04-27 16:28:38 -0400
commit949ce47168a34618c3e24cb7dd4ab52233a4653c (patch)
tree5739777b78057b04ba77e85bada13a693746b616
parent4edf2c83637b9e9db771cc5629de036fe4488564 (diff)
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>
-rw-r--r--drivers/usb/misc/cypress_cy7c63.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/usb/misc/cypress_cy7c63.c b/drivers/usb/misc/cypress_cy7c63.c
index b63b5f34b2aa..d721380b242d 100644
--- a/drivers/usb/misc/cypress_cy7c63.c
+++ b/drivers/usb/misc/cypress_cy7c63.c
@@ -246,11 +246,13 @@ static void cypress_disconnect(struct usb_interface *interface)
246 struct cypress *dev; 246 struct cypress *dev;
247 247
248 dev = usb_get_intfdata(interface); 248 dev = usb_get_intfdata(interface);
249 usb_set_intfdata(interface, NULL);
250 249
251 /* remove device attribute files */ 250 /* remove device attribute files */
252 device_remove_file(&interface->dev, &dev_attr_port0); 251 device_remove_file(&interface->dev, &dev_attr_port0);
253 device_remove_file(&interface->dev, &dev_attr_port1); 252 device_remove_file(&interface->dev, &dev_attr_port1);
253 /* the intfdata can be set to NULL only after the
254 * device files have been removed */
255 usb_set_intfdata(interface, NULL);
254 256
255 usb_put_dev(dev->udev); 257 usb_put_dev(dev->udev);
256 258