CVE-2025-71104
Təsvir
Linux nüvəsində aşağıdakı zəiflik aradan qaldırılıb: KVM: x86: dövri HV taymeri ilə uzunmüddətli qeyri-aktivlikdən sonra VM-in sərt kilidlənməsi (hard lockup) probleminin həlli Dövri rejimdə qonağın APIC taymerinin hədəf müddətini irəli çəkərkən, əgər hədəf müddəti keçmişdədirsə, müddəti "indi" olaraq təyin edin (update_target_expiration() funksiyasında edildiyi kimi). Dövrün əvvəlki hədəf müddətinə kor-koranə əlavə edilməsi, vaxtı keçmiş taymerin dəfələrlə proqramlaşdırılması səbəbindən KVM-in praktiki olaraq məhdudiyyətsiz sayda hrtimer IRQ-ları yaratmasına səbəb ola bilər. Ekstremal ssenarilərdə, məsələn, istifadəçi sahəsi bir VM-i uzun müddət dayandırdıqda və ya dondurduqda, bu, host sistemində sərt kilidlənmələrə (hard lockups) belə səbəb ola bilər. Hazırda bu xəta yalnız hipervizor taymerindən (HV timer), yəni VMX preemption taymerindən istifadə edərkən Intel CPU-larına təsir edir. KVM-in istifadəçi sahəsinə çıxışlarda belə işlətməyə davam etdiyi proqram təminatı taymerindən (hrtimer) fərqli olaraq, HV taymeri yalnız qonaq aktiv olduqda işləyir. Nəticədə, əgər vCPU uzun müddət işləmirsə, hədəf müddəti ilə vCPU-nun yenidən işə düşdüyü cari vaxt arasında böyük boşluq yaranacaq. Hədəf müddəti hər taymer bitməsində yalnız bir dövr artırıldığı üçün, bu, vCPU/VM bərpa olunduqdan sonra sürətlə baş verən bir sıra taymer bitmələrini törədir. Daha kritik olan odur ki, vCPU bərpadan sonra ilk dəfə dövri HV taymerinin bitməsini tetikledikdə, müddətin yalnız bir dövr irəli çəkilməsi hədəf müddətinin keçmişdə qalması ilə nəticələnəcək. Bunun nəticəsində delta mənfi dəyər kimi hesablana bilər. Delta mütləq dəyərə çevrildikdə (tscdeadline imzalanmamış u64-dür), alınan dəyər HV taymerinin proqramlaşdıra bildiyi limiti aşa bilər. Yəni, böyük dəyər VMX Preemption Timer-in maksimum bit genişliyini (cpu_preemption_timer_multi + 32) keçəcək və buna görə də KVM-in HV taymerindən proqram təminatı taymerinə (hrtimers) keçməsinə səbəb olacaq. Proqram təminatı taymerinə keçdikdən sonra, dövri taymer bitmə geri çağırışları (callbacks) tək bir saat kəsilmə idarəedicisi (clock interrupt handler) daxilində ardıcıl olaraq icra edilə bilər, çünki hrtimers KVM-in keçmişdəki müddət tələbinə riayət edir və yenidən proqramlaşdırmadan dərhal sonra KVM-in geri çağırışını yenidən başladır. Kəsilmə idarəedicisi IRQ-lar söndürülmüş halda işlədiyi üçün, hədəf müddəti "indi"yə çatana qədər KVM-in hrtimer-ini dəfələrlə yenidən başlatmaq sərt kilidlənməyə (hard lockup) səbəb ola bilər. Məsələn, Windows VM-i işlədərkən (yalnız dövri rejimdə APIC taymerindən istifadə etdiyi üçün aktualdır), VM-in hostda uzunmüddətli dondurulmasından sonra bərpa edilməsi zamanı hostda aşağıdakı sərt kilidlənmə baş vermişdir: 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> Bundan əlavə, virtual maşının dondurulma müddəti bu ssenaridə sərt kilidlənməni tetikləmək üçün kifayət qədər uzun deyilsə, 98c25ead5eda ("KVM: VMX: Move preemption timer <=> hrtimer dance to common x86") commit-indən etibarən, KVM qonaq APIC taymerini hansısa şəkildə yenidən proqramlaşdırana qədər proqram təminatı taymerini istifadə etməyə davam edəcək. Dövri taymer tez-tez APIC taymer registrinə proqramlaşdırma tələb etmədiyinə görə, qonaq proqram təminatı taymerini istifadə etməyə davam edə bilər.
Necə düzəltmək olar
- linux linux_kernel4.15, 4.17, 5.10.248, 5.15.198, 6.1.160, 6.6.120, 6.12.64, 6.18.3 və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| 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 |
Versiyanızı yoxlayın
Məhsulu seçin və istifadə etdiyiniz versiyanı yazın; versiyanın təsirlənən aralıqda olub-olmadığını görün.
Attack Surface Management
Domenlərinizə bağlı aktivləri, onlarda işləyən texnologiyaları və məlum zəiflikləri bir siyahıda görün.