data built 2026-10-19T13:16:53Z

Look up another CVE · open CVE-2025-40075 in the interactive tracker

CVE-2025-40075

tcp_metrics: use dst_dev_net_rcu()

8.1 EPSS 0.4% AV:N

Published 2025-10-28 (12 months ago) by the Linux kernel CNA. Subsystem net/ipv4. Debian urgency: not yet assigned.

What to do, per Debian release

Debian's own status for CVE-2025-40075 in every release this site tracks, and what each one means in practice. Every status below is the one the Debian Security Team publishes for this CVE. source

ReleaseStatus VersionWhat this means
Debian 12bookwormvulnerable6.1.190-1No fix published anywhere yet, neither in Debian nor upstream for the series bookworm tracks. Watch the Debian tracker page for this CVE. Advisories for bookworm have historically landed a median of 23 days after publication.
Debian 13trixiefixed6.12.63-1Update the kernel and reboot. Fixed in 6.12.63-1. A running kernel keeps the old code until the machine restarts.
Debian 14forkyfixed6.17.6-1Update the kernel and reboot. Fixed in 6.17.6-1. A running kernel keeps the old code until the machine restarts.
Debian unstablesidfixed6.17.6-1Update the kernel and reboot. Fixed in 6.17.6-1. A running kernel keeps the old code until the machine restarts.

The vulnerability

What the bug is

Replace three dst_dev() with a lockdep enabled helper.

Where it lives

The fix touches these files. If the subsystem is one you do not use, the practical exposure is lower, though the package is still the vulnerable one.

net/ipv4/tcp_metrics.c

What this is
NETWORKING [TCP]MAINTAINERS section matched on net/ipv4/tcp*.c · netdev@vger.kernel.org · Maintained

Check it on the machine

grep -w CONFIG_INET /boot/config-$(uname -r)

Reads the booted kernel's own configuration, on the machine and nowhere else. =y is built in, =m is a module, and an is not set line means the code is not there.

Show whether Debian builds this, per release

Debian builds this code. Every release below compiles the affected file into the kernels it ships.

  • bookworm, trixie, forky, sidy
y
built into the kernel image on every flavour - only a patch removes it
Build switch
CONFIG_INET

From the configuration Debian publishes for every kernel flavour it builds. It covers only the architectures Debian ships a linux-config package for, and nothing about a kernel you built yourself. Debian's own status above stays authoritative about the source package.MAINTAINERS kbuild Makefiles Debian linux-config packages

Signals

Published
2025-10-28 (12 months ago)source
CVSS
8.1 high
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:Hsource recompute it
Attack vector
network (AV:N)source
EPSS
0.41%, higher than 33.4% of all CVEssource
CISA KEV
not listedthe KEV catalogue
Debian urgency
not yet assignedsource
Subsystem
net/ipv4

Upstream fixes

The versions the CNA records as introducing and fixing this, and the commit for each. source

IntroducedFixed inCommit
4.136.12.634b89397807eb
4.136.17.307613a95326e
4.136.1850c127a69cd6

Why the CNA scored it this way

Quoted from the kernel CNA's own scoring file, word for word. A highlighted metric carries the most severe value CVSS v3.1 defines for it, which is what pushes the score up. source

AV:NAttack vector, network
The three fixed call sites sit in the core TCP metrics cache, reached from `tcp_conn_request()` on an inbound SYN, from `tcp_finish_connect()`, from the TIME-WAIT/LAST-ACK teardown path, and from TCP Fast Open — all driven purely by packets from a remote peer. No local access is needed to reach the vulnerable code.
AC:HAttack complexity, high
The stale `dst->dev` window only exists while `dst_dev_put()` is concurrently swapping the device to the blackhole netdev during a route removal or NETDEV_DOWN/UNREGISTER event, which a remote attacker cannot induce or time. The attacker controls only the TCP-connection side of the race.
PR:NPrivileges required, none
`tcp_peer_is_proven()` is invoked from `tcp_conn_request()` while processing an unauthenticated SYN, before any application-level credentials exist, and the other paths only require establishing or closing a normal TCP connection. No kernel privilege check or capability gate exists anywhere along the path.
UI:NUser interaction, none
The code runs entirely from softirq/socket context on packet receive and connection teardown; no local user or administrator action is required to trigger it.
S:UScope, unchanged
The unprotected dereference and its consequences are confined to the kernel's own memory and the network stack — the same security authority. There is no VM, IOMMU, or sandbox boundary crossed.
C:HConfidentiality impact, high
A use-after-free read of a released `struct net_device` yields a `struct net` pointer taken from reclaimed memory, which is then used to compute hashes and index the per-namespace metrics cache; attacker-groomed heap contents can be interpreted as kernel structures, enabling disclosure of kernel memory.
I:HIntegrity impact, high
The bogus `struct net` derived from the freed device is stored into `tm->tcpm_net` and drives `tcpm_new()`/`tcpm_suck_dst()` writes, so freed or attacker-controlled memory is treated as a live namespace object — a UAF of this class is leverageable for controlled kernel writes and control-flow hijack.
A:HAvailability impact, high
Dereferencing a freed `net_device` through `dev_net_rcu()` and then using the resulting garbage `struct net` pointer for `net_hash_mix()` and cache lookups leads to an oops or panic, taking down the whole system.