hso: always read interface number from the current altsetting
authorAleksander Morgado <aleksander@aleksander.es>
Tue, 17 Feb 2015 10:31:29 +0000 (11:31 +0100)
committerDavid S. Miller <davem@davemloft.net>
Fri, 20 Feb 2015 20:21:31 +0000 (15:21 -0500)
Always read bInterfaceNumber from the current altsetting, not from the first one
available in the altsetting array. This is coming from code review, not related
to any specific bug.

Signed-off-by: Aleksander Morgado <aleksander@aleksander.es>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/usb/hso.c

index 9cdfb3fe9c156ba775d41a9d6d343ddbb5fc9b60..3c8dfe5e46ed3cdf6dd162bceb3d2b94e6cf8c06 100644 (file)
@@ -1477,6 +1477,7 @@ static void tiocmget_intr_callback(struct urb *urb)
        struct uart_icount *icount;
        struct hso_serial_state_notification *serial_state_notification;
        struct usb_device *usb;
+       struct usb_interface *interface;
        int if_num;
 
        /* Sanity checks */
@@ -1494,7 +1495,9 @@ static void tiocmget_intr_callback(struct urb *urb)
        BUG_ON((serial->parent->port_spec & HSO_PORT_MASK) != HSO_PORT_MODEM);
 
        usb = serial->parent->usb;
-       if_num = serial->parent->interface->altsetting->desc.bInterfaceNumber;
+       interface = serial->parent->interface;
+
+       if_num = interface->cur_altsetting->desc.bInterfaceNumber;
 
        /* wIndex should be the USB interface number of the port to which the
         * notification applies, which should always be the Modem port.
@@ -1675,6 +1678,7 @@ static int hso_serial_tiocmset(struct tty_struct *tty,
        unsigned long flags;
        int if_num;
        struct hso_serial *serial = tty->driver_data;
+       struct usb_interface *interface;
 
        /* sanity check */
        if (!serial) {
@@ -1685,7 +1689,8 @@ static int hso_serial_tiocmset(struct tty_struct *tty,
        if ((serial->parent->port_spec & HSO_PORT_MASK) != HSO_PORT_MODEM)
                return -EINVAL;
 
-       if_num = serial->parent->interface->altsetting->desc.bInterfaceNumber;
+       interface = serial->parent->interface;
+       if_num = interface->cur_altsetting->desc.bInterfaceNumber;
 
        spin_lock_irqsave(&serial->serial_lock, flags);
        if (set & TIOCM_RTS)
@@ -2808,7 +2813,7 @@ static int hso_get_config_data(struct usb_interface *interface)
 {
        struct usb_device *usbdev = interface_to_usbdev(interface);
        u8 *config_data = kmalloc(17, GFP_KERNEL);
-       u32 if_num = interface->altsetting->desc.bInterfaceNumber;
+       u32 if_num = interface->cur_altsetting->desc.bInterfaceNumber;
        s32 result;
 
        if (!config_data)
@@ -2886,7 +2891,7 @@ static int hso_probe(struct usb_interface *interface,
                return -ENODEV;
        }
 
-       if_num = interface->altsetting->desc.bInterfaceNumber;
+       if_num = interface->cur_altsetting->desc.bInterfaceNumber;
 
        /* Get the interface/port specification from either driver_info or from
         * the device itself */