]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: usb: cdc_ncm: add Apple Mac USB-C direct networking quirk
authorAlex Cheema <alex@exolabs.net>
Wed, 29 Apr 2026 17:57:39 +0000 (18:57 +0100)
committerJakub Kicinski <kuba@kernel.org>
Sat, 2 May 2026 00:17:27 +0000 (17:17 -0700)
Apple Silicon Macs expose two CDC NCM "private" data interfaces over
USB-C with VID:PID 0x05ac:0x1905 and product string "Mac". This is the
same protocol Apple already ships on iPhone (0x05ac:0x12a8) and iPad
(0x05ac:0x12ab) for RemoteXPC since iOS 17 -- both data interfaces lack
an interrupt status endpoint, so they rely on the FLAG_LINK_INTR-
conditional bind path introduced in commit 3ec8d7572a69 ("CDC-NCM: add
support for Apple's private interface").

The id_table currently has entries for iPhone and iPad but not for the
Mac. Without a match, cdc_ncm falls through to the generic CDC NCM
class-match entry, which uses the FLAG_LINK_INTR-having cdc_ncm_info
struct, so bind_common() fails on the missing status endpoint and no
netdev appears.

Add id_table entries for both interface numbers (0 and 2) of the Mac,
bound to the existing apple_private_interface_info driver_info.

Verified empirically on a Mac Studio M3 Ultra running macOS 26.5: when
a Mac is connected via USB-C, ioreg shows VID 0x05ac, PID 0x1905,
product string "Mac", with two NCM data interfaces at numbers 0 and 2.
The same PID is presented by all current Apple Silicon Mac models
(MacBook Pro/Air, Mac mini, Mac Studio across the M-series), mirroring
Apple's single-PID-per-family pattern from iPhone/iPad.

After this patch, plugging a Mac into a Linux host running the patched
kernel produces two enx... interfaces (one per data interface),
"ip -br link" lists them as UP, and standard userspace networking
(DHCP, NetworkManager shared mode, etc.) works without any modprobe
overrides or out-of-tree modules.

Signed-off-by: Alex Cheema <alex@exolabs.net>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://patch.msgid.link/20260429175739.34426-1-alex@exolabs.net
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/usb/cdc_ncm.c

index bb9929727eb932989575a48e15d3cfe14f0ea899..0223a172851ecf91b91a066f4b47bf3d610f22e9 100644 (file)
@@ -2012,6 +2012,14 @@ static const struct usb_device_id cdc_devs[] = {
                .driver_info = (unsigned long)&apple_private_interface_info,
        },
 
+       /* Mac */
+       { USB_DEVICE_INTERFACE_NUMBER(0x05ac, 0x1905, 0),
+               .driver_info = (unsigned long)&apple_private_interface_info,
+       },
+       { USB_DEVICE_INTERFACE_NUMBER(0x05ac, 0x1905, 2),
+               .driver_info = (unsigned long)&apple_private_interface_info,
+       },
+
        /* Ericsson MBM devices like F5521gw */
        { .match_flags = USB_DEVICE_ID_MATCH_INT_INFO
                | USB_DEVICE_ID_MATCH_VENDOR,