CVE-2026-23005
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: x86/fpu: XFD[i]=1 olduğu her durumda konuk XSAVE durumundaki XSTATE_BV[i] temizlenir KVM_SET_XSAVE aracılığıyla konuk XSAVE durumu yüklenirken ve bir konuk WRMSR yanıtı olarak XFD güncellenirken, KVM'nin konuğun XFD'si üzerinden devre dışı bırakılan özellikler için durum yüklemeye çalışmadığından emin olmak amacıyla kaydedilen (veya geri yüklenecek olan) XSTATE_BV içindeki XFD tarafından devre dışı bırakılmış özellikler temizlenir. Kernel, XRSTOR işlemini konuğun XFD değeri ile yürüttüğü için, XFD[i]=1 iken XSTATE_BV[i]=1 değerinin kaydedilmesi, XRSTOR'un #NM üretmesine ve kernel paniğine yol açacaktır. Örneğin, fpu_update_guest_xfd() fonksiyonu XSTATE_BV'yi temizlemeden XFD'yi ayarlarsa: ------------[ cut here ]------------ WARNING: arch/x86/kernel/traps.c:1524 at exc_device_not_available+0x101/0x110, CPU#29: amx_test/848 Modules linked in: kvm_intel kvm irqbypass CPU: 29 UID: 1000 PID: 848 Comm: amx_test Not tainted 6.19.0-rc2-ffa07f7fd437-x86_amx_nm_xfd_non_init-vm #171 NONE Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015 RIP: 0010:exc_device_not_available+0x101/0x110 Call Trace: <TASK> asm_exc_device_not_available+0x1a/0x20 RIP: 0010:restore_fpregs_from_fpstate+0x36/0x90 switch_fpu_return+0x4a/0xb0 kvm_arch_vcpu_ioctl_run+0x1245/0x1e40 [kvm] kvm_vcpu_ioctl+0x2c3/0x8f0 [kvm] __x64_sys_ioctl+0x8f/0xd0 do_syscall_64+0x62/0x940 entry_SYSCALL_64_after_hwframe+0x4b/0x53 </TASK> ---[ end trace 0000000000000000 ]--- Bu durum, konuğun XFD[18] = 1 yapmak için WRMSR(MSR_IA32_XFD) yürütmesi ve vmexit işleyicisinin fpu_update_guest_xfd() çağrısından önce bir ana bilgisayar IRQ'sunun kernel_fpu_begin() işlemini tetiklemesi durumunda gerçekleşebilir. Ve eğer kullanıcı alanı KVM_SET_XSAVE aracılığıyla XSTATE_BV[i]=1 değerini girerse: ------------[ cut here ]------------ WARNING: arch/x86/kernel/traps.c:1524 at exc_device_not_available+0x101/0x110, CPU#14: amx_test/867 Modules linked in: kvm_intel kvm irqbypass CPU: 14 UID: 1000 PID: 867 Comm: amx_test Not tainted 6.19.0-rc2-2dace9faccd6-x86_amx_nm_xfd_non_init-vm #168 NONE Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015 RIP: 0010:exc_device_not_available+0x101/0x110 Call Trace: <TASK> asm_exc_device_not_available+0x1a/0x20 RIP: 0010:restore_fpregs_from_fpstate+0x36/0x90 fpu_swap_kvm_fpstate+0x6b/0x120 kvm_load_guest_fpu+0x30/0x80 [kvm] kvm_arch_vcpu_ioctl_run+0x85/0x1e40 [kvm] kvm_vcpu_ioctl+0x2c3/0x8f0 [kvm] __x64_sys_ioctl+0x8f/0xd0 do_syscall_64+0x62/0x940 entry_SYSCALL_64_after_hwframe+0x4b/0x53 </TASK> ---[ end trace 0000000000000000 ]--- Yeni davranış AMX mimarisi ile tutarlıdır. Intel'in SDM dokümanına göre, XSAVE, XFD aracılığıyla devre dışı bırakılan bileşenler için XSTATE_BV'yi '0' olarak kaydeder (ve sıkıştırılmamış XSAVE, durum bileşeninin başlangıç yapılandırmasını kaydeder): XSAVE, XSAVEC, XSAVEOPT veya XSAVES durum bileşeni i'yi kaydediyorsa, talimat XCR0[i] = IA32_XFD[i] = 1 olduğunda #NM oluşturmaz; bunun yerine, XINUSE[i] = 0 imiş gibi (ve durum bileşeni başlangıç durumundaymış gibi) çalışır: XSAVE başlığının XSTATE_BV alanının i. bitini 0 olarak kaydeder; ek olarak, XSAVE durum bileşeninin başlangıç yapılandırmasını kaydeder (diğer talimatlar durum bileşeni i'yi kaydetmez). Alternatif olarak KVM, örneğin bir struct fpu_guest için XSAVE işlemi yaparken etkinleştirilen özellikler kümesine dayalı sabit bir XFD kullanarak her zaman XFD=0 ile XRSTOR gerçekleştirebilirdi. Ancak, XFD ile devre dışı bırakılmış özellikler için XSTATE_BV[i]=1 olması yalnızca yukarıdaki kesme durumunda veya öncelikli kernellerdeki benzer önleme (preemption) senaryolarında meydana gelebilir; çünkü fpu_swap_kvm_fpstate()'in save_fpregs_to_fpstate() çağrısı, giden FPU durumunu mevcut XFD ile kaydeder ve bu da (XFD'ye yapılan ilk WRMSR hariç tüm durumlarda) konuk XFD'dir. Bu nedenle, XFD yalnızca yukarıdaki kesme durumunda veya öncelikli kernellerdeki benzer önleme senaryolarında XSTATE_BV ile senkronizasyon dışına çıkabilir ve KVM_GET_XSAVE'in XFD ile devre dışı bırakılmış özellikler için XSTATE_BV[i]=0 döndürmesini (fiili olarak) KVM ABI'sinin bir parçası olarak kabul edebiliriz.
Nasıl düzeltilir
- linux linux_kernel6.1.162, 6.6.122, 6.12.67, 6.18.7 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 | 5.17.1 ≤ v < 6.1.162, 6.2 ≤ v < 6.6.122, 6.7 ≤ v < 6.12.67, 6.13 ≤ v < 6.18.7, 5.17, 6.19 | 6.1.162, 6.6.122, 6.12.67, 6.18.7 |
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.