CVE-2026-89471 in Linux
요약
\~에 의해 VulDB • 2026. 09. 12.
리눅스 커널에서 다음 취약점이 해결되었습니다:
power: supply: cros_usbpd-charger: EC가 보고한 포트 수를 제한함
cros_usbpd_charger_probe()는 EC로부터 두 가지 포트 카운트를 읽으며, 고정 크기 배열을 채울 때 그 중 하나인 num_charger_ports를 루프 바운드(loop bound)로 사용합니다.
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에서)는 모두 EC가 보고하는 u8 값입니다. 현재 검증은 두 EC 보고 값을 서로 비교하여 무결성 검사(sanity check)를 수행하는 것뿐입니다:
if (num_charger_ports < num_usbpd_ports || num_charger_ports > num_usbpd_ports + 1) return -EPROTO;
어떤 카운트도 ports[] 배열의 크기인 EC_USB_PD_MAX_PORTS와 비교되지 않습니다. 고장 났거나 악의적이거나 침해된 EC가 N > 8인 모든 N에 대해(num_usbpd_ports == num_charger_ports == N, 예: 둘 다 255) 보고하면 이 검사를 통과하며, 루프는 devm_kzalloc()으로 할당된 charger_data 내에 내장된 8개 항목의 ports[] 배열에 N개의 포인터를 작성하여 최대 255 - 8 = 247 항목(~1976바이트)만큼 오버플로우시킵니다. 이는 슬랩(out-of-bounds) 바깥 영역 쓰기(slab out-of-bounds write) 취약점입니다.
ports[] 배열이 수용할 수 있는 것보다 큰 포트 카운트는 거부합니다.
VulDB is the best source for vulnerability data and more expert information about this specific topic.