{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2025-38552","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","state":"PUBLISHED","assignerShortName":"Linux","dateReserved":"2025-04-16T04:51:24.024Z","datePublished":"2025-08-16T11:34:20.455Z","dateUpdated":"2026-08-05T12:02:50.997Z"},"containers":{"cna":{"providerMetadata":{"orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux","dateUpdated":"2026-08-05T12:02:50.997Z"},"descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nmptcp: plug races between subflow fail and subflow creation\n\nWe have races similar to the one addressed by the previous patch between\nsubflow failing and additional subflow creation. They are just harder to\ntrigger.\n\nThe solution is similar. Use a separate flag to track the condition\n'socket state prevent any additional subflow creation' protected by the\nfallback lock.\n\nThe socket fallback makes such flag true, and also receiving or sending\nan MP_FAIL option.\n\nThe field 'allow_infinite_fallback' is now always touched under the\nrelevant lock, we can drop the ONCE annotation on write."}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:H","baseScore":9.4,"baseSeverity":"CRITICAL"},"scenarios":[{"lang":"en","value":"AV:N - The race is driven entirely by remote MPTCP peer traffic — an MP_FAIL TCP option parsed in `mptcp_incoming_options()` racing against an MP_JOIN subflow handshake completing in `mptcp_finish_join()`, both in softirq packet-receive context. No local access is needed; any host reaching an MPTCP-enabled listener (or an MPTCP client connecting to a malicious server) can trigger it.\nAC:L - The attacker generates and times both sides of the race itself — it sends the MP_FAIL option on the initial subflow while concurrently completing MP_JOIN handshakes for additional subflows, and can repeat this unboundedly across many parallel connections. Nothing in the trigger depends on state outside the attacker's control, so despite the window being narrow this is attacker-created, not attacker-independent.\nPR:N - The only requirement is a fully established MPTCP connection to the target, which any unauthenticated peer can create; the default in-kernel path manager (`subflows_max = 2`, `allow_join_initial_addr_port = 1`) accepts the extra MP_JOIN subflows with no administrative configuration. No credentials on the victim are needed at any point.\nUI:N - Everything happens inside the kernel's TCP/MPTCP receive and transmit paths on packets the attacker sends; no action by a local user or administrator is required.\nS:U - The corrupted state and its consequences are confined to the kernel's own MPTCP socket and the connection it serves — there is no crossing into another security authority such as a VM, IOMMU, or sandbox boundary.\nC:L - The `WARN_ON_ONCE` in `__mptcp_do_fallback()` is reachable remotely and dumps register contents, kernel text/stack addresses and a call trace to the kernel log, leaking KASLR-relevant pointers; additionally the corrupted fallback state makes the receive path splice subflow data into the msk stream using stale mapping metadata with DSS and checksum validation skipped. There is no arbitrary kernel-memory read primitive, so the disclosure is bounded.\nI:H - The bug breaks the core MPTCP invariant that fallback happens only on a single-subflow connection, so the kernel reassembles the byte stream from multiple subflows without DSS mapping or checksum validation and force-advances `msk->snd_una` to `snd_nxt`, silently discarding never-delivered data as acknowledged. The application is handed a corrupted stream and told its writes succeeded, with no error indication — a complete loss of integrity for the data carried over the connection, on top of the violated kernel socket-state invariants.\nA:H - Winning the race hits `WARN_ON_ONCE(!READ_ONCE(msk->allow_infinite_fallback))` in softirq context on all affected trees, which is an immediate kernel panic on the widely deployed `panic_on_warn=1` configurations; even without it the connection is left permanently desynchronized, and once `msk->first` is gone `mptcp_sched_get_send()` returns -EINVAL so the socket wedges with queued data pinning memory, repeatable across unlimited connections."}]}],"affected":[{"product":"Linux","vendor":"Linux","defaultStatus":"unaffected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["net/mptcp/pm.c","net/mptcp/protocol.c","net/mptcp/protocol.h","net/mptcp/subflow.c"],"versions":[{"version":"478d770008b03ed9d74bdc8add2315b7fd124ecc","lessThan":"c476d627584b7589a134a8b48dd5c6639e4401c5","status":"affected","versionType":"git"},{"version":"478d770008b03ed9d74bdc8add2315b7fd124ecc","lessThan":"7c96d519ee15a130842a6513530b4d20acd2bfcd","status":"affected","versionType":"git"},{"version":"478d770008b03ed9d74bdc8add2315b7fd124ecc","lessThan":"f81b6fbe13c7fc413b5158cdffc6a59391a2a8db","status":"affected","versionType":"git"},{"version":"478d770008b03ed9d74bdc8add2315b7fd124ecc","lessThan":"659da22dee5ff316ba63bdaeeac7b58b5442f6c2","status":"affected","versionType":"git"},{"version":"478d770008b03ed9d74bdc8add2315b7fd124ecc","lessThan":"def5b7b2643ebba696fc60ddf675dca13f073486","status":"affected","versionType":"git"}]},{"product":"Linux","vendor":"Linux","defaultStatus":"affected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["net/mptcp/pm.c","net/mptcp/protocol.c","net/mptcp/protocol.h","net/mptcp/subflow.c"],"versions":[{"version":"5.15","status":"affected"},{"version":"0","lessThan":"5.15","status":"unaffected","versionType":"semver"},{"version":"6.1.149","lessThanOrEqual":"6.1.*","status":"unaffected","versionType":"semver"},{"version":"6.6.101","lessThanOrEqual":"6.6.*","status":"unaffected","versionType":"semver"},{"version":"6.12.40","lessThanOrEqual":"6.12.*","status":"unaffected","versionType":"semver"},{"version":"6.15.8","lessThanOrEqual":"6.15.*","status":"unaffected","versionType":"semver"},{"version":"6.16","lessThanOrEqual":"*","status":"unaffected","versionType":"original_commit_for_fix"}]}],"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.15","versionEndExcluding":"6.1.149"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.15","versionEndExcluding":"6.6.101"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.15","versionEndExcluding":"6.12.40"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.15","versionEndExcluding":"6.15.8"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.15","versionEndExcluding":"6.16"}]}]}],"references":[{"url":"https://git.kernel.org/stable/c/c476d627584b7589a134a8b48dd5c6639e4401c5"},{"url":"https://git.kernel.org/stable/c/7c96d519ee15a130842a6513530b4d20acd2bfcd"},{"url":"https://git.kernel.org/stable/c/f81b6fbe13c7fc413b5158cdffc6a59391a2a8db"},{"url":"https://git.kernel.org/stable/c/659da22dee5ff316ba63bdaeeac7b58b5442f6c2"},{"url":"https://git.kernel.org/stable/c/def5b7b2643ebba696fc60ddf675dca13f073486"}],"title":"mptcp: plug races between subflow fail and subflow creation","x_generator":{"engine":"bippy-1.2.0"}},"adp":[{"title":"CVE Program Container","references":[{"url":"https://lists.debian.org/debian-lts-announce/2025/10/msg00008.html"}],"providerMetadata":{"orgId":"af854a3a-2127-422b-91ae-364da2661108","shortName":"CVE","dateUpdated":"2025-11-03T17:39:44.761Z"}},{"x_adpType":"supplier","providerMetadata":{"orgId":"0b142b55-0307-4c5a-b3c9-f314f3fb7c5e","shortName":"siemens-SADP","dateUpdated":"2026-05-12T12:05:14.245Z"},"affected":[{"vendor":"Siemens","product":"SIMATIC CN 4100","versions":[{"status":"affected","version":"0","lessThan":"V5.0","versionType":"custom"}],"defaultStatus":"unknown"}],"references":[{"url":"https://cert-portal.siemens.com/productcert/html/ssa-032379.html"}]}]}}