CVE-2026-99184
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
W jądrze Linuksa usunięto następującą lukę:
accel/rocket: przeszukaj każde miejsce na rdzeń, gdy rdzeń zostanie usunięty
rocket_remove() zmniejsza rdev->num_cores dla każdego usuniętego rdzenia,
podczas gdy find_core_for_dev() przeszukuje sloty od 0 do num_cores - 1. Rozłączanie
rdzenie w kolejności, w jakiej były związane, zatem traci ostatni: wg
w momencie usunięcia zakres wyszukiwania już się skurczył
slot, więc find_core_for_dev() zwraca -1, a rocket_remove() poddaje się
nie robiąc nic.
num_cores nigdy nie osiąga zera, rocket_device_fini() nigdy nie działa, a
rdev o zasięgu pliku wskazuje na urządzenie, które znika. Wiązanie
rdzenie ponownie zaczynają od tej przestarzałej liczby, ponieważ rocket_probe()
zajmuje rdev->num_cores jako miejsce do zapełnienia. Na RK3588, który opisuje
trzy rdzenie, druga runda ląduje na slotach 1, 2 i 3, podczas gdy rdev->rdzenie
przydzielono pokój dla trzech osób:
rakieta fdab0000.npu: Rockchip NPU wersja rdzenia 1: 1179210309
rakieta fdac0000.npu: Rockchip NPU wersja rdzenia 2: 1179210309
rakieta fdad0000.npu: Rockchip NPU core 3 wersja: 1179210309
Zapis do rdev->cores[3] nastąpił poza końcem tablicy.
Nic w drzewie nie czyta tablicy rdzenia wystarczająco często, aby to zauważyć, więc
przekroczenie milczy dzisiaj. Pojawiło się podczas testowania serii devfreq
na dodatek, gdy pracownik przechodzi przez każdy rdzeń kilka razy na sekundę, i
UBSAN przechwycił pierwszą wartość bool, którą odczytał z wpisu przekroczenia:
UBSAN: nieprawidłowe obciążenie w sterownikach/accel/rocket/rocket_devfreq.c:47:10
obciążenie o wartości 5 nie jest prawidłową wartością dla typu „_Bool”
Kolejka robocza: devfreq_wq devfreq_monitor
Zapisz, ile miejsc zostało przydzielonych i przeszukaj je wszystkie. Każdy rdzeń
zostanie następnie znaleziony po usunięciu, liczba rdzeni osiągnie zero, urządzenie zostanie zniszczone
a późniejsze wiązanie zaczyna się od czystego rdev.
Nie powoduje to rozłączenia pojedynczego rdzenia z kilku prac. sonda
nadal zajmuje num_cores jako miejsce do wypełnienia, więc ponowne wiązanie jednego rdzenia while
jego rodzeństwo pozostanie związane zapisałoby na slocie, który jest już używany,
i rocket_open() nadal sięga po rdzenie[0], niezależnie od tego, czy cokolwiek jest, czy nie
tam. Obydwa wymagają więcej przemyśleń, niż powinna zawierać poprawka.
Znaleziono poprzez rozłączenie i ponowne połączenie wszystkich trzech rdzeni w Orange Pi 5 Plus.
Po zastosowaniu tego 25 rund rozłączania/ponownego wiązania i 5 rozładowywania/przeładowywania modułów
rundy przebiegają tam czysto: rdzenie lądują za każdym razem w slotach 0, 1 i 2,
niezależnie od kolejności, w jakiej są powiązane, a wspólna podaż wraca do a
pojedynczy użytkownik po każdej rundzie.
>_ Referencje
Dane podatności pochodzą z oficjalnych źródeł (CVE® List / NVD). Opisy po polsku są tłumaczone automatycznie i mogą zawierać nieścisłości – na stronie rekordu można wyświetlić wersję angielską.
This product uses the NVD API but is not endorsed or certified by the NVD.
Copyright © 1999–2026, The MITRE Corporation. CVE is a registered trademark and the CVE logo is a registered trademark of The MITRE Corporation.
CVE Usage: MITRE hereby grants you a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute Common Vulnerabilities and Exposures (CVE®). Any copy you make for such purposes is authorized provided that you reproduce MITRE's copyright designation and this license in any such copy. ALL DOCUMENTS AND THE INFORMATION CONTAINED THEREIN PROVIDED BY MITRE ARE PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND.
NVD Terms of Use / CVE® Terms of Use / nvd.nist.gov / cve.org