eth/r8152: fix assigning the wrong endpoint
authorHayes Wang <hayeswang@realtek.com>
Fri, 22 May 2020 08:54:10 +0000 (16:54 +0800)
committerMarek Vasut <marex@denx.de>
Fri, 29 May 2020 17:18:55 +0000 (19:18 +0200)
Although I think it never occurs, the code doesn't make sense, because
it may allow to assign an IN endpoint to ss->ep_out.

Signed-off-by: Hayes Wang <hayeswang@realtek.com>
drivers/usb/eth/r8152.c

index d9908ecc156210f4a82bbf02d62880fcc7c47fd1..f201a1789b6600a326834a72c1c1d12515c5fa51 100644 (file)
@@ -1354,9 +1354,8 @@ int r8152_eth_probe(struct usb_device *dev, unsigned int ifnum,
        struct usb_interface *iface;
        struct usb_interface_descriptor *iface_desc;
        int ep_in_found = 0, ep_out_found = 0;
-       int i;
-
        struct r8152 *tp;
+       int i;
 
        /* let's examine the device now */
        iface = &dev->config.if_desc[ifnum];
@@ -1399,10 +1398,13 @@ int r8152_eth_probe(struct usb_device *dev, unsigned int ifnum,
                if ((iface->ep_desc[i].bmAttributes &
                     USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_BULK) {
                        u8 ep_addr = iface->ep_desc[i].bEndpointAddress;
-                       if ((ep_addr & USB_DIR_IN) && !ep_in_found) {
-                               ss->ep_in = ep_addr &
-                                       USB_ENDPOINT_NUMBER_MASK;
-                               ep_in_found = 1;
+
+                       if (ep_addr & USB_DIR_IN) {
+                               if (!ep_in_found) {
+                                       ss->ep_in = ep_addr &
+                                               USB_ENDPOINT_NUMBER_MASK;
+                                       ep_in_found = 1;
+                               }
                        } else {
                                if (!ep_out_found) {
                                        ss->ep_out = ep_addr &