CVE-2026-90003
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
W jądrze Linuksa usunięto następującą lukę:
futex: Zapobiega używaniu rcuwait po zwolnieniu podczas ponownego kolejkowania PI
Na PREEMPT_RT FUTEX_CMP_REQUEUE_PI może wywołać raport KASAN
(płyta poza granicami) w wywołaniu futex_requeue_pi_complete().
rcuwait_wake_up().
Futex_q używany przez futex_wait_requeue_pi() jest przydzielany na serwerze kelnera
stos. Wczesne wybudzenie może wiązać się z ponownym kolejkowaniem PI w następujący sposób:
zadanie ponownego kolejkowania kelnera
------ ------------
futex_wait_requeue_pi()
futex_do_wait()
harmonogram()
futex_requeue
futex_proxy_trylock_atomic()
futex_requeue_pi_prepare()
Q_REQUEUE_PI_NONE -> Q_REQUEUE_PI_IN_PROGRESS
*przekroczenie limitu czasu/sygnał budzi kelnera*
futex_requeue_pi_wakeup_sync()
Q_REQUEUE_PI_IN_PROGRESS -> Q_REQUEUE_PI_WAIT
requeue_pi_wake_futex
futex_requeue_pi_complete()
cmpxchg Q_REQUEUE_PI_WAIT -> Q_REQUEUE_PI_LOCKED
rcuwait_wait_event()
if (atomic_read(&q->requeue_state) != Q_REQUEUE_PI_WAIT)
przerwa /* brak harmonogramu() */
/* q.pi_state->właściciel == bieżący */
futex_private_hash_put()
/* powrót z wywołania systemowego */
rcuwait_wake_up(&q->requeue_wait)
/* q zniknął */
futex_requeue_pi_complete() publikuje wcześniej Q_REQUEUE_PI_LOCKED
wywołując funkcję rcuwait_wake_up(). Kelner obserwuje ten stan w
rcuwait_wait_event() przed wywołaniem funkcji Schedule() w funkcji rcuwait_wait_event().
W tym przypadku kelner może opuścić wywołanie systemowe, zanim zadanie ponownego kolejkowania będzie mogło
dokończ budzenie.
Aby rozwiązać ten wyścig, pomiń rcuwait_wake_up() w Q_REQUEUE_PI_LOCKED
sprawa.
Stan ten jest publikowany jedynie przez funkcję requeue_pi_wake_futex(), która zapisuje
q->zadanie przed futex_requeue_pi_complete() i budzi kelnera przez
stan_pobudki().
To wybudzenie ma na celu wybudzenie kelnera ze stanu uśpienia futex_do_wait().
Jeśli kelner nadal tam śpi, nie może wejść do środka
Stan Q_REQUEUE_PI_WAIT (i wymaga usunięcia tego wybudzenia).
Czy należy obudzić kelnera z funkcji futex_do_wait() w inny sposób (np
ten przykład) i śpij w futex_requeue_pi_wakeup_sync(), a następnie
wake_up_state() z requeue_pi_wake_futex() również go obudzi.
Czy zadanie kelnera powinno zakończyć się, zanim funkcja wake_up_state() miała na to szansę
obudź zadanie, wskaźnik zadania nie stanie się nieprawidłowy, ponieważ
futex_hash_bucket::lock jest utrzymywany, a wskaźnik zadania jest chroniony przez RCU.
[bigeasy: Zaktualizowano komentarz i wiadomość o zatwierdzeniu]
>_ Referencje
- https://git.kernel.org/stable/c/220ee9e04ca3b7f014c000264aa6c884f036c86e
- https://git.kernel.org/stable/c/244f301759fd34b1dd0b4192ce44f8ef224e027d
- https://git.kernel.org/stable/c/7d1559126d86be6e4f6a85663dfbfe85caa47e37
- https://git.kernel.org/stable/c/81aadbd09bf1dcd3238212f336ba699503557ae8
- https://git.kernel.org/stable/c/a3b8d46fe401cba3a5c46dea610e6eb3dc15370e
- https://git.kernel.org/stable/c/e4a4ccfa470f910b747b3ee8d18670ed8ac8a236
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