CVE-2025-38252 (GCVE-0-2025-38252)

Vulnerability from cvelistv5 – Published: 2025-07-09 10:42 – Updated: 2026-08-05 12:00
VLAI
Title
cxl/ras: Fix CPER handler device confusion
Summary
In the Linux kernel, the following vulnerability has been resolved: cxl/ras: Fix CPER handler device confusion By inspection, cxl_cper_handle_prot_err() is making a series of fragile assumptions that can lead to crashes: 1/ It assumes that endpoints identified in the record are a CXL-type-3 device, nothing guarantees that. 2/ It assumes that the device is bound to the cxl_pci driver, nothing guarantees that. 3/ Minor, it holds the device lock over the switch-port tracing for no reason as the trace is 100% generated from data in the record. Correct those by checking that the PCIe endpoint parents a cxl_memdev before assuming the format of the driver data, and move the lock to where it is required. Consequently this also makes the implementation ready for CXL accelerators that are not bound to cxl_pci.
Assigner
Impacted products
Vendor Product Version
Linux Linux Affected: 36f257e3b0ba904f5a4e7fa8dafaa60e88cdd28c , < 4bcb8dd36e9e3fad6c22862ac5b6993df838309b (git)
Affected: 36f257e3b0ba904f5a4e7fa8dafaa60e88cdd28c , < 3c70ec71abdaf4e4fa48cd8fdfbbd864d78235a8 (git)
Create a notification for this product.
Linux Linux Affected: 6.15
Unaffected: 0 , < 6.15 (semver)
Unaffected: 6.15.5 , ≤ 6.15.* (semver)
Unaffected: 6.16 , ≤ * (original_commit_for_fix)
Create a notification for this product.
Show details on NVD website

