CVE-2026-90003
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: futex: requeue PI sırasında rcuwait serbest bırakıldıktan sonra kullanım (use-after-free) hatasının önlenmesi PREEMPT_RT üzerinde, FUTEX_CMP_REQUEUE_PI, futex_requeue_pi_complete() içindeki rcuwait_wake_up() çağrısı sırasında bir KASAN raporunu (slab-out-of-bounds) tetikleyebilir. futex_wait_requeue_pi() tarafından kullanılan futex_q, bekleyen işlemin yığınında (stack) tahsis edilir. Erken bir uyandırma işlemi, bir PI requeue ile şu şekilde yarışabilir: 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 * zaman aşımı/sinyal bekleyiciyi uyandırır * 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 /* schedule() yok */ /* q.pi_state->owner == current */ futex_private_hash_put() /* sistem çağrısından dönüş */ rcuwait_wake_up(&q->requeue_wait) /* q artık mevcut değil */ futex_requeue_pi_complete(), rcuwait_wake_up() fonksiyonunu çağırmadan önce Q_REQUEUE_PI_LOCKED durumunu yayınlar. Bekleyen işlem, rcuwait_wait_event() içinde schedule() fonksiyonunu çağırmadan önce bu durumu gözlemler. Burada bekleyen işlem, requeue görevi uyandırmayı tamamlamadan önce sistem çağrısından ayrılabilir. Bu yarışı gidermek için Q_REQUEUE_PI_LOCKED durumunda rcuwait_wake_up() adımı atlanır. Bu durum yalnızca, futex_requeue_pi_complete() öncesinde q->task bilgisini kaydeden ve bekleyen işlemi wake_up_state() aracılığıyla uyandıran requeue_pi_wake_futex() tarafından yayınlanır. Bu uyandırma, bekleyen işlemi futex_do_wait() uykusundan uyandırmak için tasarlanmıştır. Eğer bekleyen işlem hala orada uyuyorsa, Q_REQUEUE_PI_WAIT durumuna giremez (ve kaldırılan bu uyandırmaya ihtiyaç duymaz). Bekleyen işlem başka yollarla (bu örnekteki gibi) futex_do_wait()'den uyandırılırsa ve futex_requeue_pi_wakeup_sync() içinde uyursa, requeue_pi_wake_futex() içerisindeki wake_up_state() onu da uyandıracaktır. Bekleyen görev, wake_up_state() görevi uyandırma fırsatı bulmadan sonlanırsa, futex_hash_bucket::lock tutulduğu ve görev işaretçisi RCU ile korunduğu için görev işaretçisi geçersiz hale gelmez. [bigeasy: Yorum ve commit mesajı güncellendi]
Nasıl düzeltilir
- Linux Linux220ee9e04ca3b7f014c000264aa6c884f036c86e, 81aadbd09bf1dcd3238212f336ba699503557ae8, 244f301759fd34b1dd0b4192ce44f8ef224e027d, 7d1559126d86be6e4f6a85663dfbfe85caa47e37, e4a4ccfa470f910b747b3ee8d18670ed8ac8a236, a3b8d46fe401cba3a5c46dea610e6eb3dc15370e ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| 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 |
Sürümünüzü kontrol edin
Ürünü seçin ve kullandığınız sürümü yazın; sürümün etkilenen aralıkta olup olmadığını görün.
Attack Surface Management
Alan adlarınıza bağlı varlıkları, bu varlıklarda çalışan teknolojileri ve bilinen zafiyetleri tek listede görün.