Ad

CVE-2026-89471

HIGH CVSS 3.1: 8,4 EPSS 0.14%
Обновлено 14 сентября 2026
Linux
Параметр Значение
CVSS 8,4 (HIGH)
Поставщик Linux
Публичный эксплойт Нет

В ядре Linux устранена следующая уязвимость: мощность: источник питания: cros_usbpd-charger: привязано количество портов, сообщаемое EC cros_usbpd_charger_probe() считывает два счетчика портов из EC и использует один из них, num_charger_ports, как цикл, связанный при заполнении массив фиксированного размера: структура port_data *ports[EC_USB_PD_MAX_PORTS]; /* 8 записей */ ... for (i = 0; i < charge->num_charger_ports; i++) зарядное устройство->порты[зарядное устройство->num_registered_psy++] = порт; Оба num_usbpd_ports (из EC_CMD_USB_PD_PORTS) и num_charger_ports (из EC_CMD_CHARGE_PORT_COUNT) — это значения u8, сообщаемые EC. Единственная проверка — это проверка работоспособности, которая сравнивает два отчета ЕС. ценности друг против друга: if (num_charger_ports < num_usbpd_ports || num_charger_ports > num_usbpd_ports + 1) возврат -EPROTO; Он никогда не сверяет ни один из счетчиков с EC_USB_PD_MAX_PORTS, размером массив портов[]. Неисправный, вредоносный или скомпрометированный EC, который сообщает num_usbpd_ports == num_charger_ports == N для любого N > 8 (для оба примера 255) проходят эту проверку, а затем цикл записывает N указателей. в массив с 8 входамиports[], встроенный в devm_kzalloc()'d charge_data, переполняя его на 255 - 8 = 247 записей (~1976 байты): запись за пределами поля.

Отклонить количество портов, превышающее возможности массиваports[].

Показать оригинальное описание (EN)

In the Linux kernel, the following vulnerability has been resolved: power: supply: cros_usbpd-charger: bound the EC-reported port count cros_usbpd_charger_probe() reads two port counts from the EC and uses one of them, num_charger_ports, as the loop bound when populating a fixed-size array: struct port_data *ports[EC_USB_PD_MAX_PORTS]; /* 8 entries */ ... for (i = 0; i < charger->num_charger_ports; i++) charger->ports[charger->num_registered_psy++] = port; Both num_usbpd_ports (from EC_CMD_USB_PD_PORTS) and num_charger_ports (from EC_CMD_CHARGE_PORT_COUNT) are u8 values reported by the EC. The only validation is a sanity check that compares the two EC-reported values against each other: if (num_charger_ports < num_usbpd_ports || num_charger_ports > num_usbpd_ports + 1) return -EPROTO; It never checks either count against EC_USB_PD_MAX_PORTS, the size of the ports[] array. A malfunctioning, malicious or compromised EC that reports num_usbpd_ports == num_charger_ports == N for any N > 8 (for example both 255) passes this check, and the loop then writes N pointers into the 8-entry ports[] array embedded in the devm_kzalloc()'d charger_data, overflowing it by up to 255 - 8 = 247 entries (~1976 bytes): a slab out-of-bounds write. Reject a port count larger than the ports[] array can hold.

Характеристики атаки

Способ атаки
Локальный
Нужен локальный доступ
Сложность
Низкая
Легко эксплуатировать
Нужны права
Не требуются
Права не нужны
Участие пользователя
Не требуется
Не нужно действие пользователя

Последствия

Конфиденциальность
Высокое
Полная утечка данных
Целостность
Высокое
Полная модификация данных
Доступность
Высокое
Полный отказ в обслуживании

Строка CVSS v3.1