GCVE Workshop - 22 September 2026 (14:00-18:00), Luxembourg Before The Vulnopticon Conference - Registration

CVE-2026-89571 (GCVE-0-2026-89571)

Vulnerability from cvelistv5 – Published: 2026-09-11 19:44 – Updated: 2026-09-13 06:31
VLAI
Title
cxl/features: bound fwctl command payload to the input buffer
Summary
In the Linux kernel, the following vulnerability has been resolved: cxl/features: bound fwctl command payload to the input buffer fwctl_cmd_rpc() copies cmd->in_len bytes into inbuf = kvzalloc(cmd->in_len) and passes inbuf and in_len to ->fw_rpc(). The CXL callback cxlctl_fw_rpc() ignores in_len and never checks the user-controlled op_size against it. cxlctl_set_feature() bounds op_size only from below (op_size <= sizeof(feat_in->hdr)) and then reads op_size - sizeof(hdr) bytes from feat_in->feat_data via cxl_set_feature(). With a small in_len and a large op_size the first memcpy() already reads past the kvzalloc(in_len) buffer; the out-of-bounds bytes are placed in the mailbox payload and sent to the device, and a large enough op_size can walk into unmapped memory and oops the kernel. The Get paths pin op_size to a fixed size but likewise read the input struct without checking in_len. Reject, at the single dispatch point, any request whose fixed header plus op_size does not fit in the copied-in buffer. The lower-bound test guards the subtraction and ensures op_size was copied in before it is read.
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: eb5dfcb9e36d0e46089fec777d911313c1876fa3 , < 14d52c15d5d99477b20a2d61fe36f347080da6cd (git)
Affected: eb5dfcb9e36d0e46089fec777d911313c1876fa3 , < d8957545fe96f7905791c937758ebfc1ae1e5b17 (git)
Affected: eb5dfcb9e36d0e46089fec777d911313c1876fa3 , < f687394af983df5660b6afae7e0d06969f3af206 (git)
guessed Create a notification for this product.
Linux Linux Affected: 6.15
Unaffected: 0 , < 6.15 (semver)
Unaffected: 6.18.50 , ≤ 6.18.* (semver)
Unaffected: 7.2.4 , ≤ 7.2.* (semver)
Unaffected: 7.3-rc1 , ≤ * (original_commit_for_fix)
guessed Create a notification for this product.
Show details on NVD website

