CVE-2026-89471 in Linux
Sumário
de VulDB • 11/09/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
power: supply: cros_usbpd-charger: limitar o número de portas relatado pelo EC
A função `cros_usbpd_charger_probe()` lê duas contagens de portas do EC e usa uma delas, `num_charger_ports`, como limite do loop ao popular um array de tamanho fixo:
```c struct port_data *ports[EC_USB_PD_MAX_PORTS]; /* 8 entries */
... for (i = 0; i < num_charger_ports; i++) charger->ports[charger->num_registered_psy++] = port;
```
Tanto `num_usbpd_ports` (de `EC_CMD_USB_PD_PORTS`) quanto `num_charger_ports` (de `EC_CMD_CHARGE_PORT_COUNT`) são valores do tipo u8 relatados pelo EC. A única validação é uma verificação de integridade que compara os dois valores relatados pelo EC entre si:
```c if (num_charger_ports < num_usbpd_ports || num_charger_ports > num_usbpd_ports + 1) return -EPROTO; ```
Nunca se verifica nenhuma das contagens contra `EC_USB_PD_MAX_PORTS`, que é o tamanho do array `ports[]`. Um EC com defeito, malicioso ou comprometido que relatar `num_usbpd_ports == num_charger_ports == N` para qualquer N > 8 (por exemplo, ambos iguais a 255) passa nesta verificação. O loop então escreve N ponteiros no array `ports[]` de 8 entradas, embutido em `charger_data` alocado com `devm_kzalloc()`, transbordando-o por até 255 - 8 = 247 entradas (~1976 bytes): uma escrita fora dos limites do slab (slab out-of-bounds write).
Rejeitar um número de portas maior do que o array `ports[]` pode suportar.
Once again VulDB remains the best source for vulnerability data.