Skip to content

Char major 180 (usbmisc) missing from device allowlist — /dev/cdc-wdm* unopenable, QMI/MBIM modems limited to AT #2635

Description

@PnutCN

v2.2.2 shipped the modem kernel modules from #2594, and that part works. With an EC20/EC25 (2c7c:0125) attached, option, qmi_wwan, cdc_mbim and cdc-wdm all load, /dev/ttyUSB0-3 show up, and wwan0 is created:

option 1-1:1.0: GSM modem (1-port) converter now attached to ttyUSB0
qmi_wwan 1-1:1.4: cdc-wdm0: USB WDM device
qmi_wwan 1-1:1.4 wwan0: register 'qmi_wwan' at usb-4000c000.usb-1, WWAN/QMI device

But /dev/cdc-wdm0 never appears. The kernel side is fine — /sys/class/usbmisc/cdc-wdm0/dev reads 180:176 and major 180 is in /proc/devices. Creating the node by hand and opening it gives EPERM.

Repro (no modem needed):

docker run --rm --privileged alpine sh -c \
  'mknod /dev/w c 180 176 2>/dev/null; (exec 3<>/dev/w) && echo OK || echo EPERM'

2.2.2 (2020200, kernel 7.0.14) → EPERM

Not the driver rejecting it. Opening a major-180 minor with no device behind it also returns EPERM rather than ENODEV, so it's denied before reaching the driver:

major:minor result
180:176 (cdc-wdm0, real device) EPERM
180:0 (same major, no device) EPERM
108:0 (ppp, fixed in #2524) OK
188:0 (ttyUSB) OK
10:200 (net/tun) OK

Same shape as major 108 in #2524 / #2528 — looks like the device allowlist is missing 180.

Impact: cdc-wdm is the control channel libqmi and ModemManager actually use. Without it a cellular modem is limited to the AT serial ports — SMS and USSD still work, but there's no way to bring up a data connection, so wwan0 never gets an IP. qmi_wwan has already bound the interface; only the node is missing.

Environment: OrbStack 2.2.2 (2020200), kernel 7.0.14-orbstack-00374-gbbca68e8d741, macOS 26.5.2 (Apple Silicon), Quectel EC20F (2c7c:0125).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions