rndis_host: Set valid random MAC on buggy devices
authorKristian Evensen <kristian.evensen@gmail.com>
Thu, 14 Jul 2016 08:23:03 +0000 (10:23 +0200)
committerDavid S. Miller <davem@davemloft.net>
Sun, 17 Jul 2016 03:03:04 +0000 (20:03 -0700)
Some devices of the same type all export the same, random MAC address. This
behavior has been seen on the ZTE MF910, MF823 and MF831, and there are
probably more devices out there. Fix this by generating a valid random MAC
address if we read a random MAC from device.

Also, changed the memcpy() to ether_addr_copy(), as pointed out by
checkpatch.

Suggested-by: Bjørn Mork <bjorn@mork.no>
Signed-off-by: Kristian Evensen <kristian.evensen@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/usb/rndis_host.c

index 524a47a2812075490ac601b93590dd06d4caeccb..4f4f71b2966ba50760f8309efdc919106d9f8276 100644 (file)
@@ -428,7 +428,11 @@ generic_rndis_bind(struct usbnet *dev, struct usb_interface *intf, int flags)
                dev_err(&intf->dev, "rndis get ethaddr, %d\n", retval);
                goto halt_fail_and_release;
        }
-       memcpy(net->dev_addr, bp, ETH_ALEN);
+
+       if (bp[0] & 0x02)
+               eth_hw_addr_random(net);
+       else
+               ether_addr_copy(net->dev_addr, bp);
 
        /* set a nonzero filter to enable data transfers */
        memset(u.set, 0, sizeof *u.set);