{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "drivers/cxl/core/ras.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "4bcb8dd36e9e3fad6c22862ac5b6993df838309b",
              "status": "affected",
              "version": "36f257e3b0ba904f5a4e7fa8dafaa60e88cdd28c",
              "versionType": "git"
            },
            {
              "lessThan": "3c70ec71abdaf4e4fa48cd8fdfbbd864d78235a8",
              "status": "affected",
              "version": "36f257e3b0ba904f5a4e7fa8dafaa60e88cdd28c",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "drivers/cxl/core/ras.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "6.15"
            },
            {
              "lessThan": "6.15",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.15.*",
              "status": "unaffected",
              "version": "6.15.5",
              "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.15.5",
                  "versionStartIncluding": "6.15",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.16",
                  "versionStartIncluding": "6.15",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\ncxl/ras: Fix CPER handler device confusion\n\nBy inspection, cxl_cper_handle_prot_err() is making a series of fragile\nassumptions that can lead to crashes:\n\n1/ It assumes that endpoints identified in the record are a CXL-type-3\n   device, nothing guarantees that.\n\n2/ It assumes that the device is bound to the cxl_pci driver, nothing\n   guarantees that.\n\n3/ Minor, it holds the device lock over the switch-port tracing for no\n   reason as the trace is 100% generated from data in the record.\n\nCorrect those by checking that the PCIe endpoint parents a cxl_memdev\nbefore assuming the format of the driver data, and move the lock to where\nit is required. Consequently this also makes the implementation ready for\nCXL accelerators that are not bound to cxl_pci."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 7.8,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:L - The vulnerable handler is driven by ACPI APEI/GHES CXL Protocol Error records processed entirely on the local host; there is no network- or peer-supplied data path. The most severe reachable trigger is local \u2014 a VM tenant or local user driving an assigned/attached CXL endpoint into protocol errors, or the local EINJ CXL protocol-error injection path.\nAC:L - Once a CXL Protocol Error record naming a non-cxl_pci endpoint is processed, the type confusion is deterministic \u2014 no race to win and no memory-layout condition to guess. The endpoint branch is taken for every non-port PCIe device and `pci_get_drvdata()` is blindly cast, so the attacker reliably reaches the bad dereference.\nPR:L - No capability, credential, or privilege check exists anywhere on the path from `ghes_do_proc()` through `cxl_cper_post_prot_err()` to `cxl_cper_handle_prot_err()`. An unprivileged-equivalent actor \u2014 a guest tenant controlling a passed-through CXL/PCIe device, or a local user with access to a CXL device that can be driven into link errors \u2014 suffices; host root is not required.\nUI:N - The record is consumed automatically by the GHES notification path and the CXL workqueue with no victim action. No mount, file open, or any other user step is involved.\nS:U - The type confusion and its consequences are confined to the kernel\u0027s own memory and security authority. No IOMMU, hypervisor, or sandbox boundary is bypassed by the defect itself.\nC:H - The confused `cxlmd` pointer is dereferenced by `dev_name()` and `cxlmd-\u003ecxlds-\u003eserial`, copying strings and a 64-bit value read from an unvalidated kernel address into the ftrace ring buffer. That is an unbounded out-of-bounds read that leaks kernel memory contents and pointer-derived data.\nI:H - This is a type confusion \u2014 another driver\u0027s private structure is reinterpreted as `struct cxl_dev_state`, with the interpreted pointer chased through multiple levels. Per type-confusion handling, the corrupted interpretation of driver-owned state and the falsified RAS telemetry it produces are treated as a high integrity impact.\nA:H - Dereferencing a garbage `cxlmd` taken from a foreign driver\u0027s private data reliably faults, producing a kernel oops in the `cxl_cper_prot_err_work_fn` workqueue context. Repeated error records reproduce the crash, giving a full denial of service."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-08-05T12:00:44.757Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/4bcb8dd36e9e3fad6c22862ac5b6993df838309b"
        },
        {
          "url": "https://git.kernel.org/stable/c/3c70ec71abdaf4e4fa48cd8fdfbbd864d78235a8"
        }
      ],
      "title": "cxl/ras: Fix CPER handler device confusion",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2025-38252",
    "datePublished": "2025-07-09T10:42:31.477Z",
    "dateReserved": "2025-04-16T04:51:23.997Z",
    "dateUpdated": "2026-08-05T12:00:44.757Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2025-38252",
      "date": "2026-08-06",
      "epss": "0.00129",
      "percentile": "0.02975"
    },
    "nvd": "{\"cve\":{\"id\":\"CVE-2025-38252\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2025-07-09T11:15:27.430\",\"lastModified\":\"2026-07-30T06:23:04.500\",\"vulnStatus\":\"Modified\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\ncxl/ras: Fix CPER handler device confusion\\n\\nBy inspection, cxl_cper_handle_prot_err() is making a series of fragile\\nassumptions that can lead to crashes:\\n\\n1/ It assumes that endpoints identified in the record are a CXL-type-3\\n   device, nothing guarantees that.\\n\\n2/ It assumes that the device is bound to the cxl_pci driver, nothing\\n   guarantees that.\\n\\n3/ Minor, it holds the device lock over the switch-port tracing for no\\n   reason as the trace is 100% generated from data in the record.\\n\\nCorrect those by checking that the PCIe endpoint parents a cxl_memdev\\nbefore assuming the format of the driver data, and move the lock to where\\nit is required. Consequently this also makes the implementation ready for\\nCXL accelerators that are not bound to cxl_pci.\"},{\"lang\":\"es\",\"value\":\"En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: cxl/ras: Corregir confusi\u00f3n de dispositivo del controlador CPER Por inspecci\u00f3n, cxl_cper_handle_prot_err() est\u00e1 haciendo una serie de suposiciones fr\u00e1giles que pueden llevar a ca\u00eddas: 1/ Supone que los endpoints identificados en el registro son un dispositivo CXL-type-3, nada lo garantiza. 2/ Supone que el dispositivo est\u00e1 enlazado al controlador cxl_pci, nada lo garantiza. 3/ Leve, mantiene el bloqueo del dispositivo sobre el seguimiento del puerto del conmutador sin ninguna raz\u00f3n ya que el seguimiento se genera 100% a partir de los datos en el registro. Corrija aquellos comprobando que el endpoint PCIe engendre un cxl_memdev antes de asumir el formato de los datos del controlador y mueva el bloqueo a donde se requiere. En consecuencia, esto tambi\u00e9n hace que la implementaci\u00f3n est\u00e9 lista para aceleradores CXL que no est\u00e1n enlazados a cxl_pci.\"}],\"affected\":[{\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"affectedData\":[{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"unaffected\",\"programFiles\":[\"drivers/cxl/core/ras.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"36f257e3b0ba904f5a4e7fa8dafaa60e88cdd28c\",\"lessThan\":\"4bcb8dd36e9e3fad6c22862ac5b6993df838309b\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"36f257e3b0ba904f5a4e7fa8dafaa60e88cdd28c\",\"lessThan\":\"3c70ec71abdaf4e4fa48cd8fdfbbd864d78235a8\",\"versionType\":\"git\",\"status\":\"affected\"}]},{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"affected\",\"programFiles\":[\"drivers/cxl/core/ras.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"6.15\",\"status\":\"affected\"},{\"version\":\"0\",\"lessThan\":\"6.15\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.15.5\",\"lessThanOrEqual\":\"6.15.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.16\",\"lessThanOrEqual\":\"*\",\"versionType\":\"original_commit_for_fix\",\"status\":\"unaffected\"}]}]}],\"metrics\":{\"cvssMetricV31\":[{\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"type\":\"Secondary\",\"cvssData\":{\"version\":\"3.1\",\"vectorString\":\"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H\",\"baseScore\":7.8,\"baseSeverity\":\"HIGH\",\"attackVector\":\"LOCAL\",\"attackComplexity\":\"LOW\",\"privilegesRequired\":\"LOW\",\"userInteraction\":\"NONE\",\"scope\":\"UNCHANGED\",\"confidentialityImpact\":\"HIGH\",\"integrityImpact\":\"HIGH\",\"availabilityImpact\":\"HIGH\"},\"exploitabilityScore\":1.8,\"impactScore\":5.9},{\"source\":\"nvd@nist.gov\",\"type\":\"Primary\",\"cvssData\":{\"version\":\"3.1\",\"vectorString\":\"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H\",\"baseScore\":5.5,\"baseSeverity\":\"MEDIUM\",\"attackVector\":\"LOCAL\",\"attackComplexity\":\"LOW\",\"privilegesRequired\":\"LOW\",\"userInteraction\":\"NONE\",\"scope\":\"UNCHANGED\",\"confidentialityImpact\":\"NONE\",\"integrityImpact\":\"NONE\",\"availabilityImpact\":\"HIGH\"},\"exploitabilityScore\":1.8,\"impactScore\":3.6}]},\"weaknesses\":[{\"source\":\"nvd@nist.gov\",\"type\":\"Primary\",\"description\":[{\"lang\":\"en\",\"value\":\"NVD-CWE-noinfo\"}]}],\"configurations\":[{\"nodes\":[{\"operator\":\"OR\",\"negate\":false,\"cpeMatch\":[{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\",\"versionStartIncluding\":\"6.15\",\"versionEndExcluding\":\"6.15.5\",\"matchCriteriaId\":\"F4823E88-411C-4CCD-AA8D-3917D070E873\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:6.16:rc1:*:*:*:*:*:*\",\"matchCriteriaId\":\"6D4894DB-CCFE-4602-B1BF-3960B2E19A01\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:6.16:rc2:*:*:*:*:*:*\",\"matchCriteriaId\":\"09709862-E348-4378-8632-5A7813EDDC86\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:6.16:rc3:*:*:*:*:*:*\",\"matchCriteriaId\":\"415BF58A-8197-43F5-B3D7-D1D63057A26E\"}]}]}],\"references\":[{\"url\":\"https://git.kernel.org/stable/c/3c70ec71abdaf4e4fa48cd8fdfbbd864d78235a8\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"tags\":[\"Patch\"]},{\"url\":\"https://git.kernel.org/stable/c/4bcb8dd36e9e3fad6c22862ac5b6993df838309b\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"tags\":[\"Patch\"]}]}}",
    "redhat_vex": {
      "aggregate_severity": "None",
      "current_release_date": "2026-06-30T10:18:03+00:00",
      "cve": "CVE-2025-38252",
      "id": "CVE-2025-38252",
      "initial_release_date": "2025-07-09T00:00:00+00:00",
      "product_status:known_not_affected": "274",
      "source": "Red Hat CSAF VEX",
      "status": "final",
      "title": "kernel: cxl/ras: Fix CPER handler device confusion",
      "url": "https://security.access.redhat.com/data/csaf/v2/vex/2025/cve-2025-38252.json",
      "version": "3"
    },
    "suse_vex": {
      "aggregate_severity": "moderate",
      "current_release_date": "2026-05-13T04:11:35Z",
      "cve": "CVE-2025-38252",
      "id": "CVE-2025-38252",
      "initial_release_date": "2025-07-09T23:23:02Z",
      "product_status:known_not_affected": "345",
      "source": "SUSE CSAF VEX",
      "status": "interim",
      "title": "SUSE CVE CVE-2025-38252",
      "url": "https://ftp.suse.com/pub/projects/security/csaf-vex/cve-2025-38252.json",
      "version": "4"
    }
  }
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.

Loading…

Detection rules are retrieved from Rulezet.

Loading…

Loading…

Loading…