CVE-2026-23198
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılıb: KVM: irqfd təyin edilməsi ləğv edildikdə irqfd marşrutlaşdırma növünü sıfırlamayın KVM_IRQFD təyini ləğv edilərkən, irqfd-nin IRQ marşrutlaşdırma girişi surətini sıfırlamayın, çünki bu, x86 və arm64 platformalarında açıq şəkildə KVM_IRQ_ROUTING_MSI-ni axtaran kvm_arch_irq_bypass_del_producer() funksiyasının işini pozur. Bunun əvəzinə, eyni vaxtda baş verən marşrutlaşdırma yeniləmələrini idarə etmək üçün marşrutlaşdırma məlumatlarını istifadə etməzdən əvvəl irqfd-nin hələ də aktiv olduğunu yoxlayın. x86 və arm64 xətaları, həmçinin kvm_arch_update_irqfd_routing()-dəki digər xəta ilə sübut olunduğu kimi, arxiv kodu xəbərdar edilmədən giriş növünün sıfırlanması gözlənilməzdir və xətalara meyillidir. Əlavə üstünlük kimi, irqfd-nin aktivliyinin yoxlanılması, KVM-in niyə təyini ləğv edilməkdə olan bir irqfd üçün marşrutlaşdırma girişini istifadə etməməli olduğunun sənədləşdirilməsi üçün əlverişli yer yaradır: irqfd siyahıdan silindikdən sonra (hansı ki, bu, eventfd ayrılmamışdan *əvvəl* baş verir), o artıq kvm_irq_routing_update() vasitəsilə yeniləmələr almayacaq və beləliklə, KVM köhnəlmiş marşrutlaşdırma məlumatlarından istifadə edərək hadisə ötürə bilər (KVM_SET_GSI_ROUTING-in istifadəçi sahəsinə qaytardığı məlumata nisbətən). Hətta daha yaxşı bir üstünlük odur ki, irqfd-nin aktivliyinin açıq şəkildə yoxlanılması, sıfırlamanın qarşısını almağa çalışdığı xətaya bənzər bir xətanı düzəldir: əgər irqfd deaktiv edilərsə və sonra onun marşrutlaşdırılması dəyişərsə, kvm_irq_routing_update() funksiyası kvm_arch_update_irqfd_routing()-i çağırmayacaq (çünki irqfd siyahıda deyil). Beləliklə, əgər irqfd bypass rejimindədirsə, IRQ-lar köhnə marşrutlaşdırma məlumatları ilə göndərilməyə davam edəcək. kvm_arch_irq_bypass_del_producer()-ə gəldikdə isə, marşrutlaşdırma növünün sıfırlanması KVM-in IRQ-nu yanlış şəkildə bypass rejimində saxlamasına səbəb olur ki, bu da xüsusilə AMD-də problemlidir, çünki KVM vCPU-ya göndərilən IRQ-ları ömrü irqfd-yə bağlı olan bir siyahıda izləyir. Use-after-free halını aşkar etmək üçün KASAN-ın köməyi olmadan, AMD-də ən çox rast gəlinən simptom, irqfd strukturunun yaddaşının yenidən ayrılması və sıfırlanması səbəbindən amd_iommu_update_ga()-da NULL göstəricisinin istifadə edilməsidir (NULL pointer deref); nəticədə avic_update_iommu_vcpu_affinity() tərəfindən oxunduqda irqfd->irq_bypass_data NULL olur: BUG: kernel NULL pointer dereference, address: 0000000000000018 #PF: supervisor read access in kernel mode #PF: error_code(0x0000) - not-present page PGD 40cf2b9067 P4D 40cf2b9067 PUD 408362a067 PMD 0 Oops: Oops: 0000 [#1] SMP CPU: 6 UID: 0 PID: 40383 Comm: vfio_irq_test Tainted: G U W O 6.19.0-smp--5dddc257e6b2-irqfd #31 NONE Tainted: [U]=USER, [W]=WARN, [O]=OOT_MODULE Hardware name: Google, Inc. Arcadia_IT_80/Arcadia_IT_80, BIOS 34.78.2-0 09/05/2025 RIP: 0010:amd_iommu_update_ga+0x19/0xe0 Call Trace: <TASK> avic_update_iommu_vcpu_affinity+0x3d/0x90 [kvm_amd] __avic_vcpu_load+0xf4/0x130 [kvm_amd] kvm_arch_vcpu_load+0x89/0x210 [kvm] vcpu_load+0x30/0x40 [kvm] kvm_arch_vcpu_ioctl_run+0x45/0x620 [kvm] kvm_vcpu_ioctl+0x571/0x6a0 [kvm] __se_sys_ioctl+0x6d/0xb0 do_syscall_64+0x6f/0x9d0 entry_SYSCALL_64_after_hwframe+0x4b/0x53 RIP: 0033:0x46893b </TASK> ---[ end trace 0000000000000000 ]--- Əgər irfd təyini ləğv edilərkən AVIC bloklanmışsa, xəta siyahının korlanması şəklində özünü göstərəcək, məsələn, növbəti irqfd təyinatı zamanı. list_add corruption. next->prev should be prev (ffff8d474d5cd588), but was 0000000000000000. (next=ffff8d8658f86530). ------------[ cut here ]------------ kernel BUG at lib/list_debug.c:31! Oops: invalid opcode: 0000 [#1] SMP CPU: 128 UID: 0 PID: 80818 Comm: vfio_irq_test Tainted: G U W O 6.19.0-smp--f19dc4d680ba-irqfd #28 NONE Tainted: [U]=USER, [W]=WARN, [O]=OOT_MODULE Hardware name: Google, Inc. Arcadia_IT_80/Arcadia_IT_80, BIOS 34.78.2-0 09/05/2025 RIP: 0010:__list_add_valid_or_report+0x97/0xc0 Call Trace: <TASK> avic_pi_update_irte+0x28e/0x2b0 [kvm_amd] kvm_pi_update_irte+0xbf/0x190 [kvm] kvm_arch_irq_bypass_add_producer+0x72/0x90 [kvm] irq_bypass_register_consumer+0xcd/0x170 [irqbypa ---kəsilmiş---
Necə düzəltmək olar
- linux linux_kernel5.10.250, 5.15.200, 6.1.163, 6.6.124, 6.12.70, 6.18.10 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.4 ≤ v < 5.10.250, 5.11 ≤ v < 5.15.200, 5.16 ≤ v < 6.1.163, 6.2 ≤ v < 6.6.124, 6.7 ≤ v < 6.12.70, 6.13 ≤ v < 6.18.10, 6.19 | 5.10.250, 5.15.200, 6.1.163, 6.6.124, 6.12.70, 6.18.10 |
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.