CVE-2026-46290
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılmışdır: x86/efi: FPU softirq dəyişikliklərindən sonra səhvlərin yumşaq idarə edilməsinin düzəldilməsi d02198550423 ("x86/fpu: Improve crypto performance by making kernel-mode FPU reliably usable in softirqs") commit-indən etibarən, kernel_fpu_begin() funksiyası əvvəlki preempt_disable() əvəzinə local_bh_disable()-dan istifadə edən fpregs_lock() funksiyasını çağırır. Bu, bütün EFI runtime service çağırışı ərzində preempt_count-da SOFTIRQ_OFFSET təyin edir və bu da normal tapşırıq kontekstində in_interrupt() funksiyasının true qaytarmasına səbəb olur. Yumşaq səhifə xətası idarəçisi olan efi_crash_gracefully_on_page_fault() funksiyası, real kəsilmə (interrupt) kontekstində baş verən xətalar zamanı prosesi dayandırmaq üçün in_interrupt()-dan istifadə edir. SOFTIRQ_OFFSET artıq təyin edildiyi üçün idarəçi hər zaman prosesi dayandırır və EFI proqram təminatı (firmware) səhifə xətaları idarə olunmamış qalır. Bu, in_interrupt()-ı true kimi görən və panic("Fatal exception in interrupt") funksiyasını çağıran die() funksiyasına səbəb olur ki, nəticədə sistem tamamilə donur. EFI runtime çağırışları zamanı (məsələn, GetTime()-da xəritələnməmiş yaddaşa müraciət etdikdə) səhifə xətalarını tetikləyən problemli proqram təminatına malik sistemlərdə bu, gözlənilən yumşaq EFI_ABORTED bərpası əvəzinə geri qaytarıla bilməyən donmaya səbəb olur. Bu problem in_interrupt() funksiyasının !in_task() ilə əvəz edilməsi ilə həll edilmişdir. Bu, kəsilmələr və ya NMI xətaları üçün prosesi dayandırmaq orijinal məqsədini qoruyub saxlayır, eyni zamanda FPU kod yolundakı local_bh_disable()-dan yanlış şəkildə tetiklənməyə son qoyur. [ardb: Sashiko qeyd etmişdir ki, 'in_hardirq() || in_nmi()' istifadəsi belə bir boşluq yaradır ki, burada fpregs_lock() çağırılmadan əvvəl, lakin efi_rts_work.efi_rts_id təyin edildikdən sonra softirq baş verə bilər və həmin boşluqda baş verən hər hansı səhifə xətası yanlışlıqla proqram təminatı tərəfindən törədilmiş kimi müəyyən edilir. Bunun əvəzinə, in_serving_softirq()-ı özündə birləşdirən !in_task() istifadə edin.]
Necə düzəltmək olar
- linux linux_kernel6.18.30, 7.0.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 | 6.15 ≤ v < 6.18.30, 6.19 ≤ v < 7.0.7, 7.1 | 6.18.30, 7.0.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.