CVE-2026-98260
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
W jądrze Linuksa usunięto następującą lukę:
exec: Oczyść timery POSIX zaraz po de_thread()
Zegar procesora na wątek przechowuje odniesienie do PID wątku, którym jest
podłączony do i, gdy jest uzbrojony, jego węzeł znajduje się w kolejce w tym wątku
posix_cputimers. Zadanie jest sprawdzane według tego PID.
Kiedy wątek niebędący liderem exec()s, de_thread() zmienia, które zadanie jest jego właścicielem
ten PID. pid_task(timer->it.cpu.pid, PIDTYPE_PID) następnie zwraca NULL,
ale węzeł nadal znajduje się w kolejce na tsk, który żyje. timer_lock_sighand()
przyjmuje, że wyszukiwanie nie powiodło się, co oznacza, że węzeł został już usunięty z kolejki, więc tak się dzieje
nie ma nic do odkręcenia.
Begin_new_exec() wywołuje posix_cpu_timers_exit(me) zaraz po
exec_task_namespaces() i usuwa pozostały węzeł, więc stan
zwykle pozostaje niewidoczny. Ale bprm->point_of_no_return jest ustawione wcześniej
de_thread(), więc jeśli unshare_files(), set_mm_exe_file(), exec_mmap() lub
exec_task_namespaces() kończy się niepowodzeniem, zadanie umiera, zanim dotrze na miejsce.
exit_timers() następnie zwalnia k_timer, gdy jego węzeł jest nadal w kolejce,
a późniejsze wykorzystanie tsk usuwa uwolniony węzeł z drzewa rbtree.
W skrócie:
wątek niebędący liderem B rodzic
timer_create(CLOCK_THREAD_CPUTIME_ID)
timer_settime()
arm_timer() // węzeł znajduje się w kolejce na B
dyrektor()
de_wątek(B)
Exchange_tids(B, lider) // PID B należy teraz do lidera
wydanie_zadanie(lider)
__exit_signal(lider)
posix_cpu_timers_exit(leader) // czyści kolejkę lidera, a nie B
__unhash_process(leader) // ten PID nie ma już żadnego zadania
exec_mmap()
mmap_read_lock_killable(old_mm)
zabij(B, SIGKILL)
// -EINTR
get_signal()
wykonaj_wyjście()
wyjścia_timery()
posix_timer_delete()
posix_cpu_timer_del()
posix_timer_unhash_and_free() // zwolniony, gdy nadal znajduje się w kolejce
czekaj4()
wydanie_zadania(B)
posix_cpu_timers_exit(B)
kolejka_czasu czyszczenia()
timerqueue_del() // użyj po zwolnieniu
Przenieś czyszczenie timera POSIX zaraz po de_thread() przed którymkolwiek z
późniejsze warunki niepowodzenia powodują przejście zadania do_exit().
[ tglx: Przenieś czyszczenie zaraz po de_thread() ]
>_ Referencje
- https://git.kernel.org/stable/c/6f1977cea3e85cd8ab55fb337d3e1725fe61d1ce
- https://git.kernel.org/stable/c/75aa08b93c65766040f9ca99f41ac85ad22596b6
- https://git.kernel.org/stable/c/acb03d3881818581052924a9bbbe92b8741ed448
- https://git.kernel.org/stable/c/d602877baf36c43c788a5f472c977e0be414029f
- https://git.kernel.org/stable/c/d9ae467e617ca29b825493a362bf0d75ad5f4ac3
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