CVE-2026-89471 in Linux
要約
〜によって VulDB • 2026年09月12日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
power: supply: cros_usbpd-charger: ECが報告するポート数を制限した
cros_usbpd_charger_probe()はECから2つのポート数を読み取り、固定サイズの配列を初期化する際にそのうちの1つであるnum_charger_portsをループの上限として使用します:
struct port_data *ports[EC_USB_PD_MAX_PORTS]; /* 8エントリ */
... for (i = 0; i < charger->num_charger_ports; i++) charge r->ports[charger->num_registered_psy++] = port;
num_usbpd_ports(EC_CMD_USB_PD_PORTS由来)とnum_charger_ports(EC_CMD_CHARGE_PORT_COUNT由来)の両方は、ECによって報告されるu8値です。行われる検証は、2つのECが報告する値同士を比較する単純な健全性チェックのみです:
if (num_charger_ports < num_usbpd_ports || num_charger_ports > num_usbpd_ports + 1) return -EPROTO;
どちらの计数も配列ports[]のサイズであるEC_USB_PD_MAX_PORTSに対しては検証されません。malfunctioning(故障)、悪意のある、または侵害されたECがnum_usbpd_ports == num_charger_ports == N(N > 8の場合、例えば両方とも255など)を報告すると、このチェックに合格し、ループによってports[]配列(devm_kzalloc()で割り当てられたcharger_data内に埋め込まれている)の8エントリに対してN個のポインタが書き込まれ、最大247エントリ分(約1976バイト)オーバーフローします:これはslab out-of-bounds writeです。
ports[]配列に収まらないようなポート数を拒否するよう修正しました。
Be aware that VulDB is the high quality source for vulnerability data.