diff options
Diffstat (limited to 'drivers/usb/core')
| -rw-r--r-- | drivers/usb/core/driver.c | 13 | ||||
| -rw-r--r-- | drivers/usb/core/message.c | 4 | 
2 files changed, 3 insertions, 14 deletions
diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c index 8987cec9549d..ebcadaad89d1 100644 --- a/drivers/usb/core/driver.c +++ b/drivers/usb/core/driver.c @@ -473,11 +473,6 @@ static int usb_unbind_interface(struct device *dev)  		pm_runtime_disable(dev);  	pm_runtime_set_suspended(dev); -	/* Undo any residual pm_autopm_get_interface_* calls */ -	for (r = atomic_read(&intf->pm_usage_cnt); r > 0; --r) -		usb_autopm_put_interface_no_suspend(intf); -	atomic_set(&intf->pm_usage_cnt, 0); -  	if (!error)  		usb_autosuspend_device(udev); @@ -1633,7 +1628,6 @@ void usb_autopm_put_interface(struct usb_interface *intf)  	int			status;  	usb_mark_last_busy(udev); -	atomic_dec(&intf->pm_usage_cnt);  	status = pm_runtime_put_sync(&intf->dev);  	dev_vdbg(&intf->dev, "%s: cnt %d -> %d\n",  			__func__, atomic_read(&intf->dev.power.usage_count), @@ -1662,7 +1656,6 @@ void usb_autopm_put_interface_async(struct usb_interface *intf)  	int			status;  	usb_mark_last_busy(udev); -	atomic_dec(&intf->pm_usage_cnt);  	status = pm_runtime_put(&intf->dev);  	dev_vdbg(&intf->dev, "%s: cnt %d -> %d\n",  			__func__, atomic_read(&intf->dev.power.usage_count), @@ -1684,7 +1677,6 @@ void usb_autopm_put_interface_no_suspend(struct usb_interface *intf)  	struct usb_device	*udev = interface_to_usbdev(intf);  	usb_mark_last_busy(udev); -	atomic_dec(&intf->pm_usage_cnt);  	pm_runtime_put_noidle(&intf->dev);  }  EXPORT_SYMBOL_GPL(usb_autopm_put_interface_no_suspend); @@ -1715,8 +1707,6 @@ int usb_autopm_get_interface(struct usb_interface *intf)  	status = pm_runtime_get_sync(&intf->dev);  	if (status < 0)  		pm_runtime_put_sync(&intf->dev); -	else -		atomic_inc(&intf->pm_usage_cnt);  	dev_vdbg(&intf->dev, "%s: cnt %d -> %d\n",  			__func__, atomic_read(&intf->dev.power.usage_count),  			status); @@ -1750,8 +1740,6 @@ int usb_autopm_get_interface_async(struct usb_interface *intf)  	status = pm_runtime_get(&intf->dev);  	if (status < 0 && status != -EINPROGRESS)  		pm_runtime_put_noidle(&intf->dev); -	else -		atomic_inc(&intf->pm_usage_cnt);  	dev_vdbg(&intf->dev, "%s: cnt %d -> %d\n",  			__func__, atomic_read(&intf->dev.power.usage_count),  			status); @@ -1775,7 +1763,6 @@ void usb_autopm_get_interface_no_resume(struct usb_interface *intf)  	struct usb_device	*udev = interface_to_usbdev(intf);  	usb_mark_last_busy(udev); -	atomic_inc(&intf->pm_usage_cnt);  	pm_runtime_get_noresume(&intf->dev);  }  EXPORT_SYMBOL_GPL(usb_autopm_get_interface_no_resume); diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c index 82239f27c4cc..e844bb7b5676 100644 --- a/drivers/usb/core/message.c +++ b/drivers/usb/core/message.c @@ -820,9 +820,11 @@ int usb_string(struct usb_device *dev, int index, char *buf, size_t size)  	if (dev->state == USB_STATE_SUSPENDED)  		return -EHOSTUNREACH; -	if (size <= 0 || !buf || !index) +	if (size <= 0 || !buf)  		return -EINVAL;  	buf[0] = 0; +	if (index <= 0 || index >= 256) +		return -EINVAL;  	tbuf = kmalloc(256, GFP_NOIO);  	if (!tbuf)  		return -ENOMEM;  |