authorization and claimed port

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



    It looks like I've run into some inconsistency in the USB stack behavior.

    The USB stack maintains, among others, two states for the attach
USB device: authorized and owned. Authorization state is accessible to
the user space code through correspondent sysfs files, the ownership
can be set by claiming the hub's port with ioctl call. Both state may
be set before the device is attached, by access the hub settings. When
the new device is attached, both authorization and ownership prevent
the kernel USB stack from setting the newly attached device
configuration, but when the device is authorized, the ownership state
is ignored. It looks like ignoring the ownership state on
authorization make the stack behavior inconsistent; it also prevents
the user space code from completely overriding configuration
selection, important for implementing workarounds for bugs in the
device configuration selection.

   The following patch makes the stack behavior more consistent, by
moving ownership test into usb_choose_configuration - the later
function is used both by generic_probe and usb_authorize_device
Signed-off-by: Joseph Hindin <hindin@xxxxxxxxx>
--- drivers/usb/core/generic.c.org      2012-11-04 21:06:50.000000000 +0200
+++ drivers/usb/core/generic.c  2012-11-04 21:07:34.000000000 +0200
@@ -47,6 +47,9 @@ int usb_choose_configuration(struct usb_
        int insufficient_power = 0;
        struct usb_host_config *c, *best;

+       if (usb_device_is_owned(udev))
+               return 0;
+
        best = NULL;
        c = udev->config;
        num_configs = udev->descriptor.bNumConfigurations;
@@ -160,9 +163,7 @@ static int generic_probe(struct usb_devi
        /* Choose and set the configuration.  This registers the interfaces
         * with the driver core and lets interface drivers bind to them.
         */
-       if (usb_device_is_owned(udev))
-               ;               /* Don't configure if the device is owned */
-       else if (udev->authorized == 0)
+       if (udev->authorized == 0)
                dev_err(&udev->dev, "Device is not authorized for usage\n");
        else {
                c = usb_choose_configuration(udev);
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux