Skip to content

In the Linux kernel, the following vulnerability has been...

Moderate severity Unreviewed Published Sep 15, 2025 to the GitHub Advisory Database • Updated Dec 2, 2025

Package

No package listedSuggest a package

Affected versions

Unknown

Patched versions

Unknown

Description

In the Linux kernel, the following vulnerability has been resolved:

net: openvswitch: fix race on port output

assume the following setup on a single machine:

  1. An openvswitch instance with one bridge and default flows
  2. two network namespaces "server" and "client"
  3. two ovs interfaces "server" and "client" on the bridge
  4. for each ovs interface a veth pair with a matching name and 32 rx and
    tx queues
  5. move the ends of the veth pairs to the respective network namespaces
  6. assign ip addresses to each of the veth ends in the namespaces (needs
    to be the same subnet)
  7. start some http server on the server network namespace
  8. test if a client in the client namespace can reach the http server

when following the actions below the host has a chance of getting a cpu
stuck in a infinite loop:

  1. send a large amount of parallel requests to the http server (around
    3000 curls should work)
  2. in parallel delete the network namespace (do not delete interfaces or
    stop the server, just kill the namespace)

there is a low chance that this will cause the below kernel cpu stuck
message. If this does not happen just retry.
Below there is also the output of bpftrace for the functions mentioned
in the output.

The series of events happening here is:

  1. the network namespace is deleted calling
    unregister_netdevice_many_notify somewhere in the process
  2. this sets first NETREG_UNREGISTERING on both ends of the veth and
    then runs synchronize_net
  3. it then calls call_netdevice_notifiers with NETDEV_UNREGISTER
  4. this is then handled by dp_device_event which calls
    ovs_netdev_detach_dev (if a vport is found, which is the case for
    the veth interface attached to ovs)
  5. this removes the rx_handlers of the device but does not prevent
    packages to be sent to the device
  6. dp_device_event then queues the vport deletion to work in
    background as a ovs_lock is needed that we do not hold in the
    unregistration path
  7. unregister_netdevice_many_notify continues to call
    netdev_unregister_kobject which sets real_num_tx_queues to 0
  8. port deletion continues (but details are not relevant for this issue)
  9. at some future point the background task deletes the vport

If after 7. but before 9. a packet is send to the ovs vport (which is
not deleted at this point in time) which forwards it to the
dev_queue_xmit flow even though the device is unregistering.
In skb_tx_hash (which is called in the dev_queue_xmit) path there is
a while loop (if the packet has a rx_queue recorded) that is infinite if
dev->real_num_tx_queues is zero.

To prevent this from happening we update do_output to handle devices
without carrier the same as if the device is not found (which would
be the code path after 9. is done).

Additionally we now produce a warning in skb_tx_hash if we will hit
the infinite loop.

bpftrace (first word is function name):

_dev_queue_xmit server: real_num_tx_queues: 1, cpu: 2, pid: 28024, tid: 28024, skb_addr: 0xffff9edb6f207000, reg_state: 1
netdev_core_pick_tx server: addr: 0xffff9f0a46d4a000 real_num_tx_queues: 1, cpu: 2, pid: 28024, tid: 28024, skb_addr: 0xffff9edb6f207000, reg_state: 1
dp_device_event server: real_num_tx_queues: 1 cpu 9, pid: 21024, tid: 21024, event 2, reg_state: 1
synchronize_rcu_expedited: cpu 9, pid: 21024, tid: 21024
synchronize_rcu_expedited: cpu 9, pid: 21024, tid: 21024
synchronize_rcu_expedited: cpu 9, pid: 21024, tid: 21024
synchronize_rcu_expedited: cpu 9, pid: 21024, tid: 21024
dp_device_event server: real_num_tx_queues: 1 cpu 9, pid: 21024, tid: 21024, event 6, reg_state: 2
ovs_netdev_detach_dev server: real_num_tx_queues: 1 cpu 9, pid: 21024, tid: 21024, reg_state: 2
netdev_rx_handler_unregister server: real_num_tx_queues: 1, cpu: 9, pid: 21024, tid: 21024, reg_state: 2
synchronize_rcu_expedited: cpu 9, pid: 21024, tid: 21024
netdev_rx_handler_unregister ret server: real_num_tx_queues: 1, cpu: 9, pid: 21024, tid: 21024, reg_state: 2
dp

---truncated---

References

Published by the National Vulnerability Database Sep 15, 2025
Published to the GitHub Advisory Database Sep 15, 2025
Last updated Dec 2, 2025

Severity

Moderate

CVSS overall score

This score calculates overall vulnerability severity from 0 to 10 and is based on the Common Vulnerability Scoring System (CVSS).
/ 10

CVSS v3 base metrics

Attack vector
Local
Attack complexity
High
Privileges required
Low
User interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
High

CVSS v3 base metrics

Attack vector: More severe the more the remote (logically and physically) an attacker can be in order to exploit the vulnerability.
Attack complexity: More severe for the least complex attacks.
Privileges required: More severe if no privileges are required.
User interaction: More severe when no user interaction is required.
Scope: More severe when a scope change occurs, e.g. one vulnerable component impacts resources in components beyond its security scope.
Confidentiality: More severe when loss of data confidentiality is highest, measuring the level of data access available to an unauthorized user.
Integrity: More severe when loss of data integrity is the highest, measuring the consequence of data modification possible by an unauthorized user.
Availability: More severe when the loss of impacted component availability is highest.
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:H

EPSS score

Exploit Prediction Scoring System (EPSS)

This score estimates the probability of this vulnerability being exploited within the next 30 days. Data provided by FIRST.
(2nd percentile)

Weaknesses

Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition')

The product contains a code sequence that can run concurrently with other code, and the code sequence requires temporary, exclusive access to a shared resource, but a timing window exists in which the shared resource can be modified by another code sequence that is operating concurrently. Learn more on MITRE.

CVE ID

CVE-2023-53188

GHSA ID

GHSA-j5c6-h3mg-24rj

Source code

No known source code

Dependabot alerts are not supported on this advisory because it does not have a package from a supported ecosystem with an affected and fixed version.

Learn more about GitHub language support

Loading Checking history
See something to contribute? Suggest improvements for this vulnerability.