CVE-2026-93190 (GCVE-0-2026-93190)

Vulnerability from cvelistv5 – Published: 2026-09-17 16:12 – Updated: 2026-09-18 17:56
VLAI
Title
platform/chrome: cros_ec_typec: Reject out-of-bounds PD cap count
Summary
In the Linux kernel, the following vulnerability has been resolved: platform/chrome: cros_ec_typec: Reject out-of-bounds PD cap count cros_typec_register_partner_pdos() copies the partner PDOs from the EC TYPEC_STATUS response into the fixed caps_desc.pdo[PDO_MAX_OBJECTS] array. memcpy(caps_desc.pdo, resp->source_cap_pdos, sizeof(u32) * resp->source_cap_count); ... memcpy(caps_desc.pdo, resp->sink_cap_pdos, sizeof(u32) * resp->sink_cap_count); PDO_MAX_OBJECTS is 7. source_cap_count and sink_cap_count are u8 fields from the EC. The only check is that they are not both zero. If either is larger than 7, the memcpy writes past the end of the array on the stack. A count of 255 overflows it by about 1 KB. The EC source arrays are only seven entries wide. A larger count reads past them too. The ChromeOS EC firmware caps these counts today, so a compliant setup does not hit this. The kernel should still validate these values rather than trust them. Validate the counts in cros_typec_register_partner_pdos() next to the memcpy. Skip the PDO registration if either count is above PDO_MAX_OBJECTS. The rest of cros_typec_handle_status() still runs so events are handled and cleared.
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: 348a2e8c93d3ca622cf1b293cd2f597c9db74d9d , < 7617b210a2200b76d8f171819390468c7d189c80 (git)
Affected: 348a2e8c93d3ca622cf1b293cd2f597c9db74d9d , < 4e37371cb4e3b8ff564d7760029236a7bd614562 (git)
Affected: 348a2e8c93d3ca622cf1b293cd2f597c9db74d9d , < 2a7a4e45a3aa4f4ef7013eb64649f6184b76a293 (git)
Affected: 348a2e8c93d3ca622cf1b293cd2f597c9db74d9d , < e4728288473a5024a8bdba7d43f346719606fea0 (git)
Affected: 348a2e8c93d3ca622cf1b293cd2f597c9db74d9d , < 54d6b0ee9b8ba434089b11843effc111dc2e6ead (git)
Affected: 348a2e8c93d3ca622cf1b293cd2f597c9db74d9d , < a0a8cd9fc9c48b95095bcec4b146f7a99486f58e (git)
guessed Create a notification for this product.
Linux Linux Affected: 6.1
Unaffected: 0 , < 6.1 (semver)
Unaffected: 6.1.188 , ≤ 6.1.* (semver)
Unaffected: 6.6.157 , ≤ 6.6.* (semver)
Unaffected: 6.12.110 , ≤ 6.12.* (semver)
Unaffected: 6.18.52 , ≤ 6.18.* (semver)
Unaffected: 7.2.6 , ≤ 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/platform/chrome/cros_ec_typec.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "7617b210a2200b76d8f171819390468c7d189c80",
              "status": "affected",
              "version": "348a2e8c93d3ca622cf1b293cd2f597c9db74d9d",
              "versionType": "git"
            },
            {
              "lessThan": "4e37371cb4e3b8ff564d7760029236a7bd614562",
              "status": "affected",
              "version": "348a2e8c93d3ca622cf1b293cd2f597c9db74d9d",
              "versionType": "git"
            },
            {
              "lessThan": "2a7a4e45a3aa4f4ef7013eb64649f6184b76a293",
              "status": "affected",
              "version": "348a2e8c93d3ca622cf1b293cd2f597c9db74d9d",
              "versionType": "git"
            },
            {
              "lessThan": "e4728288473a5024a8bdba7d43f346719606fea0",
              "status": "affected",
              "version": "348a2e8c93d3ca622cf1b293cd2f597c9db74d9d",
              "versionType": "git"
            },
            {
              "lessThan": "54d6b0ee9b8ba434089b11843effc111dc2e6ead",
              "status": "affected",
              "version": "348a2e8c93d3ca622cf1b293cd2f597c9db74d9d",
              "versionType": "git"
            },
            {
              "lessThan": "a0a8cd9fc9c48b95095bcec4b146f7a99486f58e",
              "status": "affected",
              "version": "348a2e8c93d3ca622cf1b293cd2f597c9db74d9d",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "drivers/platform/chrome/cros_ec_typec.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "6.1"
            },
            {
              "lessThan": "6.1",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.1.*",
              "status": "unaffected",
              "version": "6.1.188",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.6.*",
              "status": "unaffected",
              "version": "6.6.157",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.110",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.18.*",
              "status": "unaffected",
              "version": "6.18.52",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.2.*",
              "status": "unaffected",
              "version": "7.2.6",
              "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.1.188",
                  "versionStartIncluding": "6.1",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.6.157",
                  "versionStartIncluding": "6.1",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.110",
                  "versionStartIncluding": "6.1",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18.52",
                  "versionStartIncluding": "6.1",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2.6",
                  "versionStartIncluding": "6.1",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.3-rc1",
                  "versionStartIncluding": "6.1",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nplatform/chrome: cros_ec_typec: Reject out-of-bounds PD cap count\n\ncros_typec_register_partner_pdos() copies the partner PDOs from the EC\nTYPEC_STATUS response into the fixed caps_desc.pdo[PDO_MAX_OBJECTS] array.\n\n\tmemcpy(caps_desc.pdo, resp-\u003esource_cap_pdos,\n\t       sizeof(u32) * resp-\u003esource_cap_count);\n\t...\n\tmemcpy(caps_desc.pdo, resp-\u003esink_cap_pdos,\n\t       sizeof(u32) * resp-\u003esink_cap_count);\n\nPDO_MAX_OBJECTS is 7. source_cap_count and sink_cap_count are u8 fields\nfrom the EC. The only check is that they are not both zero. If either is\nlarger than 7, the memcpy writes past the end of the array on the stack.\nA count of 255 overflows it by about 1 KB. The EC source arrays are only\nseven entries wide. A larger count reads past them too.\n\nThe ChromeOS EC firmware caps these counts today, so a compliant setup\ndoes not hit this. The kernel should still validate these values rather\nthan trust them.\n\nValidate the counts in cros_typec_register_partner_pdos() next to the\nmemcpy. Skip the PDO registration if either count is above PDO_MAX_OBJECTS.\nThe rest of cros_typec_handle_status() still runs so events are handled\nand cleared."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 8.4,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:L - The overflowing length is the u8 source_cap_count/sink_cap_count in the EC_CMD_TYPEC_STATUS (0x0133) reply that cros_typec_handle_status() fills via cros_ec_cmd(), from cros_typec_probe()/cros_ec_typec_event() over the onboard ChromeOS EC bus. USB PD\u0027s 3-bit Number of Data Objects (PD_HEADER_CNT_MASK) cannot exceed 7, so a USB-C partner cannot supply this count.\nAC:L - A compromised EC returns EC_CMD_USB_PD_CONTROL with PD_CTRL_RESP_ENABLED_CONNECTED so cros_typec_add_partner() runs, then TYPEC_STATUS with PD_STATUS_EVENT_SOP_DISC_DONE and source_cap_count=255. memcpy() then copies 1020 bytes into caps_desc.pdo[PDO_MAX_OBJECTS] deterministically, with no race.\nPR:N - cros_typec_probe() and the EC_HOST_EVENT_PD_MCU notifier call cros_typec_port_update() with no Linux capability or credential check. Compromised EC firmware can advertise EC_FEATURE_TYPEC_CMD and return the malicious TYPEC_STATUS without a host account.\nUI:N - cros_typec_probe() already calls cros_typec_port_update() for each port before registering the PD notifier, so a malicious EC that reports a connected partner and SOP_DISC_DONE overflows at boot. No victim need plug a cable or open a device.\nS:U - The smash is the kernel stack of cros_typec_register_partner_pdos() in the same host OS that runs the ChromeOS EC Type-C driver. This is ordinary kernel memory corruption, not a VM escape or IOMMU bypass.\nC:H - memcpy() of source_cap_count*sizeof(u32) from resp-\u003esource_cap_pdos (only seven u32s) into caps_desc.pdo[7] both over-reads the TYPEC_STATUS stack object by up to ~1KB and overflows later stack, which that smash can turn into an arbitrary-read primitive.\nI:H - A source_cap_count of 255 writes about 1KB past the 28-byte caps_desc.pdo array on the stack of cros_typec_register_partner_pdos(), overwriting saved registers and the return address for control-flow hijack and an arbitrary write.\nA:H - Smashing the stack frame of cros_typec_register_partner_pdos() while handling EC_CMD_TYPEC_STATUS oopses or panics the kernel on Chrome OS EC systems, a full availability loss."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-09-18T17:56:27.561Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/7617b210a2200b76d8f171819390468c7d189c80"
        },
        {
          "url": "https://git.kernel.org/stable/c/4e37371cb4e3b8ff564d7760029236a7bd614562"
        },
        {
          "url": "https://git.kernel.org/stable/c/2a7a4e45a3aa4f4ef7013eb64649f6184b76a293"
        },
        {
          "url": "https://git.kernel.org/stable/c/e4728288473a5024a8bdba7d43f346719606fea0"
        },
        {
          "url": "https://git.kernel.org/stable/c/54d6b0ee9b8ba434089b11843effc111dc2e6ead"
        },
        {
          "url": "https://git.kernel.org/stable/c/a0a8cd9fc9c48b95095bcec4b146f7a99486f58e"
        }
      ],
      "title": "platform/chrome: cros_ec_typec: Reject out-of-bounds PD cap count",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-93190",
    "datePublished": "2026-09-17T16:12:14.956Z",
    "dateReserved": "2026-09-17T16:02:15.092Z",
    "dateUpdated": "2026-09-18T17:56:27.561Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-93190",
      "date": "2026-09-25",
      "epss": "0.00196",
      "percentile": "0.08239"
    },
    "nvd": {
      "cve": {
        "affected": [
          {
            "affectedData": [
              {
                "defaultStatus": "unaffected",
                "product": "Linux",
                "programFiles": [
                  "drivers/platform/chrome/cros_ec_typec.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "lessThan": "7617b210a2200b76d8f171819390468c7d189c80",
                    "status": "affected",
                    "version": "348a2e8c93d3ca622cf1b293cd2f597c9db74d9d",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "4e37371cb4e3b8ff564d7760029236a7bd614562",
                    "status": "affected",
                    "version": "348a2e8c93d3ca622cf1b293cd2f597c9db74d9d",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "2a7a4e45a3aa4f4ef7013eb64649f6184b76a293",
                    "status": "affected",
                    "version": "348a2e8c93d3ca622cf1b293cd2f597c9db74d9d",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "e4728288473a5024a8bdba7d43f346719606fea0",
                    "status": "affected",
                    "version": "348a2e8c93d3ca622cf1b293cd2f597c9db74d9d",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "54d6b0ee9b8ba434089b11843effc111dc2e6ead",
                    "status": "affected",
                    "version": "348a2e8c93d3ca622cf1b293cd2f597c9db74d9d",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "a0a8cd9fc9c48b95095bcec4b146f7a99486f58e",
                    "status": "affected",
                    "version": "348a2e8c93d3ca622cf1b293cd2f597c9db74d9d",
                    "versionType": "git"
                  }
                ]
              },
              {
                "defaultStatus": "affected",
                "product": "Linux",
                "programFiles": [
                  "drivers/platform/chrome/cros_ec_typec.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "status": "affected",
                    "version": "6.1"
                  },
                  {
                    "lessThan": "6.1",
                    "status": "unaffected",
                    "version": "0",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.1.*",
                    "status": "unaffected",
                    "version": "6.1.188",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.6.*",
                    "status": "unaffected",
                    "version": "6.6.157",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.12.*",
                    "status": "unaffected",
                    "version": "6.12.110",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.18.*",
                    "status": "unaffected",
                    "version": "6.18.52",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "7.2.*",
                    "status": "unaffected",
                    "version": "7.2.6",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "*",
                    "status": "unaffected",
                    "version": "7.3-rc1",
                    "versionType": "original_commit_for_fix"
                  }
                ]
              }
            ],
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
          }
        ],
        "cveTags": [],
        "descriptions": [
          {
            "lang": "en",
            "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nplatform/chrome: cros_ec_typec: Reject out-of-bounds PD cap count\n\ncros_typec_register_partner_pdos() copies the partner PDOs from the EC\nTYPEC_STATUS response into the fixed caps_desc.pdo[PDO_MAX_OBJECTS] array.\n\n\tmemcpy(caps_desc.pdo, resp-\u003esource_cap_pdos,\n\t       sizeof(u32) * resp-\u003esource_cap_count);\n\t...\n\tmemcpy(caps_desc.pdo, resp-\u003esink_cap_pdos,\n\t       sizeof(u32) * resp-\u003esink_cap_count);\n\nPDO_MAX_OBJECTS is 7. source_cap_count and sink_cap_count are u8 fields\nfrom the EC. The only check is that they are not both zero. If either is\nlarger than 7, the memcpy writes past the end of the array on the stack.\nA count of 255 overflows it by about 1 KB. The EC source arrays are only\nseven entries wide. A larger count reads past them too.\n\nThe ChromeOS EC firmware caps these counts today, so a compliant setup\ndoes not hit this. The kernel should still validate these values rather\nthan trust them.\n\nValidate the counts in cros_typec_register_partner_pdos() next to the\nmemcpy. Skip the PDO registration if either count is above PDO_MAX_OBJECTS.\nThe rest of cros_typec_handle_status() still runs so events are handled\nand cleared."
          }
        ],
        "id": "CVE-2026-93190",
        "lastModified": "2026-09-18T18:18:24.450",
        "metrics": {
          "cvssMetricV31": [
            {
              "cvssData": {
                "attackComplexity": "LOW",
                "attackVector": "LOCAL",
                "availabilityImpact": "HIGH",
                "baseScore": 8.4,
                "baseSeverity": "HIGH",
                "confidentialityImpact": "HIGH",
                "integrityImpact": "HIGH",
                "privilegesRequired": "NONE",
                "scope": "UNCHANGED",
                "userInteraction": "NONE",
                "vectorString": "CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
                "version": "3.1"
              },
              "exploitabilityScore": 2.5,
              "impactScore": 5.9,
              "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
              "type": "Secondary"
            }
          ]
        },
        "published": "2026-09-17T17:18:15.177",
        "references": [
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/2a7a4e45a3aa4f4ef7013eb64649f6184b76a293"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/4e37371cb4e3b8ff564d7760029236a7bd614562"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/54d6b0ee9b8ba434089b11843effc111dc2e6ead"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/7617b210a2200b76d8f171819390468c7d189c80"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/a0a8cd9fc9c48b95095bcec4b146f7a99486f58e"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/e4728288473a5024a8bdba7d43f346719606fea0"
          }
        ],
        "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "vulnStatus": "Received"
      }
    },
    "suse_vex": {
      "aggregate_severity": "moderate",
      "current_release_date": "2026-09-21T23:42:45Z",
      "cve": "CVE-2026-93190",
      "id": "CVE-2026-93190",
      "initial_release_date": "2026-09-18T00:10:58Z",
      "product_status:known_affected": "30",
      "product_status:known_not_affected": "317",
      "source": "SUSE CSAF VEX",
      "status": "interim",
      "title": "SUSE CVE CVE-2026-93190",
      "url": "https://ftp.suse.com/pub/projects/security/csaf-vex/cve-2026-93190.json",
      "version": "5"
    }
  }
}



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…

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…