CVE-2026-10647 Deadlock denial of service in USB CDC-NCM device class on TX enqueue failure

Medium 5.3 Published Updated

A deadlock in the USB CDC-NCM driver causes permanent denial of service when a host suspends the bus during transmission, requiring a reboot to recover.

Exploited in the wild
Not known
Login needed
Not needed
Attackable
Local or same network only
Victim action needed
Not needed
Fix
None listed

What is CVE-2026-10647?

CVE-2026-10647 is a medium-severity denial of service vulnerability in Zephyrproject Zephyr, published on 29 Jun 2026. It can only be exploited from the same machine or local network, with no action from the victim.

Official description

The USB CDC-NCM device class (subsys/usb/device_next/class/usbd_cdc_ncm.c) ignores the return value of usbd_ep_enqueue() in its ethernet transmit callback cdc_ncm_send(). When the enqueue fails, the function still calls k_sem_take(&data->sync_sem, K_FOREVER), blocking on a completion semaphore that is only ever signaled from the bulk-IN transfer-completion callback. Because nothing was enqueued, that callback never fires and the calling thread — a shared network traffic-class TX thread — deadlocks permanently while holding the interface TX lock, halting transmission until reboot (and leaking the transmit buffer).

The enqueue fails under conditions controlled by the attached USB host: usbd_ep_enqueue() returns -EPERM whenever the bus is suspended (a standard, persistent host operation), and the underlying udc_ep_enqueue() returns -EPERM/-ENODEV on disconnect, bus reset, or endpoint disable. The cdc_ncm_send() guard only checks the DATA_IFACE_ENABLED and IFACE_UP flags, not the suspended state, so a packet transmitted while the host holds the bus suspended reaches the failing enqueue and deadlocks the TX path.

The realistic trigger is a bus suspend that occurs while the exported network interface is active and has traffic to send — host sleep, USB selective/auto-suspend, or hub power management — after which any device-originated packet deadlocks the path, recoverable only by reboot. The impact is a persistent loss of the virtual network connection between the host's NCM interface and the Zephyr device; because the deadlocked thread is a shared traffic-class TX thread, egress on other network interfaces can stall as well. There is no memory corruption or information disclosure.

The defect was introduced with the CDC-NCM driver and shipped in releases through v4.4.0; it is fixed by checking the usbd_ep_enqueue() return value and freeing the buffer before the blocking wait.

Weakness: CWE-667, CWE-833

Which versions are affected by CVE-2026-10647?

It affects 1 product.

Products include Zephyrproject Zephyr.

How do I fix CVE-2026-10647?

No fix has been published for CVE-2026-10647 yet. Limit exposure of the affected software until one is available.

Upgrade, then put limits on request size, rate and nesting depth so one client cannot exhaust the service. More about Denial of service.

Is CVE-2026-10647 being exploited?

There is no known exploitation of CVE-2026-10647 in the wild and no public exploit code.

All Zephyrproject Zephyr vulnerabilities

Sources

Also known as GHSA-xcf7-r86m-5q9f.

Is CVE-2026-10647 in your software?

Upload an SBOM and sbomify checks it against every vulnerability here, every day.

Check your SBOMs for free