1 From 1bfbe1799b9ec5d00f7f032d6e7db1980e466aeb Mon Sep 17 00:00:00 2001
2 From: Lech Perczak <lech.perczak@gmail.com>
3 Date: Sat, 2 Apr 2022 02:19:57 +0200
4 Subject: [PATCH 3/3] rndis_host: limit scope of bogus MAC address detection to
7 Content-Type: text/plain; charset=UTF-8
8 Content-Transfer-Encoding: 8bit
10 Reporting of bogus MAC addresses and ignoring configuration of new
11 destination address wasn't observed outside of a range of ZTE devices,
12 among which this seems to be the common bug. Align rndis_host driver
13 with implementation found in cdc_ether, which also limits this workaround
16 Suggested-by: Bjørn Mork <bjorn@mork.no>
17 Cc: Kristian Evensen <kristian.evensen@gmail.com>
18 Cc: Oliver Neukum <oliver@neukum.org>
19 Signed-off-by: Lech Perczak <lech.perczak@gmail.com>
21 drivers/net/usb/rndis_host.c | 17 ++++++++++++-----
22 1 file changed, 12 insertions(+), 5 deletions(-)
24 --- a/drivers/net/usb/rndis_host.c
25 +++ b/drivers/net/usb/rndis_host.c
26 @@ -418,10 +418,7 @@ generic_rndis_bind(struct usbnet *dev, s
27 goto halt_fail_and_release;
31 - eth_hw_addr_random(net);
33 - ether_addr_copy(net->dev_addr, bp);
34 + ether_addr_copy(net->dev_addr, bp);
36 /* set a nonzero filter to enable data transfers */
37 memset(u.set, 0, sizeof *u.set);
38 @@ -463,6 +460,16 @@ static int rndis_bind(struct usbnet *dev
39 return generic_rndis_bind(dev, intf, FLAG_RNDIS_PHYM_NOT_WIRELESS);
42 +static int zte_rndis_bind(struct usbnet *dev, struct usb_interface *intf)
44 + int status = rndis_bind(dev, intf);
46 + if (!status && (dev->net->dev_addr[0] & 0x02))
47 + eth_hw_addr_random(dev->net);
52 void rndis_unbind(struct usbnet *dev, struct usb_interface *intf)
54 struct rndis_halt *halt;
55 @@ -615,7 +622,7 @@ static const struct driver_info zte_rndi
56 .description = "ZTE RNDIS device",
57 .flags = FLAG_ETHER | FLAG_POINTTOPOINT | FLAG_FRAMING_RN | FLAG_NO_SETINT,
58 .data = RNDIS_DRIVER_DATA_DST_MAC_FIXUP,
60 + .bind = zte_rndis_bind,
61 .unbind = rndis_unbind,
62 .status = rndis_status,
63 .rx_fixup = rndis_rx_fixup,