Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>


authored by

Oliver Neukum and committed by
Greg Kroah-Hartman
d718d2b1 54d2bc06

+3 -1
+3 -1
drivers/usb/misc/cytherm.c
··· 399 399 struct usb_cytherm *dev; 400 400 401 401 dev = usb_get_intfdata (interface); 402 - usb_set_intfdata (interface, NULL); 403 402 404 403 device_remove_file(&interface->dev, &dev_attr_brightness); 405 404 device_remove_file(&interface->dev, &dev_attr_temp); 406 405 device_remove_file(&interface->dev, &dev_attr_button); 407 406 device_remove_file(&interface->dev, &dev_attr_port0); 408 407 device_remove_file(&interface->dev, &dev_attr_port1); 408 + 409 + /* first remove the files, then NULL the pointer */ 410 + usb_set_intfdata (interface, NULL); 409 411 410 412 usb_put_dev(dev->udev); 411 413