CVE-2026-45949
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: hwrng: core - yarış durumunu (race condition) düzeltmek için RCU ve work_struct kullanımı Mevcut durumda, hwrng_fillfn() iş parçacığı çıkış yapana kadar hwrng_fill temizlenmemektedir. hwrng_unregister() fonksiyonu hwrng_fill değerini rng_mutex kilidi dışında okuduğu için, eşzamanlı bir hwrng_unregister() çağrısı aynı görev üzerinde tekrar kthread_stop() fonksiyonunu çağırabilir. Ek olarak, hwrng_unregister() fonksiyonu hwrng_register()'dan hemen sonra çağrılırsa, durdurulan iş parçacığı hiç çalıştırılmamış olabilir. Bu nedenle, hwrng_unregister() geri döndükten sonra bile hwrng_fill kirli kalmaya devam eder. Bu durumda, hwrng_register()'a yapılan sonraki çağrılar yeni iş parçacıkları başlatmada başarısız olacak ve hwrng_unregister() serbest bırakılmış aynı görev üzerinde kthread_stop() fonksiyonunu çağıracaktır. Her iki durumda da bir serbest bırakıldıktan sonra kullanım (use-after-free) durumu oluşur: refcount_t: addition on 0; use-after-free. WARNING: ... at lib/refcount.c:25 refcount_warn_saturate+0xec/0x1c0 Call Trace: kthread_stop+0x181/0x360 hwrng_unregister+0x288/0x380 virtrng_remove+0xe3/0x200 Bu yama, küresel hwrng_fill işaretçisini rng_mutex kilidi içinde koruyarak yarışı düzeltir; böylece hwrng_fillfn() iş parçacığı yalnızca bir kez durdurulur ve kthread_run() ile kthread_stop() çağrıları kilit tutularak sıraya konur. Kilit tutulurken durdurulma sırasında hwrng_fillfn() içerisinde ölü kilitleme (deadlock) oluşmasını önlemek için current_rng'yi RCU'ya dönüştürüyoruz, böylece get_current_rng() kilidi tutmadan current_rng değerini okuyabilir. put_rng() fonksiyonundan kilidi kaldırmak için gerçek temizleme işlemini bir work_struct içine erteliyoruz. get_current_rng() artık ERR_PTR değerleri döndürmediği için, onu çağıran yerlerdeki IS_ERR() kontrolleri kaldırılmıştır. hwrng_fill, rng_mutex kilidi tarafından korunduğundan, hwrng_fillfn() artık hwrng_fill değerini kendisi temizleyemez. Bu nedenle, eğer hwrng_fillfn() current_rng bırakıldıktan hemen sonra dönerse, daha sonra serbest bırakılmış bir task_struct üzerinde kthread_stop() çağrılacaktır. Bunu düzeltmek için hwrng_fillfn(), durdurulana kadar görevi hayatta tutmak amacıyla artık schedule() fonksiyonunu çağırır. kthread_stop() çağrısı ayrıca hwrng_unregister() fonksiyonundan drop_current_rng() fonksiyonuna taşınmıştır; bu sayede current_rng'nin NULL olduğu tüm olası yollarda kthread_stop() çağrılması sağlanarak iş parçacığının sonsuza kadar beklemesi önlenmiştir.
Nasıl düzeltilir
- linux linux_kernel6.12.75, 6.18.14, 6.19.4 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| linux linux_kernel | 3.17 ≤ v < 6.12.75, 6.13 ≤ v < 6.18.14, 6.19 ≤ v < 6.19.4 | 6.12.75, 6.18.14, 6.19.4 |
| microsoft azl3_kernel_6.6.150.1-1 | Aralık belirtilmemiş | — |
| microsoft azl3_kernel_6.6.157.1-1 | Aralık belirtilmemiş | — |
| microsoft azl3_kernel_6.6.139.1-1 | Aralık belirtilmemiş | — |
| microsoft azl3_kernel_6.6.141.1-1 | Aralık belirtilmemiş | — |
| microsoft azl3_kernel_6.6.143.1-1 | Aralık belirtilmemiş | — |
| microsoft azl3_kernel_6.6.144.1-1 | Aralık belirtilmemiş | — |
| microsoft azl3_kernel_6.6.145.2-1 | Aralık belirtilmemiş | — |
| microsoft azl3_kernel_6.6.152.1-1 | Aralık belirtilmemiş | — |
| microsoft azl3_kernel_6.6.159.1-1 | Aralık belirtilmemiş | — |
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.