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

Look up another CVE · open CVE-2026-97524 in the interactive tracker

CVE-2026-97524

mptcp: avoid unneeded actions on subflow reset

7.5 EPSS 0.7% AV:N

Published 2026-09-25 (24 days ago) by the Linux kernel CNA. Subsystem net/mptcp. Debian urgency: not yet assigned.

What to do, per Debian release

Debian's own status for CVE-2026-97524 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 12bookwormfixedDLA-4841-1 · 2026-10-17 · text6.1.190-1Update the kernel and reboot. DLA-4841-1 shipped the fix on 2026-10-17, in 6.1.190-1. A running kernel keeps the old code until the machine restarts.
Debian 13trixiefixedDSA-6528-1 · 2026-09-29 · text6.12.111-1Update the kernel and reboot. DSA-6528-1 shipped the fix on 2026-09-29, in 6.12.111-1. A running kernel keeps the old code until the machine restarts.
Debian 14forkyfixed7.2.7-1Update the kernel and reboot. Fixed in 7.2.7-1. A running kernel keeps the old code until the machine restarts.
Debian unstablesidfixed7.2.7-1Update the kernel and reboot. Fixed in 7.2.7-1. A running kernel keeps the old code until the machine restarts.
Debian 12bookworm · linux-6.12fixedDLA-4817-1 · 2026-10-04 · text6.12.111-1~deb12u1Update the kernel and reboot. DLA-4817-1 shipped the fix on 2026-10-04, in 6.12.111-1~deb12u1. A running kernel keeps the old code until the machine restarts.

The vulnerability

What the bug is

Once in a blue moon, the mptcp receive path can recursively call mptcp_data_ready() via state change under unlucky error conditions, and then try to hold the data lock again. Break the recursion loop explicitly checking for the exceptional condition. Add a new flag instead of using an existing one like 'closing', to exit early in subflow_state_change(), and explicitly flush the RX queue at reset time. This avoids unneeded processing to check for available data -- calling get_mapping_status() and more on a dying subflow -- but also in error reporting and worker scheduling. Note that we must consume the currently peeked skb before invoking mptcp_dss_corruption to avoid consuming it again after the eventual reset has freed it.

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/mptcp/protocol.c
net/mptcp/protocol.h
net/mptcp/subflow.c

What this is
NETWORKING [MPTCP]MAINTAINERS section matched on net/mptcp/ · netdev@vger.kernel.org · Maintained

Check it on the machine

grep -w CONFIG_MPTCP /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, sid, bookworm · linux-6.12y
y
built into the kernel image on every flavour - only a patch removes it
Build switch
CONFIG_MPTCP

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
2026-09-25 (24 days ago)source
CVSS
7.5 high
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:Hsource recompute it
Attack vector
network (AV:N)source
EPSS
0.69%, higher than 51.7% of all CVEssource
CISA KEV
not listedthe KEV catalogue
Debian urgency
not yet assignedsource
Subsystem
net/mptcp

Upstream fixes

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

IntroducedFixed inCommit
5.10.2285.10.2716d669c740933
5.15.1695.15.22283a7dcdd2b10
6.1.1136.1.189a370e56024df
6.6.576.6.158196284138708
6.126.12.1114b7abdcb5ba8
6.126.18.53b2dbcc1ed48b
6.127.2.7ce7e4ede01ed
6.127.32b0f561f21b2
6.11.400

Debian advisories

AdvisoryDateShipped toDebian
DLA-4841-12026-10-17bookworm 6.1.190-1tracker
DLA-4817-12026-10-04bookworm 6.12.111-1~deb12u1tracker
DSA-6528-12026-09-29trixie 6.12.111-1tracker

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
A crafted MPTCP DSS option on a received TCP segment is the attacker-controlled input; it is parsed on the established RX path tcp_rcv_established → tcp_data_queue → subflow_data_ready → mptcp_data_ready → __mptcp_move_skbs_from_subflow, which calls mptcp_dss_corruption() and then the patched mptcp_subflow_reset()/subflow_state_change(). MPTCP/TCP is a routable IP protocol.
AC:LAttack complexity, low
The peer disables infinite fallback via MP_JOIN (mptcp_subflow_joined(); allow_join_initial_addr_port defaults to 1) or by filling msk->out_of_order_queue, then sends a DSS with data_len shorter than the skb plus another TCP-ofo segment so map_remaining < len in __mptcp_move_skbs_from_subflow() calls mptcp_subflow_reset() while ssk->sk_receive_queue is still occupied, making subflow_state_change() re-enter mptcp_data_ready().
PR:NPrivileges required, none
The DSS is processed in TCP receive softirq after an unauthenticated MP_CAPABLE handshake with an IPPROTO_MPTCP listener (or an outbound MPTCP client); no local account, capability, or application credential is checked on the path to mptcp_dss_corruption().
UI:NUser interaction, none
The attacker’s DSS segments are handled entirely in RX softirq on an existing MPTCP connection; no local user mount, file open, or other victim action is required.
S:UScope, unchanged
The recursive mptcp_data_lock hang and subflow teardown stay inside the victim kernel’s network stack; no VM, IOMMU, or sandbox boundary is crossed.
C:NConfidentiality impact, none
The defect is a nested spin_lock_bh on sk->sk_lock.slock from subflow_state_change() back into mptcp_data_ready(); it does not read attacker-chosen kernel memory or leak pointers.
I:NIntegrity impact, none
Pre-fix tcp_done() does not purge ssk->sk_receive_queue, and the nested mptcp_data_ready() never proceeds past the already-held slock, so there is no use-after-free, write primitive, or control-flow hijack.
A:HAvailability impact, high
mptcp_data_ready() already holds mptcp_data_lock (spin_lock_bh on sk->sk_lock.slock) when mptcp_dss_corruption() → mptcp_subflow_reset() → tcp_done() invokes subflow_state_change(), which re-enters mptcp_data_ready() and deadlocks the CPU in softirq (soft lockup).