@@ -958,6 +958,7 @@ EXPORT_SYMBOL_GPL(gether_get_host_addr);
int gether_get_host_addr_cdc(struct net_device *net, char *host_addr, int len)
{
struct eth_dev *dev;
+ int i, slen;
if (len < 13)
return -EINVAL;
@@ -965,7 +966,14 @@ int gether_get_host_addr_cdc(struct net_device *net, char *host_addr, int len)
dev = netdev_priv(net);
snprintf(host_addr, len, "%pm", dev->host_mac);
- return strlen(host_addr);
+
+ slen = strlen(host_addr);
+
+ for(i = 0; i < slen; i++) {
+ host_addr[i] = toupper(host_addr[i]);
+ }
+
+ return slen;
}
EXPORT_SYMBOL_GPL(gether_get_host_addr_cdc);
As the CDC-ECM specification states the host MAC address must be sent to the host as an uppercase hexadecimal string: The Unicode character is chosen from the set of values 30h through 39h and 41h through 46h (0-9 and A-F). However, snprintf(.., "%pm", ..) generates a lowercase MAC address string. While most host drivers are tolerant to this, UsbNcm.sys on Windows 10 is not. Instead it uses a different MAC address with all bytes set to zero including and after the first byte containing a lowercase letter. On Windows 11 Microsoft fixed it, but apparently they did not backport the fix. This change fixes the issue by upper-casing the MAC to comply with the specification. Signed-off-by: Konrad Gräfe <k.graefe@gateware.de> --- drivers/usb/gadget/function/u_ether.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)