{
  "schema_version": "1.6.1",
  "id": "RPI-CVE-2026-89471",
  "modified": "2026-10-07T17:22:01Z",
  "upstream": [
    "CVE-2026-89471"
  ],
  "published": "2026-09-11T19:47:07Z",
  "summary": "power: supply: cros_usbpd-charger: bound the EC-reported port count",
  "details": "In the Linux kernel, the following vulnerability has been resolved:\n\npower: supply: cros_usbpd-charger: bound the EC-reported port count\n\ncros_usbpd_charger_probe() reads two port counts from the EC and uses\none of them, num_charger_ports, as the loop bound when populating a\nfixed-size array:\n\n\tstruct port_data *ports[EC_USB_PD_MAX_PORTS];\t/* 8 entries */\n\t...\n\tfor (i = 0; i < charger->num_charger_ports; i++)\n\t\tcharger->ports[charger->num_registered_psy++] = port;\n\nBoth num_usbpd_ports (from EC_CMD_USB_PD_PORTS) and num_charger_ports\n(from EC_CMD_CHARGE_PORT_COUNT) are u8 values reported by the EC. The\nonly validation is a sanity check that compares the two EC-reported\nvalues against each other:\n\n\tif (num_charger_ports < num_usbpd_ports ||\n\t    num_charger_ports > num_usbpd_ports + 1)\n\t\treturn -EPROTO;\n\nIt never checks either count against EC_USB_PD_MAX_PORTS, the size of\nthe ports[] array. A malfunctioning, malicious or compromised EC that\nreports num_usbpd_ports == num_charger_ports == N for any N > 8 (for\nexample both 255) passes this check, and the loop then writes N pointers\ninto the 8-entry ports[] array embedded in the devm_kzalloc()'d\ncharger_data, overflowing it by up to 255 - 8 = 247 entries (~1976\nbytes): a slab out-of-bounds write.\n\nReject a port count larger than the ports[] array can hold.",
  "affected": [
    {
      "package": {
        "ecosystem": "Raspberry Pi OS:12",
        "name": "linux"
      },
      "versions": [
        "1:6.1.47-1+rpt4"
      ],
      "ecosystem_specific": {
        "binaries": [
          {
            "binary_name": "linux-image-6.1.0-rpi3-rpi-2712",
            "binary_version": "1:6.1.47-1+rpt4"
          },
          {
            "binary_name": "linux-image-6.1.0-rpi3-rpi-v6",
            "binary_version": "1:6.1.47-1+rpt4"
          },
          {
            "binary_name": "linux-image-6.1.0-rpi3-rpi-v7",
            "binary_version": "1:6.1.47-1+rpt4"
          },
          {
            "binary_name": "linux-image-6.1.0-rpi3-rpi-v7l",
            "binary_version": "1:6.1.47-1+rpt4"
          },
          {
            "binary_name": "linux-image-6.1.0-rpi3-rpi-v8",
            "binary_version": "1:6.1.47-1+rpt4"
          }
        ]
      },
      "database_specific": {
        "per_version": {
          "1:6.1.47-1+rpt4": {
            "linux_commit": "655fc658a15ae7a6f37103754adb39ba52a9a14e",
            "upstream_version": "6.1.47",
            "assessment": "commit ancestry (strak rule)",
            "upstream_fixed": "6.1.188",
            "compiled_filter": false
          }
        }
      }
    }
  ],
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://www.cve.org/CVERecord?id=CVE-2026-89471"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/0b5096f6804161b61451b1cec0e38678630be849"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/c46c9f447415ca802afab51dea1eafc08ddff1c6"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/a1905375dfc0b9612bbee52fc066e3a70c0d671d"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/2746d502b12b343384fb747bdef9cbcfbd7444a2"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/fd29d08ee487f3bf50f2575aaa74f78a74b09b21"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/78be8b7403ff7638162438b664a07d19da76059e"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/3d1e01443b221081258ff34ea0cdd0431e4ff62e"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/48355ce49359740f52e94d3623f6fc557ce341f0"
    }
  ],
  "database_specific": {
    "source": "https://git.kernel.org/pub/scm/linux/security/vulns.git",
    "upstream_modified": "2026-09-14T12:06:03Z"
  }
}
