CVE-2026-98395
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılmışdır: powerpc/entry: təkrarlandığı halda kəsilmə çıxışında irq_soft_mask korrupsiyasının düzəldilməsi __replay_soft_interrupts() gözlənilən bir kəsilməni (məsələn, PACA_IRQ_DEC -> timer_interrupt) təkrarlandırdıqda, o, sintetik pt_regs ilə birbaşa handler-i çağırır. Hər bir handler ətrafındakı DEFINE_INTERRUPT_HANDLER_ASYNC wrapper-i çıxış zamanı arch_interrupt_async_exit_prepare() funksiyasını çağırır, bu isə ardıcıllıqla arch_interrupt_exit_prepare() -> local_irq_disable() -> arch_local_irq_disable() funksiyalarını çağırır və aşağıdakını yerinə yetirir: irq_soft_mask_set(IRQS_DISABLED) /* 0x1 */ Bu, irq_soft_mask dəyişənini şərtsiz olaraq IRQS_DISABLED (0x1) ilə əvəz edir və IRQS_PMI_DISABLED (0x2) bitini silir. Nəticədə, handler __replay_soft_interrupts() funksiyasına geri döndükdə irq_soft_mask IRQS_ALL_DISABLED (0x3) əvəzinə 0x1 olur. Normal şəkildə baş verən kəsilmə üçün bu zərərsizdir: növbəti kəsilmə həmişə irq_soft_mask-ı şərtsiz olaraq IRQS_ALL_DISABLED təyin edən arch_interrupt_enter_prepare() vasitəsilə daxil olur. Lakin təkrarlandırma zamanı, next_interrupt() funksiyası arch_interrupt_enter_prepare() funksiyasına qayıtmadan, təkrarlandığı halda olan handler-lər arasında birbaşa çağırılır, buna görə də silinmiş bit heç vaxt bərpa olunmur. Sonra next_interrupt() aşağıdakı XƏBƏRDARLIĞI (WARNING) verir: WARNING: arch/powerpc/kernel/irq_64.c:75 WARN_ON(irq_soft_mask_return() != IRQS_ALL_DISABLED) Xəbərdarlıq, POWER10 pseries qonağında boot prosesinin erkən mərhələsində kmem_cache_init_late() zamanı müşahidə edilmişdir; burada spinlock-un azad edilməsi, gözlənilən timer_interrupt kəsilməsini emal edən kəsilmə təkrarlandırmasını tetikləyir. Bug-u təsdiqləyən debugger vəziyyəti: timer_interrupt(®s) başlamazdan əvvəl: irq_soft_mask = 0x3 (IRQS_ALL_DISABLED) doğrudur irq_happened = 0x41 (HARD_DIS|REPLAYING) doğrudur timer_interrupt(®s) geri döndükdən sonra: irq_soft_mask = 0x1 (IRQS_DISABLED) SƏHV - PMI biti silinib irq_happened = 0x41 dəyişməz qalıb Həlli yolu local_irq_disable() funksiyasını hard_irq_disable() ilə əvəz etməkdir. İki səbəbdən hard_irq_disable() burada doğru primitivdir: 1. PPC64-də (hw_irq.h:301) o, irq_soft_mask_set_return(IRQS_ALL_DISABLED) funksiyasını çağıraraq yumşaq maskanı 0x3 (həm IRQS_DISABLED, həm də IRQS_PMI_DISABLED) təyin edir ki, bu da PMI bitini qoruyur və XƏBƏRDARLIĞI düzəldir. Onun yerinə yetirdiyi əlavə işlər (__hard_irq_disable(), PACA_IRQ_HARD_DIS |=) artıqdır, lakin təhlükəsizdir, çünki çıxış yolunun bu mərhələsində hər ikisi artıq təyin edilmişdir; daxildəki trace_hardirqs_off() if (!arch_irqs_disabled_flags(flags)) ilə qorunduğu üçün iki dəfə işə düşməyəcək. 2. PPC32-də (hw_irq.h:467) hard_irq_disable() funksiyası arch_local_irq_disable() -> __hard_irq_disable() kimi xəritələnir və aparat təminatında MSR[EE]-ni sıfırlayır. Bu tamamilə doğrudur: PPC32-də yumşaq-maska PACA mexanizmi yoxdur, ona görə də aparat səviyyəsində deaktivləşdirmə irqentry_exit() tələbinə cavab vermək üçün düzgün yoldur. Bu həmçinin PPC32-də irq_soft_mask_set()-in yalnız CONFIG_PPC64 altında təyin edildiyi build xətasını da düzəldir: arch/powerpc/include/asm/entry-common.h:273: error: implicit declaration of function 'irq_soft_mask_set' hard_irq_disable() istifadəsi heç bir #ifdef tələb etmir və giriş kodunun qalan hissəsinin (məsələn, entry-common.h:463) eyni PPC32/PPC64 bölgüsünü idarəetmə qaydası ilə uyğundur.
Necə düzəltmək olar
- Linux Linux95cd316a896f1c1aa4ee4a817ba3d4691103c81b, 63a7531ca31f9f097d9cc1cc3fe86ae683cdabdd və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| Linux Linux | 334f3f6d7a1660fd65597bad9960bfa33a716d35 ≤ v < 95cd316a896f1c1aa4ee4a817ba3d4691103c81b, 334f3f6d7a1660fd65597bad9960bfa33a716d35 ≤ v < 63a7531ca31f9f097d9cc1cc3fe86ae683cdabdd, 7.2 | 95cd316a896f1c1aa4ee4a817ba3d4691103c81b, 63a7531ca31f9f097d9cc1cc3fe86ae683cdabdd |
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.