CVE-2025-71104
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: KVM: x86: Periyodik HV zamanlayıcısı ile uzun süreli hareketsizlik sonrası oluşan VM hard lockup hatası düzeltildi Konuk sistemin periyodik moddaki APIC zamanlayıcısının hedef sona erme süresi ilerletilirken, eğer hedef sona erme süresi geçmişte kalmışsa, sona erme süresi "şimdi" olarak ayarlanır (update_target_expiration() fonksiyonunda yapıldığına benzer şekilde). Önceki hedef sona erme süresine körü körüne periyot eklemek, süresi dolmuş bir zamanlayıcının tekrar tekrar programlanması nedeniyle KVM'nin pratik olarak sınırsız sayıda hrtimer IRQ üretmesine yol açabilir. Aşırı senaryolarda, örneğin kullanıcı alanının bir VM'yi uzun süre duraklatması/askıya alması durumunda, bu durum ana makinede (host) hard lockup oluşmasına neden olabilir. Şu anda hata, yalnızca hipervizör zamanlayıcısı (HV timer) yani VMX preemption timer kullanıldığında Intel CPU'ları etkilemektedir. KVM'nin kullanıcı alanına çıkışlarda bile çalışmaya devam ettiği yazılım zamanlayıcısının (hrtimer) aksine, HV zamanlayıcısı yalnızca konuk aktif olduğunda çalışır. Sonuç olarak, vCPU uzun süre çalışmazsa, hedef sona erme süresi ile vCPU'nun yeniden çalışmaya başladığı mevcut zaman arasında büyük bir boşluk oluşur. Hedef sona erme süresi her zamanlayıcı sona ermesinde yalnızca bir periyot artırıldığı için, bu durum vCPU/VM yeniden başladıktan sonra hızla gerçekleşen bir dizi zamanlayıcı sona ermesine yol açar. Daha kritik olanı, vCPU yeniden başladıktan sonra ilk kez periyodik bir HV zamanlayıcısı sona ermesini tetiklediğinde, sona ermeyi yalnızca bir periyot ilerletmek, geçmişte kalan bir hedef sona erme süresiyle sonuçlanacaktır. Bunun sonucunda, fark negatif bir değer olarak hesaplanabilir. Fark mutlak değere dönüştürüldüğünde (tscdeadline işaretsiz bir u64'tür), ortaya çıkan değer HV zamanlayıcısının programlayabileceği kapasiteyi aşabilir. Yani büyük değer, VMX Preemption Timer'ın maksimum bit genişliği olan cpu_preemption_timer_multi + 32 değerini aşacak ve böylece KVM'nin HV zamanlayıcısından yazılım zamanlayıcısına (hrtimers) geçiş yapmasına neden olacaktır. Yazılım zamanlayıcısına geçildikten sonra, hrtimers KVM'nin geçmişteki bir sona erme talebine uyduğu ve yeniden programlamadan hemen sonra KVM'nin geri çağırma işlemini (callback) tekrar başlattığı için, periyodik zamanlayıcı sona erme geri çağırmaları tek bir saat kesmesi (clock interrupt) yöneticisi içinde ardışık olarak yürütülebilir. Kesme yöneticisi IRQ'lar devre dışıyken çalıştığından, hedef sona erme süresi "şimdi"ye ilerletilene kadar KVM'nin hrtimer'ını tekrar tekrar başlatmak hard lockup ile sonuçlanabilir. Örneğin, Windows VM çalıştırılırken (yalnızca APIC zamanlayıcısını periyodik modda kullandığı için ilgili), VM'nin uzun bir askıya alma işleminden sonra yeniden başlatılmasıyla ana makinede şu hard lockup tetiklenmiştir: NMI watchdog: Watchdog detected hard LOCKUP on cpu 45 ... RIP: 0010:advance_periodic_target_expiration+0x4d/0x80 [kvm] ... RSP: 0018:ff4f88f5d98d8ef0 EFLAGS: 00000046 RAX: fff0103f91be678e RBX: fff0103f91be678e RCX: 00843a7d9e127bcc RDX: 0000000000000002 RSI: 0052ca4003697505 RDI: ff440d5bfbdbd500 RBP: ff440d5956f99200 R08: ff2ff2a42deb6a84 R09: 000000000002a6c0 R10: 0122d794016332b3 R11: 0000000000000000 R12: ff440db1af39cfc0 R13: ff440db1af39cfc0 R14: ffffffffc0d4a560 R15: ff440db1af39d0f8 FS: 00007f04a6ffd700(0000) GS:ff440db1af380000(0000) knlGS:000000e38a3b8000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 000000d5651feff8 CR3: 000000684e038002 CR4: 0000000000773ee0 PKRU: 55555554 Call Trace: <IRQ> apic_timer_fn+0x31/0x50 [kvm] __hrtimer_run_queues+0x100/0x280 hrtimer_interrupt+0x100/0x210 ? ttwu_do_wakeup+0x19/0x160 smp_apic_timer_interrupt+0x6a/0x130 apic_timer_interrupt+0xf/0x20 </IRQ> Ayrıca, sanal makinenin askıya alınma süresi bu senaryoda bir hard lockup tetikleyecek kadar uzun değilse, 98c25ead5eda ("KVM: VMX: Move preemption timer <=> hrtimer dance to common x86") commit'inden itibaren KVM, konuk sistemi APIC zamanlayıcısını bir şekilde yeniden programlayana kadar yazılım zamanlayıcısını kullanmaya devam edecektir. Periyodik zamanlayıcı sık APIC zamanlayıcı kaydedici programlama gerektirmediğinden, konuk sistem yazılım zamanlayıcısını kullanmaya devam edebilir.
Nasıl düzeltilir
- linux linux_kernel4.15, 4.17, 5.10.248, 5.15.198, 6.1.160, 6.6.120, 6.12.64, 6.18.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 | 4.14.45 ≤ v < 4.15, 4.16.13 ≤ v < 4.17, 4.17.1 ≤ v < 5.10.248, 5.11 ≤ v < 5.15.198, 5.16 ≤ v < 6.1.160, 6.2 ≤ v < 6.6.120, 6.7 ≤ v < 6.12.64, 6.13 ≤ v < 6.18.3, 4.17, 6.19 | 4.15, 4.17, 5.10.248, 5.15.198, 6.1.160, 6.6.120, 6.12.64, 6.18.3 |
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.