CVE-2026-90003
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılmışdır: futex: requeue PI zamanı rcuwait use-after-free xətasının qarşısının alınması PREEMPT_RT-də, FUTEX_CMP_REQUEUE_PI funksiyası futex_requeue_pi_complete() daxilindəki rcuwait_wake_up() çağırışı zamanı KASAN hesabatını (slab-out-of-bounds) tetikləyə bilər. futex_wait_requeue_pi() tərəfindən istifadə edilən futex_q gözləyicinin stekində ayrılır. Erkən oyanma, PI requeue ilə aşağıdakı kimi yarışa (race condition) girə bilər: waiter requeue task ------ ------------ futex_wait_requeue_pi() futex_do_wait() schedule() futex_requeue futex_proxy_trylock_atomic() futex_requeue_pi_prepare() Q_REQUEUE_PI_NONE -> Q_REQUEUE_PI_IN_PROGRESS * timeout/ signal wakes waiter * 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) break /* no schedule() */ /* q.pi_state->owner == current */ futex_private_hash_put() /* return from syscall */ rcuwait_wake_up(&q->requeue_wait) /* q is gone */ futex_requeue_pi_complete() funksiyası rcuwait_wake_up() çağırmazdan əvvəl Q_REQUEUE_PI_LOCKED vəziyyətini yayımlayır. Gözləyici, rcuwait_wait_event() daxilində schedule() çağırmazdan əvvəl bu vəziyyəti müşahidə edir. Burada gözləyici, requeue tapşırığı oyanmanı tamamlamazdan əvvəl sistem çağırışından çıxa bilir. Bu yarışı həll etmək üçün Q_REQUEUE_PI_LOCKED halında rcuwait_wake_up() ötürülür. Bu vəziyyət yalnız requeue_pi_wake_futex() tərəfindən yayımlanır ki, o da futex_requeue_pi_complete()-dən əvvəl q->task-ı saxlayır və gözləyicini wake_up_state() vasitəsilə oyadır. Bu oyanma, gözləyicini futex_do_wait() yuxusundan oyatmaq üçün nəzərdə tutulub. Əgər gözləyici hələ də orada yatırsa, o, Q_REQUEUE_PI_WAIT vəziyyətinə keçə bilməz (və silinmiş bu oyanmaya ehtiyac duymaz). Gözləyici digər vasitələrlə (bu nümunədə olduğu kimi) futex_do_wait()-dən oyandırılarsa və futex_requeue_pi_wakeup_sync()-də yatarsa, requeue_pi_wake_futex()-dən gələn wake_up_state() onu da oyadacaqdır. Əgər gözləyici tapşırığı wake_up_state() onu oyada bilməzdən əvvəl sonlandırdısa, tapşırıq göstəricisi (pointer) etibarsızləşmir, çünki futex_hash_bucket::lock saxlanılır və tapşırıq göstəricisi RCU ilə qorunur. [bigeasy: Şərh və commit mesajı yeniləndi]
Necə düzəltmək olar
- Linux Linux220ee9e04ca3b7f014c000264aa6c884f036c86e, 81aadbd09bf1dcd3238212f336ba699503557ae8, 244f301759fd34b1dd0b4192ce44f8ef224e027d, 7d1559126d86be6e4f6a85663dfbfe85caa47e37, e4a4ccfa470f910b747b3ee8d18670ed8ac8a236, a3b8d46fe401cba3a5c46dea610e6eb3dc15370e və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| Linux Linux | 07d91ef510fb16a2e0ca7453222105835b7ba3b8 ≤ v < 220ee9e04ca3b7f014c000264aa6c884f036c86e, 07d91ef510fb16a2e0ca7453222105835b7ba3b8 ≤ v < 81aadbd09bf1dcd3238212f336ba699503557ae8, 07d91ef510fb16a2e0ca7453222105835b7ba3b8 ≤ v < 244f301759fd34b1dd0b4192ce44f8ef224e027d, 07d91ef510fb16a2e0ca7453222105835b7ba3b8 ≤ v < 7d1559126d86be6e4f6a85663dfbfe85caa47e37, 07d91ef510fb16a2e0ca7453222105835b7ba3b8 ≤ v < e4a4ccfa470f910b747b3ee8d18670ed8ac8a236, 07d91ef510fb16a2e0ca7453222105835b7ba3b8 ≤ v < a3b8d46fe401cba3a5c46dea610e6eb3dc15370e, 5.15 | 220ee9e04ca3b7f014c000264aa6c884f036c86e, 81aadbd09bf1dcd3238212f336ba699503557ae8, 244f301759fd34b1dd0b4192ce44f8ef224e027d, 7d1559126d86be6e4f6a85663dfbfe85caa47e37, e4a4ccfa470f910b747b3ee8d18670ed8ac8a236, a3b8d46fe401cba3a5c46dea610e6eb3dc15370e |
Versiyanızı yoxlayın
Məhsulu seçin və istifadə etdiyiniz versiyanı yazın; versiyanın təsirlənən aralıqda olub-olmadığını görün.
Attack Surface Management
Domenlərinizə bağlı aktivləri, onlarda işləyən texnologiyaları və məlum zəiflikləri bir siyahıda görün.