{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "drivers/cxl/core/features.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "14d52c15d5d99477b20a2d61fe36f347080da6cd",
              "status": "affected",
              "version": "eb5dfcb9e36d0e46089fec777d911313c1876fa3",
              "versionType": "git"
            },
            {
              "lessThan": "d8957545fe96f7905791c937758ebfc1ae1e5b17",
              "status": "affected",
              "version": "eb5dfcb9e36d0e46089fec777d911313c1876fa3",
              "versionType": "git"
            },
            {
              "lessThan": "f687394af983df5660b6afae7e0d06969f3af206",
              "status": "affected",
              "version": "eb5dfcb9e36d0e46089fec777d911313c1876fa3",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "drivers/cxl/core/features.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.18.*",
              "status": "unaffected",
              "version": "6.18.50",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.2.*",
              "status": "unaffected",
              "version": "7.2.4",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.3-rc1",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18.50",
                  "versionStartIncluding": "6.15",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2.4",
                  "versionStartIncluding": "6.15",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.3-rc1",
                  "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/features: bound fwctl command payload to the input buffer\n\nfwctl_cmd_rpc() copies cmd-\u003ein_len bytes into inbuf = kvzalloc(cmd-\u003ein_len)\nand passes inbuf and in_len to -\u003efw_rpc(). The CXL callback cxlctl_fw_rpc()\nignores in_len and never checks the user-controlled op_size against it.\n\ncxlctl_set_feature() bounds op_size only from below\n(op_size \u003c= sizeof(feat_in-\u003ehdr)) and then reads op_size - sizeof(hdr)\nbytes from feat_in-\u003efeat_data via cxl_set_feature(). With a small in_len\nand a large op_size the first memcpy() already reads past the\nkvzalloc(in_len) buffer; the out-of-bounds bytes are placed in the mailbox\npayload and sent to the device, and a large enough op_size can walk into\nunmapped memory and oops the kernel. The Get paths pin op_size to a fixed\nsize but likewise read the input struct without checking in_len.\n\nReject, at the single dispatch point, any request whose fixed header plus\nop_size does not fit in the copied-in buffer. The lower-bound test guards\nthe subtraction and ensures op_size was copied in before it is read."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 7.1,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:L - The bug is reached only via local ioctl(FWCTL_RPC) on /dev/fwctl/fwctlN through fwctl_fops_ioctl()-\u003efwctl_cmd_rpc()-\u003ecxlctl_fw_rpc(); CXL features/fwctl has no network, adjacent-radio, or physical-bus entry point.\nAC:L - The attacker fully controls fwctl_rpc.in_len and fwctl_rpc_cxl.op_size; a short in_len with a large op_size, or in_len=0, deterministically over-reads the kvzalloc buffer or dereferences ZERO_SIZE_PTR. No race or attacker-uncontrollable layout is required.\nPR:L - GET commands run at FWCTL_RPC_CONFIGURATION with no capability check, and SET_FEATURE for reset-effect features needs only FWCTL_RPC_DEBUG_WRITE (no CAP_SYS_RAWIO). Per CNA fwctl precedent, /dev/fwctl access is routinely granted to management/VMM users without init-namespace root.\nUI:N - The attacker opens the fwctl device and issues the RPC ioctl themselves; no victim action such as mounting a filesystem or opening a file is required.\nS:U - The heap over-read, mailbox copy, and any oops stay inside the host kernel CXL/fwctl code. This is ordinary same-host kernel impact, not a VM escape, IOMMU bypass, or other changed-scope boundary.\nC:H - cxl_set_feature() memcpy()s attacker-chosen op_size bytes from past the kvzalloc(in_len) buffer into the CXL mailbox and to the device; that unbounded kernel-heap over-read is C:H per kernel CNA guidance, and GET_FEATURE can return stored feature data including leaked heap.\nI:N - The defect is a read-only over-read into a newly allocated mailbox buffer sent to the device; there is no kernel out-of-bounds write, use-after-free, or control-flow hijack primitive.\nA:H - A large op_size walks from the short kvzalloc buffer into unmapped memory and oopses, and in_len=0 makes kvzalloc return ZERO_SIZE_PTR so reading opcode faults; either path panics the kernel and is repeatable at will."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-09-13T06:31:09.007Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/14d52c15d5d99477b20a2d61fe36f347080da6cd"
        },
        {
          "url": "https://git.kernel.org/stable/c/d8957545fe96f7905791c937758ebfc1ae1e5b17"
        },
        {
          "url": "https://git.kernel.org/stable/c/f687394af983df5660b6afae7e0d06969f3af206"
        }
      ],
      "title": "cxl/features: bound fwctl command payload to the input buffer",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-89571",
    "datePublished": "2026-09-11T19:44:40.328Z",
    "dateReserved": "2026-09-11T19:38:34.726Z",
    "dateUpdated": "2026-09-13T06:31:09.007Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-89571",
      "date": "2026-09-16",
      "epss": "0.00124",
      "percentile": "0.02438"
    },
    "nvd": "{\"cve\":{\"id\":\"CVE-2026-89571\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2026-09-11T20:19:41.160\",\"lastModified\":\"2026-09-13T07:17:23.097\",\"vulnStatus\":\"Received\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\ncxl/features: bound fwctl command payload to the input buffer\\n\\nfwctl_cmd_rpc() copies cmd-\u003ein_len bytes into inbuf = kvzalloc(cmd-\u003ein_len)\\nand passes inbuf and in_len to -\u003efw_rpc(). The CXL callback cxlctl_fw_rpc()\\nignores in_len and never checks the user-controlled op_size against it.\\n\\ncxlctl_set_feature() bounds op_size only from below\\n(op_size \u003c= sizeof(feat_in-\u003ehdr)) and then reads op_size - sizeof(hdr)\\nbytes from feat_in-\u003efeat_data via cxl_set_feature(). With a small in_len\\nand a large op_size the first memcpy() already reads past the\\nkvzalloc(in_len) buffer; the out-of-bounds bytes are placed in the mailbox\\npayload and sent to the device, and a large enough op_size can walk into\\nunmapped memory and oops the kernel. The Get paths pin op_size to a fixed\\nsize but likewise read the input struct without checking in_len.\\n\\nReject, at the single dispatch point, any request whose fixed header plus\\nop_size does not fit in the copied-in buffer. The lower-bound test guards\\nthe subtraction and ensures op_size was copied in before it is read.\"}],\"affected\":[{\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"affectedData\":[{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"unaffected\",\"programFiles\":[\"drivers/cxl/core/features.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"eb5dfcb9e36d0e46089fec777d911313c1876fa3\",\"lessThan\":\"14d52c15d5d99477b20a2d61fe36f347080da6cd\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"eb5dfcb9e36d0e46089fec777d911313c1876fa3\",\"lessThan\":\"d8957545fe96f7905791c937758ebfc1ae1e5b17\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"eb5dfcb9e36d0e46089fec777d911313c1876fa3\",\"lessThan\":\"f687394af983df5660b6afae7e0d06969f3af206\",\"versionType\":\"git\",\"status\":\"affected\"}]},{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"affected\",\"programFiles\":[\"drivers/cxl/core/features.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.18.50\",\"lessThanOrEqual\":\"6.18.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"7.2.4\",\"lessThanOrEqual\":\"7.2.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"7.3-rc1\",\"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:N/A:H\",\"baseScore\":7.1,\"baseSeverity\":\"HIGH\",\"attackVector\":\"LOCAL\",\"attackComplexity\":\"LOW\",\"privilegesRequired\":\"LOW\",\"userInteraction\":\"NONE\",\"scope\":\"UNCHANGED\",\"confidentialityImpact\":\"HIGH\",\"integrityImpact\":\"NONE\",\"availabilityImpact\":\"HIGH\"},\"exploitabilityScore\":1.8,\"impactScore\":5.2}]},\"references\":[{\"url\":\"https://git.kernel.org/stable/c/14d52c15d5d99477b20a2d61fe36f347080da6cd\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/d8957545fe96f7905791c937758ebfc1ae1e5b17\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/f687394af983df5660b6afae7e0d06969f3af206\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"}]}}",
    "redhat_vex": {
      "aggregate_severity": "Moderate",
      "current_release_date": "2026-09-13T06:58:06+00:00",
      "cve": "CVE-2026-89571",
      "id": "CVE-2026-89571",
      "initial_release_date": "2026-09-11T19:44:40.328000+00:00",
      "product_status:known_affected": "2",
      "source": "Red Hat CSAF VEX",
      "status": "final",
      "title": "kernel: Linux kernel: Out-of-bounds read in CXL features leads to denial of service",
      "url": "https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-89571.json",
      "version": "3"
    },
    "suse_vex": {
      "aggregate_severity": "moderate",
      "current_release_date": "2026-09-16T00:01:59Z",
      "cve": "CVE-2026-89571",
      "id": "CVE-2026-89571",
      "initial_release_date": "2026-09-12T16:25:53Z",
      "product_status:known_not_affected": "353",
      "source": "SUSE CSAF VEX",
      "status": "interim",
      "title": "SUSE CVE CVE-2026-89571",
      "url": "https://ftp.suse.com/pub/projects/security/csaf-vex/cve-2026-89571.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…

Related by attack behaviour

Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.


Loading…