Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 74da5d68 authored by Alan Stern's avatar Alan Stern Committed by Greg Kroah-Hartman
Browse files

USB: cdc-acm: fix sysfs attribute registration bug



This patch (as950) fixes a bug in the cdc-acm driver.  It doesn't keep
track of which interface (control or data) the sysfs attributes get
registered for, and as a result, during disconnect it will sometimes
attempt to remove the attributes from the wrong interface.  The
left-over attributes can cause a crash later on, particularly if the driver
module has been unloaded.

Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
Acked-by: default avatarOliver Neukum <oneukum@suse.de>
Cc: stable <stable@kernel.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 8c273033
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -922,6 +922,10 @@ skip_normal_probe:
		}
	}

	/* Accept probe requests only for the control interface */
	if (intf != control_interface)
		return -ENODEV;
	
	if (usb_interface_claimed(data_interface)) { /* valid in this context */
		dev_dbg(&intf->dev,"The data interface isn't available");
		return -EBUSY;
@@ -1109,10 +1113,12 @@ static void acm_disconnect(struct usb_interface *intf)
		return;
	}
	if (acm->country_codes){
		device_remove_file(&intf->dev, &dev_attr_wCountryCodes);
		device_remove_file(&intf->dev, &dev_attr_iCountryCodeRelDate);
		device_remove_file(&acm->control->dev,
				&dev_attr_wCountryCodes);
		device_remove_file(&acm->control->dev,
				&dev_attr_iCountryCodeRelDate);
	}
	device_remove_file(&intf->dev, &dev_attr_bmCapabilities);
	device_remove_file(&acm->control->dev, &dev_attr_bmCapabilities);
	acm->dev = NULL;
	usb_set_intfdata(acm->control, NULL);
	usb_set_intfdata(acm->data, NULL);