CVE-2024-35809
Açıklama
Linux çekirdeğinde aşağıdaki güvenlik açığı giderilmiştir: PCI/PM: Sürücü kaldırılmadan önce runtime-idle geri çağrılarını boşalt rtsx_pcr PCI sürücüsündeki .runtime_idle() geri çağrısı ile .remove() geri çağrısı arasındaki yarış durumu, işlenmeyen bir sayfa hatası nedeniyle çekirdek çökmesine yol açar [1]. Sorun, pm_runtime_get_sync() çağrıldıktan sonra rtsx_pci_runtime_idle() işlevinin çalışıyor olmasının beklenmemesidir, ancak ikincisi bunu gerçekten garanti etmez. Yalnızca döndüğünde askıya alma ve devam ettirme geri çağrılarının çalışmıyor olacağını garanti eder. Ancak, pm_runtime_get_sync() çağrıldığında bir .runtime_idle() geri çağrısı zaten çalışıyorsa, ikincisi aygıtın runtime PM durumunun RPM_ACTIVE olduğunu fark eder ve birincisinin tamamlanmasını beklemeden hemen döner. Aslında, .runtime_idle() işlevinin tamamlanmasını bekleyemez çünkü bu geri çağrıdan çağrılabilir (bunu yapmak tartışmalı olarak pek mantıklı değildir, ancak kesinlikle yasak değildir). Bu nedenle genel olarak, bir .runtime_idle() geri çağrısı sağlayan herkesin, onu pm_runtime_get_sync() sonrasında çalışan herhangi bir kodla paralel olarak çalışmaktan koruması gerekir. [Unutmayın ki .runtime_idle(), pm_runtime_get_sync() döndükten sonra başlamaz, ancak daha önce başlamışsa o zaman çalışmaya devam edebilir.] Bu yarış durumunu ele almanın bir yolu, .runtime_idle() geri çağrısının o noktada çalışıyor olması durumunda tamamlanmasını beklemek için pm_runtime_get_sync() sonrasında (öncesinde değil, çünkü runtime PM geri çağrılarının çağrılmasını önlemek için runtime PM kullanım sayacının sıfır olmayan bir değere sahip olması gerekir) pm_runtime_barrier() çağırmaktır. Bunu yapmak için uygun bir yer, sürücüyü kaldırmadan önce pm_runtime_get_sync() çağıran pci_device_remove() işlevidir, bu nedenle ardından pm_runtime_barrier() çağırması da uygundur; bu, söz konusu yarışın yalnızca rtsx_pcr sürücüsünde değil, .runtime_idle() geri çağrıları sağlayan herhangi bir PCI sürücüsünde de oluşmasını önler.
Nasıl düzeltilir
- linux linux_kernel4.19.312, 5.4.274, 5.10.215, 5.15.154, 6.1.84, 6.6.24, 6.7.12, 6.8.3 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 | v < 4.19.312, 4.20 ≤ v < 5.4.274, 5.5 ≤ v < 5.10.215, 5.11 ≤ v < 5.15.154, 5.16 ≤ v < 6.1.84, 6.2 ≤ v < 6.6.24, 6.7 ≤ v < 6.7.12, 6.8 ≤ v < 6.8.3 | 4.19.312, 5.4.274, 5.10.215, 5.15.154, 6.1.84, 6.6.24, 6.7.12, 6.8.3 |
| debian debian_linux | 10.0 | — |
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.