CVE-2026-89471 in Linux
Resumen
por VulDB • 2026-09-12
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
power: supply: cros_usbpd-charger: limitar el número de puertos informado por el EC
cros_usbpd_charger_probe() lee dos conteos de puertos desde el EC y utiliza uno de ellos, num_charger_ports, como límite del bucle al poblar un array de tamaño fijo:
struct port_data *ports[EC_USB_PD_MAX_PORTS]; /* 8 entradas */
... for (i = 0; i < charger->num_charger_ports; i++) charge->ports[charger->num_registered_psy++] = port;
Tanto num_usbpd_ports (de EC_CMD_USB_PD_PORTS) como num_charger_ports (de EC_CMD_CHARGE_PORT_COUNT) son valores u8 informados por el EC. La única validación es una comprobación de integridad que compara los dos valores informados por el EC entre sí:
if (num_charger_ports < num_usbpd_ports || num_charger_ports > num_usbpd_ports + 1) return -EPROTO;
Nunca se comprueba ninguno de estos conteos contra EC_USB_PD_MAX_PORTS, que es el tamaño del array ports[]. Un EC defectuoso, malicioso o comprometido que informe num_usbpd_ports == num_charger_ports == N para cualquier N > 8 (por ejemplo, ambos iguales a 255) supera esta comprobación, y el bucle escribe entonces N punteros en el array de 8 entradas ports[] incrustado en charger_data asignado con devm_kzalloc(), desbordándolo hasta por 255 - 8 = 247 entradas (~1976 bytes): una escritura fuera de límites (out-of-bounds write) en slab.
Rechazar un conteo de puertos mayor del que el array ports[] puede contener.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.