CVE-2025-38552 (GCVE-0-2025-38552)
Vulnerability from cvelistv5
Published
2025-08-16 11:34
Modified
2026-08-05 12:02
Severity ?
Summary
In the Linux kernel, the following vulnerability has been resolved: mptcp: plug races between subflow fail and subflow creation We have races similar to the one addressed by the previous patch between subflow failing and additional subflow creation. They are just harder to trigger. The solution is similar. Use a separate flag to track the condition 'socket state prevent any additional subflow creation' protected by the fallback lock. The socket fallback makes such flag true, and also receiving or sending an MP_FAIL option. The field 'allow_infinite_fallback' is now always touched under the relevant lock, we can drop the ONCE annotation on write.
Impacted products
Vendor Product Version
Linux Linux Version: 478d770008b03ed9d74bdc8add2315b7fd124ecc
Version: 478d770008b03ed9d74bdc8add2315b7fd124ecc
Version: 478d770008b03ed9d74bdc8add2315b7fd124ecc
Version: 478d770008b03ed9d74bdc8add2315b7fd124ecc
Version: 478d770008b03ed9d74bdc8add2315b7fd124ecc
Create a notification for this product.
Show details on NVD website


{
  "containers": {
    "adp": [
      {
        "providerMetadata": {
          "dateUpdated": "2025-11-03T17:39:44.761Z",
          "orgId": "af854a3a-2127-422b-91ae-364da2661108",
          "shortName": "CVE"
        },
        "references": [
          {
            "url": "https://lists.debian.org/debian-lts-announce/2025/10/msg00008.html"
          }
        ],
        "title": "CVE Program Container"
      },
      {
        "affected": [
          {
            "defaultStatus": "unknown",
            "product": "SIMATIC CN 4100",
            "vendor": "Siemens",
            "versions": [
              {
                "lessThan": "V5.0",
                "status": "affected",
                "version": "0",
                "versionType": "custom"
              }
            ]
          }
        ],
        "providerMetadata": {
          "dateUpdated": "2026-05-12T12:05:14.245Z",
          "orgId": "0b142b55-0307-4c5a-b3c9-f314f3fb7c5e",
          "shortName": "siemens-SADP"
        },
        "references": [
          {
            "url": "https://cert-portal.siemens.com/productcert/html/ssa-032379.html"
          }
        ],
        "x_adpType": "supplier"
      }
    ],
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "net/mptcp/pm.c",
            "net/mptcp/protocol.c",
            "net/mptcp/protocol.h",
            "net/mptcp/subflow.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "c476d627584b7589a134a8b48dd5c6639e4401c5",
              "status": "affected",
              "version": "478d770008b03ed9d74bdc8add2315b7fd124ecc",
              "versionType": "git"
            },
            {
              "lessThan": "7c96d519ee15a130842a6513530b4d20acd2bfcd",
              "status": "affected",
              "version": "478d770008b03ed9d74bdc8add2315b7fd124ecc",
              "versionType": "git"
            },
            {
              "lessThan": "f81b6fbe13c7fc413b5158cdffc6a59391a2a8db",
              "status": "affected",
              "version": "478d770008b03ed9d74bdc8add2315b7fd124ecc",
              "versionType": "git"
            },
            {
              "lessThan": "659da22dee5ff316ba63bdaeeac7b58b5442f6c2",
              "status": "affected",
              "version": "478d770008b03ed9d74bdc8add2315b7fd124ecc",
              "versionType": "git"
            },
            {
              "lessThan": "def5b7b2643ebba696fc60ddf675dca13f073486",
              "status": "affected",
              "version": "478d770008b03ed9d74bdc8add2315b7fd124ecc",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "net/mptcp/pm.c",
            "net/mptcp/protocol.c",
            "net/mptcp/protocol.h",
            "net/mptcp/subflow.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "5.15"
            },
            {
              "lessThan": "5.15",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.1.*",
              "status": "unaffected",
              "version": "6.1.149",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.6.*",
              "status": "unaffected",
              "version": "6.6.101",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.40",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.15.*",
              "status": "unaffected",
              "version": "6.15.8",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "6.16",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.1.149",
                  "versionStartIncluding": "5.15",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.6.101",
                  "versionStartIncluding": "5.15",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.40",
                  "versionStartIncluding": "5.15",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.15.8",
                  "versionStartIncluding": "5.15",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.16",
                  "versionStartIncluding": "5.15",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "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\u0027socket state prevent any additional subflow creation\u0027 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 \u0027allow_infinite_fallback\u0027 is now always touched under the\nrelevant lock, we can drop the ONCE annotation on write."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 9.4,
            "baseSeverity": "CRITICAL",
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:N - The race is driven entirely by remote MPTCP peer traffic \u2014 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 \u2014 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\u0027s 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\u0027s 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\u0027s own MPTCP socket and the connection it serves \u2014 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-\u003esnd_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 \u2014 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-\u003eallow_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-\u003efirst` is gone `mptcp_sched_get_send()` returns -EINVAL so the socket wedges with queued data pinning memory, repeatable across unlimited connections."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-08-05T12:02:50.997Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "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"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2025-38552",
    "datePublished": "2025-08-16T11:34:20.455Z",
    "dateReserved": "2025-04-16T04:51:24.024Z",
    "dateUpdated": "2026-08-05T12:02:50.997Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2"
}


Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Sightings

Author Source Type Date

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
  • Confirmed: The vulnerability is confirmed from an analyst perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
  • Patched: This vulnerability was successfully patched by the user reporting the sighting.
  • Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
  • Not confirmed: The user expresses doubt about the veracity of the vulnerability.
  • Not patched: This vulnerability was not successfully patched by the user reporting the sighting.


Loading…

Loading…