summaryrefslogtreecommitdiff
path: root/drivers/usb/core/driver.c
diff options
context:
space:
mode:
authorStefan Koch <stefan.koch10@gmail.com>2015-08-08 12:32:52 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2015-08-15 02:55:54 +0300
commitde7718bd9c4d3db96991a98c2a0cb38258a04e47 (patch)
tree51ddb0b59d5895bac4d19fb6ffa9fb2fbf39cb54 /drivers/usb/core/driver.c
parent1d958bef45030acfc5578263e9de3bb07032b8da (diff)
downloadlinux-de7718bd9c4d3db96991a98c2a0cb38258a04e47.tar.xz
usb: interface authorization: Control interface probing and claiming
Driver probings and interface claims get rejected if an interface is not authorized. Signed-off-by: Stefan Koch <skoch@suse.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/core/driver.c')
-rw-r--r--drivers/usb/core/driver.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
index 6b5063e7943f..941625465e2a 100644
--- a/drivers/usb/core/driver.c
+++ b/drivers/usb/core/driver.c
@@ -296,6 +296,10 @@ static int usb_probe_interface(struct device *dev)
if (udev->authorized == 0) {
dev_err(&intf->dev, "Device is not authorized for usage\n");
return error;
+ } else if (intf->authorized == 0) {
+ dev_err(&intf->dev, "Interface %d is not authorized for usage\n",
+ intf->altsetting->desc.bInterfaceNumber);
+ return error;
}
id = usb_match_dynamic_id(intf, driver);
@@ -508,6 +512,10 @@ int usb_driver_claim_interface(struct usb_driver *driver,
if (dev->driver)
return -EBUSY;
+ /* reject claim if not iterface is not authorized */
+ if (!iface->authorized)
+ return -ENODEV;
+
udev = interface_to_usbdev(iface);
dev->driver = &driver->drvwrap.driver;