Katalog CVE

CVE-2026-89471

WysokieCVSS 8.4
Opublikowano: Zaktualizowano: Przetłumaczono: NVD NIST

Prawdopodobieństwo exploitacji (EPSS)

Niskie ryzyko
0.14%

Percentyl 4 - wyżej niż 4% wszystkich znanych CVE

Streszczenie

W jądrze Linux w sterowniku power: supply: cros_usbpd-charger funkcja cros_usbpd_charger_probe() odczytuje z EC dwie liczby portów i używa num_charger_ports jako granicy pętli wypełniającej tablicę ports[] o stałym rozmiarze 8 elementów. Brak walidacji względem EC_USB_PD_MAX_PORTS pozwala wadliwemu lub złośliwemu EC zgłosić wartość do 255, co powoduje zapis poza granicami tablicy (slab out-of-bounds write). Poprawka odrzuca liczbę portów większą niż rozmiar tablicy.

Ocena ryzyka

Złośliwy lub uszkodzony kontroler EC może wywołać zapis poza granicami pamięci jądra, prowadzący do uszkodzenia pamięci, awarii systemu lub potencjalnej eskalacji uprawnień.

Rekomendacja

Zaktualizuj jądro Linux do wersji zawierającej poprawkę walidującą liczbę portów. Do czasu aktualizacji unikaj używania sprzętu z niezaufanym oprogramowaniem EC.

Inne podatności w Linux kernel

Zobacz wszystkie
Oryginalny opis (angielski, źródło NVD)

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.

Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS