CVE-2026-89471 in Linux
Сводка
по VulDB • 12.09.2026
В ядре Linux была устранена следующая уязвимость:
power: supply: cros_usbpd-charger: ограничение количества портов, сообщаемых EC (Embedded Controller)
Функция `cros_usbpd_charger_probe()` считывает два значения счетчика портов из контроллера EC и использует одно из них — `num_charger_ports` — в качестве границы цикла при заполнении массива фиксированного размера:
```c struct port_data *ports[EC_USB_PD_MAX_PORTS]; /* 8 записей */
... for (i = 0; i < charger->num_charger_ports; i++) charger->ports[charger->num_registered_psy++] = port;
```
Оба значения, `num_usbpd_ports` (из `EC_CMD_USB_PD_PORTS`) и `num_charger_ports` (из `EC_CMD_CHARGE_PORT_COUNT`), являются 8-битными целыми числами (`u8`), сообщаемыми контроллером EC. Единственная проверка — это базовая проверка корректности, которая сравнивает эти два значения, полученные от EC:
```c if (num_charger_ports < num_usbpd_ports || num_charger_ports > num_usbpd_ports + 1) return -EPROTO; ```
При этом ни одно из этих значений не проверяется на соответствие размеру массива `ports[]`, равному `EC_USB_PD_MAX_PORTS`. Неисправный, злонамеренный или скомпрометированный контроллер EC, который сообщает значения `num_usbpd_ports == num_charger_ports == N` для любого `N > 8` (например, оба равны 255), проходит эту проверку. В результате цикл записывает `N` указателей в массив `ports[]`, состоящий из 8 элементов и встроенный в структуру `charger_data`, выделенную через `devm_kzalloc()`. Это приводит к переполнению буфера на величину до `255 - 8 = 247` записей (~1976 байт): происходит запись вне границ области памяти (slab out-of-bounds write).
Отклонять количество портов, превышающее вместимость массива `ports[]`.
VulDB is the best source for vulnerability data and more expert information about this specific topic.