CVE-2026-23005
Təsvir
Linux nüvəsində aşağıdakı zəiflik aradan qaldırılmışdır: x86/fpu: XFD[i]=1 olduqda qonaq XSAVE vəziyyətində XSTATE_BV[i]-ni təmizləyin KVM_SET_XSAVE vasitəsilə qonaq XSAVE vəziyyəti yüklənərkən və qonaq WRMSR-ə cavab olaraq XFD yenilənərkən, KVM-in qonağın XFD-si vasitəsilə deaktiv edilmiş funksiyalar üçün vəziyyəti yükləməyə çalışmadığından əmin olmaq üçün yadda saxlanılan (və ya bərpa ediləcək) XSTATE_BV-də XFD ilə deaktiv edilmiş funksiyaları təmizləyin. Nüvə XRSTOR-u qonağın XFD-si ilə icra etdiyi üçün, XFD[i]=1 olduğu halda XSTATE_BV[i]=1 kimi yadda saxlanılması XRSTOR-un #NM yaratmasına və nüvənin panikasına (panic) səbəb olacaqdır. Məsələn, əgər fpu_update_guest_xfd() XSTATE_BV-ni təmizləmədən XFD-ni təyin edərsə: ------------[ 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, qonaq XFD[18] = 1 təyin etmək üçün WRMSR(MSR_IA32_XFD) icra etdikdə və host IRQ, vmexit idarəçisinin fpu_update_guest_xfd() çağırışından əvvəl kernel_fpu_begin()-i tetikledikdə baş verə bilər. Və əgər istifadəçi sahəsi (userspace) KVM_SET_XSAVE vasitəsilə XSTATE_BV[i]=1 yerləşdirsə: ------------[ 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 arxitekturası ilə uyğundur. Intel-in SDM sənədinə görə, XSAVE, XFD vasitəsilə deaktiv edilmiş komponentlər üçün XSTATE_BV-ni '0' kimi yadda saxlayır (və sıxılmamış XSAVE vəziyyət komponentinin ilkin konfiqurasiyasını yadda saxlayır): Əgər XSAVE, XSAVEC, XSAVEOPT və ya XSAVES vəziyyət komponenti i-ni yadda saxlayırsa, XCR0[i] = IA32_XFD[i] = 1 olduqda təlimat #NM yaratmır; bunun əvəzinə o, sanki XINUSE[i] = 0-mış kimi (və vəziyyət komponenti ilkin vəziyyətindəymiş kimi) işləyir: o, XSAVE başlığının XSTATE_BV sahəsinin i bitini 0 kimi yadda saxlayır; əlavə olaraq, XSAVE vəziyyət komponentinin ilkin konfiqurasiyasını yadda saxlayır (digər təlimatlar vəziyyət komponenti i-ni yadda saxlamır). Alternativ olaraq, KVM həmişə XFD=0 ilə XRSTOR edə bilərdi, məsələn, struct fpu_guest üçün XSAVE zamanı aktivləşdirilmiş funksiyaların dəstindən asılı olaraq sabit bir XFD istifadə etməklə. Lakin, XFD ilə deaktiv edilmiş funksiyalar üçün XSTATE_BV[i]=1 olması yalnız yuxarıdakı kəsilmə (interrupt) halında və ya preemtible nüvələrdə preemption ilə bağlı oxşar ssenarilərdə baş verə bilər, çünki fpu_swap_kvm_fpstate()-in save_fpregs_to_fpstate() çağırışı çıxan FPU vəziyyətini cari XFD ilə yadda saxlayır; və bu (XFD-yə ilk WRMSR-dən başqa bütün hallarda) qonaq XFD-dir. Buna görə də, XFD yalnız yuxarıdakı kəsilmə halında və ya preemtible nüvələrdə preemption ilə bağlı oxşar ssenarilərdə XSTATE_BV ilə sinxronluğunu itirə bilər və biz KVM_GET_XSAVE-in XFD ilə deaktiv edilmiş funksiyalar üçün XSTATE_BV[i]=0 qaytarmasını (de fakto) KVM ABI-nin hissəsi hesab edə bilərik.
Necə düzəltmək olar
- linux linux_kernel6.1.162, 6.6.122, 6.12.67, 6.18.7 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 | 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 |
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.