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

Commit 2434d1a3 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



commit c28095bc99073ddda65e4f31f6ae0d908d4d5cd8 upstream.

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 cfbce79c
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -1424,10 +1424,13 @@ static ssize_t usb_udc_softconn_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")) {
@@ -1439,10 +1442,14 @@ static ssize_t usb_udc_softconn_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(soft_connect, S_IWUSR, NULL, usb_udc_softconn_store);