CVE-2026-90025 PUBLISHED

usb: typec: ucsi: displayport: Fix OOB altmode array index

Assigner: Linux
Reserved: 11.09.2026 Published: 16.09.2026 Updated: 16.09.2026

In the Linux kernel, the following vulnerability has been resolved:

usb: typec: ucsi: displayport: Fix OOB altmode array index

The UCSI displayport driver indexes the connector's port altmode array with the GET_CURRENT_CAM response after checking it is not 0xff. The port altmode array is UCSI_MAX_ALTMODES elements long. If the PPM returns an invalid GET_CURRENT_CAM response above UCSI_MAX_ALTMODES and not equal to 0xff, the kernel may crash with an array index OOB error.

Update the UCSI displayport driver to verify the current cam is less than UCSI_MAX_ALTMODES before accessing the port altmode array.

Metrics

CVSS Vector: CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H
CVSS Score: 7.7

AV:L - The OOB index is the PPM GET_CURRENT_CAM byte from onboard UCSI firmware (ACPI EC, I2C CCG/STM32G0, pmic_glink, Chrome OS EC), not a USB-C partner or network packet. A compromised PPM can report CONNECTED plus DP partner altmodes and drive enter without a physical plug, matching other firmware-to-kernel scores. AC:L - The PPM fully controls the GET_CURRENT_CAM u8; any value in 30-254 (UCSI_MAX_ALTMODES is 30, 0xff is the only sentinel) deterministically indexes port_altmode[] out of bounds with no race or attacker-uncontrollable layout. PR:N - UCSI connector-change work, GET_CURRENT_CAM, and dp_altmode_probe's automatic enter run in kernel context from PPM notifications with no capable() or credential check, so compromised PPM/EC firmware needs no host account. UI:N - Partner registration and DisplayPort altmode enter run automatically from PPM connector-change events and dp_altmode_probe scheduled work; no victim must plug a cable, mount media, or open a device node. S:U - The out-of-bounds pointer load stays inside the host kernel UCSI DisplayPort driver and connector heap; it does not cross a VM, IOMMU, or other security-authority boundary. C:H - cur is a full u8 used as an index into port_altmode[UCSI_MAX_ALTMODES], so values 30-254 read a kernel pointer from up to about 2KB past the array into adjacent connector/heap memory; that unbounded OOB read scores Confidentiality High. I:N - The OOB pointer is only compared to alt to choose 0 versus -EBUSY; it is never written, stored, or used as a write address, so there is no OOB write, use-after-free, or control-flow hijack primitive. A:H - An out-of-range CAM can load from unmapped heap, trip KASAN/UBSAN array-index-out-of-bounds, or oops as the fix describes, producing a kernel panic that the PPM can retrigger on each enter.

Product Status

Vendor Linux
Product Linux
Versions Default: unaffected
  • affected from af8622f6a585d8d82b11cd7987e082861fd0edd3 to 8fde7e4a366184e9a6aa95541e52933a73c00a74 (excl.)
  • affected from af8622f6a585d8d82b11cd7987e082861fd0edd3 to 83f1abd62cc134700ba92e1e2dc650a49a185497 (excl.)
  • affected from af8622f6a585d8d82b11cd7987e082861fd0edd3 to 1ffed96ef986e2cdf986aa4a4506a5e6dcdf4456 (excl.)
  • affected from af8622f6a585d8d82b11cd7987e082861fd0edd3 to 58e0ee293ec5e06cacbe3953ad44042f1473dae9 (excl.)
  • affected from af8622f6a585d8d82b11cd7987e082861fd0edd3 to ac9f878c468052af6571e8639ab1c3ae040b908f (excl.)
  • affected from af8622f6a585d8d82b11cd7987e082861fd0edd3 to 33a81acd2d1d0667d4eff93cb90339fa53e617e8 (excl.)
  • affected from af8622f6a585d8d82b11cd7987e082861fd0edd3 to bdaaf3074aedce8f1b173cc363d61cff5f6a585f (excl.)
  • affected from af8622f6a585d8d82b11cd7987e082861fd0edd3 to 04cec690b1fd9d1c4c314b91a10d8c68a3acfe18 (excl.)
Vendor Linux
Product Linux
Versions Default: affected
  • Version 5.2 is affected
  • unaffected from 0 to 5.2 (excl.)
  • unaffected from 5.10.270 to 5.10.* (incl.)
  • unaffected from 5.15.221 to 5.15.* (incl.)
  • unaffected from 6.1.188 to 6.1.* (incl.)
  • unaffected from 6.6.157 to 6.6.* (incl.)
  • unaffected from 6.12.110 to 6.12.* (incl.)
  • unaffected from 6.18.51 to 6.18.* (incl.)
  • unaffected from 7.2.5 to 7.2.* (incl.)
  • unaffected from 7.3-rc2 to * (incl.)

References