CVE-2026-89903
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
W jądrze Linuksa usunięto następującą lukę:
LoongArch: Nie zapisuj/nie przywracaj rejestru bazowego percpu na trampolinie ponownie podłączonej
Ponowne założenie trampoliny pozwala zaoszczędzić 21 USD (u0 USD), czyli podstawę procesora, w ramie
przy wejściu i przywraca przy wyjściu. Pomiędzy rethook_trampoline_handler()
może zaplanować za pomocą preempt_enable_notrace().
Jeśli zadanie zostanie przeniesione do innego procesora, $r21 ramki zatrzyma stare
Baza percpu procesora i jej przywrócenie zatruwa nowy procesor za 21 dolarów. Aż
następne przejście użytkownika->jądro leczy $r21, cały dostęp this_cpu_*().
(kolejki uruchomieniowe, dane RCU na procesor, programowanie timera, własność FPU)
uderzył w niewłaściwy obszar percpu procesora.
Przy dużym obciążeniu kretprobe może to spowodować uszkodzenie harmonogramu i
stan timera: ikony planowania podczas atomizacji, ostrzeżenia o nieprawidłowym procesorze RCU,
WARN_ON_ONCE(rq != this_rq()) w nohz_balance_exit_idle() i procesorach
parkowanie w pętli bezczynności ze stałym licznikiem nigdy nieuzbrojonym (trudne
zamknięcie). Reprodukuje na Loongson-3A6000 z kretprobes na ścieżkach VFS
plus duża zmiana plików (instalacja systemu operacyjnego / unsquashfs).
Zgodnie z konwencją $r21 zawsze przechowuje w jądrze bazę percpu bieżącego procesora
tryb: SAVE_SOME() przy wpisie wyjątku ładuje go ponownie tylko wtedy, gdy pochodzi
tryb użytkownika, a RESTORE_SOME() przywraca go dopiero po powrocie do użytkownika
tryb; ścieżka zmiany kontekstu nigdy tego nie zapisuje. Dlatego na żywo 21 $
przy wyjściu z trampoliny jest już prawidłowe i nic pomiędzy nie może się zmienić
to legalnie (kod C jądra nie może zapisać zmiennej rejestru globalnego).
Od tego czasu ta sama wada występowała nawet w trampolinie Kretprobe przed ponownym zaczepieniem
wersja 6.3; został przeniesiony, gdy zastąpił go Rethook. Usuń oba save'y
i przywróć tutaj. Upuść przywracanie wystarczy, aby rozwiązać problem i
upuszczenie zapisu ma na celu utrzymanie porządku w kodzie i brak konieczności jego czyszczenia.
>_ Referencje
- https://git.kernel.org/stable/c/266ffc92e68593759adfe3d58f188773d32782c3
- https://git.kernel.org/stable/c/8f15e95b438bc6b3c9f23a33c9a0d0678ebd1dc8
- https://git.kernel.org/stable/c/a03b5e7483ad2c33ba5dd2adb8552e84bfee8fe2
- https://git.kernel.org/stable/c/c048b0a3c0836c4b1bef4b51d355d27090bf6790
- https://git.kernel.org/stable/c/c3f2feace5e4f4b01b68b9f947b19adb4155c32e
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