CVE-2025-39989
Təsvir
Linux nüvəsində aşağıdakı zəiflik aradan qaldırılmışdır: x86/mce: copy-from-user kontekstini müəyyən etmək üçün is_copy_from_user() funksiyasından istifadə edin Yamaq seriyası "mm/hwpoison: Fix regressions in memory failure handling", v4. ## 1. Nə etməyə çalışıram: Bu yamaq dəsti, 5.10 LTS versiyası ilə müqayisədə, 5.17 versiyasından etibarən əsas (upstream) nüvədə ortaya çıxan və yaddaş xətalarının idarə edilməsi ilə bağlı iki kritik reqressiyanı həll edir: - copyin halı: nüvə istifadəçi sahəsindən kopyalama apararkən istifadəçi səhifəsində "zəhərli" (poison) məlumatın tapılması - instr halı: istifadəçi sahəsində təlimat oxunarkən (instruction fetching) "zəhərli" məlumatın tapılması ## 2. Gözlənilən nəticə və səbəbi - Copyin halı üçün: Nüvə, get_user() və ya copy_from_user() yerinə yetirdikdə "zəhərli" məlumat tapsa, əgər bu yerlər xəta geri dönüşü alarsa və nüvə sistemin çökməsi əvəzinə prosesə -EFAULT qaytararsa, bərpa oluna bilər. Daha dəqiq desək, MCE idarəedicisi, nüvədəki #MC-nin bərpa olunub-olunmayacağına qərar vermək üçün fixup idarəedicisinin tipini yoxlayır. EX_TYPE_UACCESS tapıldıqda, PC (program counter) _ASM_EXTABLE_FAULT()-da göstərilən bərpa koduna tullanır və istifadəçi sahəsinə -EFAULT qaytarır. - Instr halı üçün: İstifadəçi sahəsində təlimat oxunarkən "zəhərli" məlumat tapılarsa, tam bərpa mümkündür. İstifadəçi prosesi #PF alır, Linux yeni bir səhifə ayırır və onu yaddaş qurğusundan oxuyaraq doldurur. ## 3. Faktiki olaraq nə baş verir və səbəbi - Copyin halı üçün: v5.17-dən etibarən nüvə panikası (kernel panic) Commit 4c132d1d844a ("x86/futex: Remove .fixup usage") yeni bir extable fixup tipi olan EX_TYPE_EFAULT_REG-ni təqdim etdi və sonrakı yamaqlar copy-from-user əməliyyatları üçün extable fixup tipini EX_TYPE_UACCESS-dən EX_TYPE_EFAULT_REG-ə dəyişdirdi. Bu, get_user() və ya copy_from_user()-də "zəhərli" məlumat tapıldıqda əvvəlki EX_TYPE_UACCESS idarəetməsini pozur. - Instr halı üçün: #CMCI və #MCE yarışı (race condition) səbəbindən istifadəçi prosesi SIGBUS siqnalı ilə dayandırılır Düzəldilməmiş yaddaş xətası istehlak edildikdə, yaddaş kontrollerindən gələn və UCNA imzalı düzəldilməmiş xətanı bildirən CMCI ilə, məlumat istehlak edilmək üzrə olduqda nüvənin bildirdiyi və SRAR imzalı maşın yoxlaması (machine check) arasında yarış baş verir. ### Arxa plan: Intel platformasında *DÜZƏLTDİLMƏMİŞ* xətaların niyə *C*MCI ilə bağlı olduğu [1] Icelake-dən əvvəl yaddaş kontrollerləri, maşın yoxlaması bankında SRAO (Software Recoverable Action Optional) imzalı yayım maşın yoxlamasını siqnallaşdıraraq, yaddaşda əvvəllər görünməmiş düzəldilməmiş xətanı aşkar edən patrol scrub hadisələrini bildirirdi. Heç bir nüvənin həmin yanlış məlumatı istehlak etmək üzrə olmadığına görə, bu, təcili problem deyildi və həddindən artıq reaksiya idi. Həmçinin, çoxlu SRAO UCE-lərin iç-içə MCE interrupsiyalarına və sonda IERR-ə səbəb ola biləcəyi aşkar edilmişdir. Buna görə də, Intel patrol scrub-ın maşın yoxlaması bank imzasını SRAO-dan UCNA-ya (Uncorrected, No Action required) endirib və siqnal #CMCI-yə dəyişdirilib. Qarışıqlığı artırmaq üçün qeyd edək ki, UC*NA* imza adına baxmayaraq, Linux uc_decode_notifier()-də səhifəni oflayn etməyə çalışmaq üçün hərəkətə keçir. ### Arxa plan: Intel platformasında "zəhərli" məlumat istehlak edilərkən niyə #CMCI və #MCE yarışı baş verir [1] Patrol scrub xətaları üçün CMCI/UCNA-nın ən yaxşı tədbir olduğuna qərar verdikdən sonra, yaddaş kontrolleri bunu oxuma əməliyyatları üçün də istifadə edir. Lakin yaddaş kontrolleri nüvədən asinxron şəkildə işləyir və "real" oxuma ilə spekulyativ oxuma arasındakı fərqi ayıra bilmir. Buna görə də, hər hansı oxumada xəta tapılarsa, CMCI/UCNA icra edəcək. Beləliklə: 1) Nüvə ağıllıdır və ünvan A-nın tezliklə lazım olacağını düşünərək spekulyativ oxuma sorğusu göndərir. 2) Nüvə, oxuma sorğusunu göndərdikdən qısa müddət sonra ünvan A-dan istifadə edəcəyini anlayır. 3) Yaddaş kontrollerindən gələn CMCI ilə, nüvənin ünvan A-dan yükləməni (load) tamamlayacaq MCE-si arasında yarış baş verir. Çox vaxt (spekulyasiya təkmilləşdiyi üçün) yaddaş kontrollerindən gələn CMCI, nüvə ünvan A-nı oxuyan təlimata sadiq qalmazdan əvvəl çatdırılır, beləliklə interrupsiya qəbul edilir və Linux səhifəni oflayn edir (onu "zəhərli" kimi qeyd edir). ## Instr halında istifadəçi prosesi niyə öldürülür Commit 046545a661af ("mm/hwpoison: fix error page recovered but reported "not...
Necə düzəltmək olar
- linux linux_kernel5.16, 6.6.89, 6.12.23, 6.13.11, 6.14.2 və ya daha yeni versiya
- git.kernel.org/stable/c/0b8388e97ba6a8c033f9a8b5565af41af07f9345
- git.kernel.org/stable/c/1a15bb8303b6b104e78028b6c68f76a0d4562134
- git.kernel.org/stable/c/3e3d8169c0950a0b3cd5105f6403a78350dcac80
- git.kernel.org/stable/c/449413da90a337f343cc5a73070cbd68e92e8a54
- git.kernel.org/stable/c/5724654a084f701dc64b08d34a0e800f22f0e6e4
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| linux linux_kernel | 5.15.58 ≤ v < 5.16, 5.17 ≤ v < 6.6.89, 6.7 ≤ v < 6.12.23, 6.13 ≤ v < 6.13.11, 6.14 ≤ v < 6.14.2 | 5.16, 6.6.89, 6.12.23, 6.13.11, 6.14.2 |
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.