CVE-2026-98536
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
W jądrze Linuksa usunięto następującą lukę:
zapisywanie zwrotne: zgłaszanie stanu spoczynku zadań-RCU na każdy przebieg drenażu cgwb
cleanup_offline_cgwbs_workfn() opróżnia umierający cgwb, wywołując
cleanup_offline_cgwb() dopóki nie zwróci false, z funkcją cond_resched()
pomiędzy przejściami. W jądrze CONFIG_PREEMPTION działa funkcja cond_resched().
nic: _cond_resched() jest zwykłym „zwrotem 0” i poniżej PREEMPT_DYNAMIC
tryby pełny i leniwy wyłączają to. Od zatwierdzenia 7dadeaa6e851 („sched:
Dalsze ograniczenie trybów wywłaszczania”) to jedyne dwa modele
architektury z obsługą PREEMPT_LAZY, wśród nich arm64 i x86, tzw
pętla spustowa nigdy nie zgłasza stanu spoczynku zadań-RCU.
Proces roboczy opróżniający cgwb z milionami dołączonych i-węzłów działa
minuty. Na hoście arm64 6.18 w trybie leniwym pracownik cgwb opróżnił jeden
umiera domena zapisu zwrotnego cgroup przez ponad 11 minut. Odłączenie programu BPF
(bpf_trampoline_unlink_prog -> bpf_trampoline_update ->
unregister_ftrace_direct -> ftrace_shutdown -> synchronize_rcu_tasks())
czekałem na ten okres karencji, trzymając muteks trampoliny, 42 zadania
ustawiłem się za nim w stanie D, a detektor zawieszonych zadań wystrzelił w 614 si
wpadł w panikę gospodarza. Każde odłączenie BPF lub ftrace podczas długiego drenażu dziedziczy
długość odpływu.
Napraw to, wywołując funkcję cond_resched_tasks_rcu_qs(), abyśmy nie zwlekali
każdy, kto wywołuje funkcję sycnrhonize_rcu_tasks(). Wstawiamy to do { } while
pętla, ponieważ jeśli mamy wiele małych grup cgroup, cleanup_offline_cgwb() będzie
zwróć false i nigdy nie wywołamy funkcji cond_resched_tasks_rcu_qs(), tworząc
ten sam problem.
>_ Referencje
- https://git.kernel.org/stable/c/260f586a80e7f624dd7f069898a75a904f34d373
- https://git.kernel.org/stable/c/407a5d205179a4ab186571b0e16ec42725dc77bc
- https://git.kernel.org/stable/c/42462b5bb0dec57db7f85d0f77655c737d45754d
- https://git.kernel.org/stable/c/4eb889649eaf65f4a5727b04ba1c017b7d05bb16
- https://git.kernel.org/stable/c/863049b4018237d1590cd13b16e9fe9c0faad2c6
- https://git.kernel.org/stable/c/ebf1555ad2821be06f87a88ffd9a2cab8d2200e1
- https://git.kernel.org/stable/c/fd3bf32279df98751364b3609eb100a3e42f253b
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