CVE-2025-68232: veth: more robust handing of race to avoid txq getting stuck
In the Linux kernel, the following vulnerability has been resolved:
veth: more robust handing of race to avoid txq getting stuck
Commit dc82a33297fc ("veth: apply qdisc backpressure on full ptr_ring to
reduce TX drops") introduced a race condition that can lead to a permanently
stalled TXQ. This was observed in production on ARM64 systems (Ampere Altra
Max).
The race occurs in veth_xmit(). The producer observes a full ptr_ring and
stops the queue (netif_tx_stop_queue()). The subsequent conditional logic,
intended to re-wake the queue if the consumer had just emptied it (if
(__ptr_ring_empty(...)) netif_tx_wake_queue()), can fail. This leads to a
"lost wakeup" where the TXQ remains stopped (QUEUE_STATE_DRV_XOFF) and
traffic halts.
This failure is caused by an incorrect use of the __ptr_ring_empty() API
from the producer side. As noted in kernel comments, this check is not
guaranteed to be correct if a consumer is operating on another CPU. The
empty test is based on ptr_ring->consumer_head, making it reliable only for
the consumer. Using this check from the producer side is fundamentally racy.
This patch fixes the race by adopting the more robust logic from an earlier
version V4 of the patchset, which always flushed the peer:
(1) In veth_xmit(), the racy conditional wake-up logic and its memory barrier
are removed. Instead, after stopping the queue, we unconditionally call
__veth_xdp_flush(rq). This guarantees that the NAPI consumer is scheduled,
making it solely responsible for re-waking the TXQ.
This handles the race where veth_poll() consumes all packets and completes
NAPI *before* veth_xmit() on the producer side has called netif_tx_stop_queue.
The __veth_xdp_flush(rq) will observe rx_notify_masked is false and schedule
NAPI.
(2) On the consumer side, the logic for waking the peer TXQ is moved out of
veth_xdp_rcv() and placed at the end of the veth_poll() function. This
placement is part of fixing the race, as the netif_tx_queue_stopped() check
must occur after rx_notify_masked is potentially set to false during NAPI
completion.
This handles the race where veth_poll() consumes all packets, but haven't
finished (rx_notify_masked is still true). The producer veth_xmit() stops the
TXQ and __veth_xdp_flush(rq) will observe rx_notify_masked is true, meaning
not starting NAPI. Then veth_poll() change rx_notify_masked to false and
stops NAPI. Before exiting veth_poll() will observe TXQ is stopped and wake
it up.
Security readout for executives and security teams
Plain-English summary
A race in the Linux veth virtual-network driver can leave a transmit queue permanently stopped, halting traffic through the affected path. The issue primarily threatens availability, not confidentiality or integrity. It was observed in production on ARM64 Ampere Altra Max systems and may affect container or network-namespace workloads that rely heavily on veth interfaces.
Executive priority
Treat as high priority for container platforms, virtual networking hosts, and other systems where veth traffic interruption could cause material outages. Prioritize known affected ARM64 environments. Systems without veth usage have lower practical urgency, but affected-build inventory and vendor fix verification should still be completed promptly.
Technical view
In veth_xmit(), a producer-side __ptr_ring_empty() check can race with a consumer on another CPU, causing a lost wakeup after netif_tx_stop_queue(). The fix unconditionally flushes the peer to schedule NAPI and moves peer TXQ wake logic to the end of veth_poll(), after NAPI completion state is updated.
Likely exposure
Exposure applies to Linux systems running affected kernel builds and actively using veth networking. The bundle lists 6.16, 6.17.10, and 6.18 as affected, but its version data includes an ambiguous โ0โ entry. Distribution-specific backports may change exposure, so kernel package versions alone are insufficient without vendor mapping.
Exploitation context
The supplied sources report production occurrence but provide no evidence of active malicious exploitation. The CVE is not listed as KEV in the bundle. Although CVSS assigns network reachability and low complexity, the provided description does not establish a reliable remote attack path or attacker-controlled trigger conditions.
Researcher notes
The flaw is a producer-consumer synchronization failure, not memory corruption. Producer-side emptiness testing is unreliable because consumer_head may change concurrently. The referenced correction removes that dependency, ensures consumer scheduling, and performs wake evaluation after rx_notify_masked may be cleared. The bundle does not identify affected distributions, public proof-of-concept code, or confirmed hostile triggering.
Mitigation direction
Upgrade to a vendor kernel that includes the applicable stable fix referenced by the Linux kernel commits.
Prioritize container hosts and network-namespace systems using veth, especially ARM64 Ampere Altra Max deployments.
If immediate upgrading is unavailable, consult distribution guidance for supported mitigations; the supplied sources name no workaround.
Validation and detection
Map running kernel builds to vendor advisories and confirm whether the relevant stable fix is included.
Identify systems using veth interfaces and prioritize those carrying availability-sensitive workloads.
Check monitoring and incident records for stopped transmit queues or unexplained traffic halts.
After remediation, stress affected networking paths and confirm transmit queues recover without persistent stalls.
Generated from the cited source records. This long-tail analysis has not been individually reviewed by a named human.
Potential ATT&CK relevance
Conservative CVE-to-ATT&CK context
These mappings and lookup hints may be relevant to the vulnerability behavior, CWE, affected product, or exposure path. Glexia-inferred context is not an official MITRE, ATT&CK, CWE, or CVE Program mapping.
ATT&CK lookup starting points
Use these exact CWE pages and searches to review the Glexia ATT&CK library from this CVE's weakness and description context.
cve ยท low confidence lookup
CVE-2025-68232 mapping review
Open the CVE-to-ATT&CK bridge for reviewed, inferred, or future official mappings tied to this CVE.
These fields come from the CVE record and ADP containers, not from Glexia's Take. They preserve time-varying source decisions such as CISA SSVC, KEV status, CVSS metrics, and provider references.
1CVSS vectors
3Timeline events
0ADP providers
4Source links
CVSS vector scores
1 official score
We collect every scored CVSS vector available in the official CNA and ADP containers. When more than one version is present, the table keeps the source vectors side by side instead of collapsing them into the highest score.