Read the docs
TI-2025-15638 Aliases CVE-2025-21681GHSA-2x4f-r6q9-v77h

openvswitch: fix lockup on tx to unregistering netdev with carrier

Priority LOW 24CWE-835Published · Updated

Key facts

Attack vector
Local
Privileges required
Low
User interaction
None
Attack complexity
Low
Impact type
Denial of service
Confidentiality · integrity · availability
None · None · High
Fix status
Partial Red Hat: 5 without a fix

Attack profile from CVSS 3.1 · NVD. Fix status from CNA and Red Hat. Impact type from CWE-835.

Summary

In the Linux kernel, the following vulnerability has been resolved: openvswitch: fix lockup on tx to unregistering netdev with carrier Commit in a fixes tag attempted to fix the issue in the following sequence of calls: do_output -> ovs_vport_send -> dev_queue_xmit -> __dev_queue_xmit -> netdev_core_pick_tx -> skb_tx_hash When device is unregistering, the 'dev->real_num_tx_queues' goes to zero and the 'while (unlikely(hash >= qcount))' loop inside the 'skb_tx_hash' becomes infinite, locking up the core forever. But unfortunately, checking just the carrier status is not enough to fix the issue, because some devices may still be in unregistering state while reporting carrier status OK. One example of such device is a net/dummy. It sets carrier ON on start, but it doesn't implement .ndo_stop to set the carrier off. And it makes sense, because dummy doesn't really have a carrier. Therefore, while this device is unregistering, it's still easy to hit the infinite loop in the skb_tx_hash() from the OVS datapath. There might be other drivers that do the same, but dummy by itself is important for the OVS ecosystem, because it is frequently used as a packet sink for tcpdump while debugging OVS deployments. And when the issue is hit, the only way to recover is to reboot. Fix that by also checking if the device is running. The running state is handled by the net core during unregistering, so it covers unregistering case better, and we don't really need to send packets to devices that are not running anyway. While only checking the running state might be enough, the carrier check is preserved. The running and the carrier states seem disjoined throughout the code and different drivers. And other core functions like __dev_direct_xmit() check both before attempting to transmit a packet. So, it seems safer to check both flags in OVS as well.

Why it matters now

Exploitation None reported CISA SSVC · not in CISA KEV
EPSS 0.00216 12th percentileScored 2026-11-07
Fix Partial Linux (Linux): 6.1.127, 6.3, 6.6.74 +2Red Hat: 5 without a fix

SSVC decision points

CISA ADP · SSVC 2.0.3

Exploitation
None
Automatable
No
Technical impact
Partial

The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.

Affected products

VendorProductAffected versionsFixed inStatusSource
LinuxLinux6.1.25 to before 6.1.127; 6.2.12 to before 6.36.1.127, 6.3Patch availableCNA
LinuxLinux6.3 and later6.1.127, 6.6.74, 6.12.11, 6.13Patch availableCNA
  • Linux VendorLinux Affected 6.1.25 to before 6.1.127; 6.2.12 to before 6.3 Fixed in 6.1.127, 6.3 Patch available CNA
  • Linux VendorLinux Affected 6.3 and later Fixed in 6.1.127, 6.6.74, 6.12.11, 6.13 Patch available CNA

CPE configurations NVD · 8

CPEVersionsRoleVendor
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*6.1.25 to before 6.1.127; 6.2.12 to before 6.6.74; 6.7 to before 6.12.11VulnerableLinux
cpe:2.3:o:linux:linux_kernel:6.13:rc1:*:*:*:*:*:*6.13 rc1VulnerableLinux
cpe:2.3:o:linux:linux_kernel:6.13:rc2:*:*:*:*:*:*6.13 rc2VulnerableLinux
cpe:2.3:o:linux:linux_kernel:6.13:rc3:*:*:*:*:*:*6.13 rc3VulnerableLinux
cpe:2.3:o:linux:linux_kernel:6.13:rc4:*:*:*:*:*:*6.13 rc4VulnerableLinux
cpe:2.3:o:linux:linux_kernel:6.13:rc5:*:*:*:*:*:*6.13 rc5VulnerableLinux
cpe:2.3:o:linux:linux_kernel:6.13:rc6:*:*:*:*:*:*6.13 rc6VulnerableLinux
cpe:2.3:o:linux:linux_kernel:6.13:rc7:*:*:*:*:*:*6.13 rc7VulnerableLinux
  • cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* Versions 6.1.25 to before 6.1.127; 6.2.12 to before 6.6.74; 6.7 to before 6.12.11 Vulnerable ·Linux
  • cpe:2.3:o:linux:linux_kernel:6.13:rc1:*:*:*:*:*:* Versions 6.13 rc1 Vulnerable ·Linux
  • cpe:2.3:o:linux:linux_kernel:6.13:rc2:*:*:*:*:*:* Versions 6.13 rc2 Vulnerable ·Linux
  • cpe:2.3:o:linux:linux_kernel:6.13:rc3:*:*:*:*:*:* Versions 6.13 rc3 Vulnerable ·Linux
  • cpe:2.3:o:linux:linux_kernel:6.13:rc4:*:*:*:*:*:* Versions 6.13 rc4 Vulnerable ·Linux
  • cpe:2.3:o:linux:linux_kernel:6.13:rc5:*:*:*:*:*:* Versions 6.13 rc5 Vulnerable ·Linux
  • cpe:2.3:o:linux:linux_kernel:6.13:rc6:*:*:*:*:*:* Versions 6.13 rc6 Vulnerable ·Linux
  • cpe:2.3:o:linux:linux_kernel:6.13:rc7:*:*:*:*:*:* Versions 6.13 rc7 Vulnerable ·Linux

Remediation

  • Fix · CNA Linux (Linux) Fixed in 6.1.127, 6.3
  • Fix · CNA Linux (Linux) Fixed in 6.1.127, 6.6.74, 6.12.11, 6.13

Vendor assessments

Red Hat

Red Hat rating: Moderate. Red Hat's page for this CVE →

ProductStatusPlan or fix
Red Hat Enterprise Linux 10AffectedNo fix planned: Will not fix
Red Hat Enterprise Linux 6AffectedNo fix planned: Out of support scope
Red Hat Enterprise Linux 7AffectedNo fix planned: Out of support scope
Red Hat Enterprise Linux 8AffectedNo fix planned: Out of support scope
Red Hat Enterprise Linux 9AffectedNo fix yet

Timeline

  1. 2026-10-02 Threatist record created from CVE-2025-21681
  2. 2026-10-03 Alias added: GHSA-2x4f-r6q9-v77h
  3. 2026-11-05 CISA SSVC decision points changed

References

  • TI-2025-26358 tls: fix handling of zero-length records on the rx_list KEVCVSS 3.1CRITICAL 9.8
  • TI-2026-38352 netfilter: bridge: make ebt_snat ARP rewrite writable KEVCVSS 3.1HIGH 8.8
  • TI-2013-05264 The (1) get_user and (2) put_user API functions in the Linux kernel before 3.5.5 on the… KEVCVSS 3.1HIGH 8.8
  • TI-2022-00125 Integer overflow in kernel KEVCVSS 3.1HIGH 8.4
  • TI-2013-01864 The perf_swevent_init function in kernel/events/core.c in the Linux kernel before 3.8.9… KEVCVSS 3.1HIGH 8.4
  • TI-2021-05514 Heap Out-Of-Bounds Write in Netfilter IP6T_SO_SET_REPLACE KEVCVSS 3.1HIGH 8.3
See all 15278 →

Sources