Commit c28095bc authored by Thinh Nguyen's avatar Thinh Nguyen Committed by Greg Kroah-Hartman
Browse files

usb: udc: core: Use lock when write to soft_connect



Use lock to guard against concurrent access for soft-connect/disconnect
operations when writing to soft_connect sysfs.

Fixes: 2ccea03a ("usb: gadget: introduce UDC Class")
Cc: stable@vger.kernel.org
Acked-by: default avatarFelipe Balbi <balbi@kernel.org>
Signed-off-by: default avatarThinh Nguyen <Thinh.Nguyen@synopsys.com>
Link: https://lore.kernel.org/r/338ea01fbd69b1985ef58f0f59af02c805ddf189.1610611437.git.Thinh.Nguyen@synopsys.com


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 6e6aa61d
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -1529,10 +1529,13 @@ static ssize_t soft_connect_store(struct device *dev,
		struct device_attribute *attr, const char *buf, size_t n)
{
	struct usb_udc		*udc = container_of(dev, struct usb_udc, dev);
	ssize_t			ret;

	mutex_lock(&udc_lock);
	if (!udc->driver) {
		dev_err(dev, "soft-connect without a gadget driver\n");
		return -EOPNOTSUPP;
		ret = -EOPNOTSUPP;
		goto out;
	}

	if (sysfs_streq(buf, "connect")) {
@@ -1543,10 +1546,14 @@ static ssize_t soft_connect_store(struct device *dev,
		usb_gadget_udc_stop(udc);
	} else {
		dev_err(dev, "unsupported command '%s'\n", buf);
		return -EINVAL;
		ret = -EINVAL;
		goto out;
	}

	return n;
	ret = n;
out:
	mutex_unlock(&udc_lock);
	return ret;
}
static DEVICE_ATTR_WO(soft_connect);