CVE-2026-90590: Permanent loss of transmit capability in the NXP ENET QoS Ethernet driver after an Ethernet link drop
The NXP ENET QoS Ethernet driver in drivers/ethernet/ethnxpenetqos serialises transmission with a binary semaphore, data->tx.txsem, taken in ethnxpenetqostx() and returned only by the transmit-completion interrupt handler txdmadone(). A frame that has been handed to the transmit DMA when the Ethernet link goes down is never written back, so that completion interrupt never arrives. The PHY callback ethnxpenetqosphycb() reacts to carrier loss only by calling netethcarrierset(); it does not stop the DMA, take the descriptors back or release the outstanding frame, and no timeout exists to do so.
The trigger is a link-down/link-up transition that lands while a frame is under the transmit DMA. It can be produced by anyone who controls the link partner or the cable — for example by administratively downing and restoring the attached switch port, or by restarting auto-negotiation from a peer device — and can be made reliable by generating traffic that keeps the device transmitting and repeating the transition. No credentials or user interaction are required, and the trigger is at the link layer rather than over IP.
Because the semaphore is never given back, every subsequent call to ethnxpenetqostx() fails with -EBUSY for the remaining life of the boot; restoring the link does not recover the interface, since the link-up path only rewrites MACCONFIGURATION. The affected interface continues to receive but can no longer transmit anything — no ARP replies, no TCP acknowledgements, no DHCP renewals — until the device is reset. The netpkt and the netbuf fragments of the abandoned frame are likewise never unreferenced and never return to their pools. The security-relevant property is persistence: a momentary link flap leaves the interface permanently unable to send, so the denial of service outlasts the attacker's access to the link. There is no confidentiality or integrity impact.
The fix adds a claim/release pair around the outstanding packet so that completion and abandonment are mutually exclusive, aborts an outstanding frame from the PHY callback on carrier loss (stopping the DMA, flushing the MTL transmit queue and reinitialising the descriptor ring), and arms a transmit watchdog, CONFIGETHNXPENETQOSTXTIMEOUTMS, so that any non-completing DMA — not only a carrier loss — reclaims the transmit slot and the packet.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Configuration
Enable the transmit watchdog so non-completing DMA reclaims the transmit slot and packet.
NXP ENET QoS Ethernet driver CONFIG_ETH_NXP_ENET_QOS_TX_TIMEOUT_MS = enabled
Event History
Frequently Asked Questions
Which deployments are exposed?
Systems using the NXP ENET QoS Ethernet driver are exposed when an attacker can control the Ethernet link partner or cable. Examples include an attached switch port that can be administratively cycled or a peer device that can restart auto-negotiation.
Does exploitation require IP connectivity, credentials, or user interaction?
No. The trigger occurs at the Ethernet link layer, not over IP, and requires no credentials or user interaction.
What timing is required to trigger the failure?
The Ethernet link must go down and come back up while a frame is under transmit DMA. Generating ongoing traffic and repeating link transitions can make this condition more reliable.
What is the operational effect after the trigger?
The outstanding transmit completion does not occur, so the binary transmit semaphore is not released. Subsequent transmissions cannot proceed because the driver remains blocked on that semaphore.