CVE-2026-31731
Açıklama
Linux kernel'de aşağıdaki güvenlik açığı giderilmiştir: thermal: core: Resume işlemiyle termal bölge kaldırma yarış durumları giderildi thermal_zone_pm_complete() ve thermal_zone_device_resume() fonksiyonları ilgili termal bölge için poll_queue geciktirilmiş işlemini yeniden başlattığından, thermal_zone_device_unregister() içindeki cancel_delayed_work_sync() halihazırda çalışan bazı işlem öğelerini kaçırabilir ve termal bölge vaktinden önce serbest bırakılabilir [1]. Her ikisi de termal bölgelerden biri için thermal_zone_device_unregister() çağrılmadan hemen önce thermal_pm_notify_complete() çalıştırılmasıyla başlayan iki başarısız senaryo bulunmaktadır. İlk senaryoda, thermal_pm_notify_complete() söz konusu termal bölge için thermal_zone_pm_complete() fonksiyonunu çağırdığında, o termal bölge için zaten çalışan bir işlem öğesi vardır ve bu işlem thermal_zone_device_unregister() başladığında çalışmaya devam eder. poll_queue geciktirilmiş işlemi thermal_pm_notify_complete() tarafından yeniden başlatıldığı için, çalışan işlem öğesi thermal_zone_device_unregister() içindeki cancel_delayed_work_sync() tarafından gözden kaçırılacaktır ve eğer termal bölge nesnesinin serbest bırakılmasından sonra da çalışmaya devam ederse, bir serbest bırakıldıktan sonra kullanım (use-after-free) durumu oluşacaktır. İkinci senaryoda, thermal_pm_notify_complete() tarafından kuyruğa alınan thermal_zone_device_resume(), thermal_zone_device_unregister() tarafından çağrılan thermal_zone_exit() geri döndükten hemen sonra çalışır. poll_queue geciktirilmiş işlemi, thermal_zone_device_unregister() tarafından cancel_delayed_work_sync() çağrılmadan önce onun tarafından yeniden başlatılır; bu nedenle termal bölge nesnesinin serbest bırakılmasından sonra çalışmaya devam edebilir, bu da yine bir serbest bırakıldıktan sonra kullanım (use-after-free) durumuna yol açar. İlk başarısız senaryo, thermal_pm_notify_complete() çağrıldığında hiçbir termal işlem öğesinin çalışmadığından emin olunarak giderilmiştir. Bu amaçla, öncelikle yeni işlemlerin iş kuyruğuna girmesini önlemek için cancel_delayed_work() çağrısı thermal_zone_pm_complete()'dan thermal_zone_pm_prepare()'a taşınmıştır. Ardından, termal olaylar için özel bir iş kuyruğu kullanmaya geçilmiş ve thermal_pm_notify() içindeki kod, thermal_pm_notify_prepare() geri döndükten sonra bu iş kuyruğunu boşaltacak şekilde güncellenmiştir; böylece iş kuyruğunda kalan tüm termal işlemler temizlenecektir (bu kalan işlemler zaten hiçbir faydalı işlem yapmayacaktı çünkü tüm termal bölgeler askıya alındı olarak işaretlenmişti). İkinci başarısız senaryo ise, termal bölgenin kaldırılmakta olması durumunda poll_queue geciktirilmiş işleminin yeniden başlatılmasını önlemek amacıyla thermal_zone_device_resume() fonksiyonuna bir tz->state kontrolü eklenerek giderilmiştir. Yukarıdaki değişikliklerin aynı zamanda termal bölgelerin askıya alınma ve devam ettirme işlemlerinin sırasıyla cihazların askıya alınma ve devam ettirme işlemlerine daha yakın konumlara taşınmasını kolaylaştıracağı unutulmamalıdır.
Nasıl düzeltilir
- linux linux_kernel6.12.83, 6.18.22, 6.19.12 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 | 6.8 ≤ v < 6.12.83, 6.13 ≤ v < 6.18.22, 6.19 ≤ v < 6.19.12, 7.0 | 6.12.83, 6.18.22, 6.19.12 |
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.