CVE-2026-99205
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
W jądrze Linuksa usunięto następującą lukę:
sched/core: Wywołaj funkcję wakeup_preempt() dla zadań oczekujących w kolejce podczas zmiany klasy
Paul poinformował, że ostatnie zmiany w RCU ujawniły utracone ustawienia w przypadku bezczynności procesora
z wątkiem do wycinania, który czeka, będąc w pełni wykonalnym.
Pokazano zrzut stanu rq w czasie pracy na biegu jałowym z wykonywalnymi zadaniami
co następuje:
rq->next_class = &fair_sched_class
rq->nr_running = 1
rq->cfs.h_nr_queued = 0
rq->rt.rt_nr_running = 1
Chociaż oczekujące zadanie było zadaniem RT, „rq->next_class” nie wskazywało
do rt_sched_class i utknął na niższym priorytecie Fair_sched_class.
Sprawdzanie sched_change_end() ujawniło następujący wyścig z
__sched_setscheduler() dla zadań znajdujących się w kolejce, ale nie uruchomionych:
Procesor0 Procesor1
==== ====
__harmonogram()
/*
* rq->donor to uczciwe zadanie, które blokuje.
* rq->next_class = &fair_sched_class
*/
rq_lock(rq0)
wybierz_następne_zadanie()
/* nr_running = 0 */
pick_task_fair()
sched_balance_newidle()
raw_spin_rq_unlock(rq0)
rq_lock(rq0)
aktywuj_zadanie(rq0, p)
/* p to uczciwe zadanie */
rq0->nr_running++;
rq0->cfs.h_nr_queued++;
wakeup_preempt(rq, p)
rq->next_class = &fair_sched_class
resched_curr()
rq_odblokuj(rq0)
__sched_setscheduler(p)
/* p zostaje przeniesione do SCHED_RR */
zadanie_rq_lock(p)
sched_change_begin()
rq0->cfs.h_nr_queued--;
rq0->rt.rt_nr_running++;
sched_change_end()
/*
* p->on_rq = 1 (ctx->w kolejce)
* ale p nie jest rq->donorem
* (!ctx->działa) stąd
* resched_curr() to i
* Aktualizacja rq->next_class to
* pominięte.
*/
zadanie_rq_unlock()
raw_spin_rq_lock(rq0)
/*
* rq->nr_running = 1
* rq->cfs.h_nr_queued = 0
* rq->rt.rt_nr_running = 1
* rq->next_class = &fair_sched_class
*/
if (rq->cfs.h_nr_queued && ...)
/* Powyższe jest fałszywe */
if (rq_modified_above(this_rq, &fair_sched_class))
/* Również fałszywe, ponieważ rq->next_class jest nadal poprawne */
/*
* Uważa się, że sched_balance_newidle() jest
* nie udało się wykonać żadnych uczciwych zadań i nie
* Wykryto inne przebudzenia.
*/
zwróć NULL; /* pick_task_fair() */
pick_task_idle()
zwróć rq->bezczynny;
następny = rq->bezczynny;
/* Wskaźniki wywłaszczenia zostały utracone */
clear_tsk_need_resched(poprzednia);
clear_preempt_need_resched();
rq->curr = rq->bezczynność;
!!! rq->idle włącza się z rq->running == 1, ale !need_resched() !!!
Krótko mówiąc, kolejkuj, a następnie zmień klasę nowo ustawionego w kolejce
zadanie pozostaje niezauważone we wskaźniku rq->next_class i
sched_balance_newidle() nie widzi żadnego zadania sprawiedliwego ani żadnego zadania o wyższym priorytecie
w kolejce.
Powyższa sekwencja doprowadzi do bezczynności procesora z możliwym do uruchomienia zadaniem na komputerze
Procesor.
Wywołaj funkcję wakeup_preempt() dla przypadków ctx->kolejkowanych w sched_change_end() w celu
ponownie oceń rq->next_class po zmianie klasy (ENQUEUE_CLASS) i ustaw
odpowiednio wskaźnik NEED_RESCHED.
Bilans Newidle'a poprawnie zobaczy kolejkę o wyższym priorytecie
t
---obcięty---
>_ 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