CVE-2025-40230
Təsvir
Linux nüvəsində aşağıdakı zəiflik aradan qaldırılmışdır: mm: THP parçalanarkən zəhər istehlakının qarşısını al x86 serverində istifadəçi sahəsinə map edilmiş THP-yə (Transparent Huge Page) yaddaş xətası inyeksiyası apararkən nüvə aşağıdakı trace ilə panic vəziyyətinə düşür. Gözlənilən davranış nüvəni panic vəziyyətinə salmaq əvəzinə təsirlənmiş prosesi dayandırmaqdır, çünki x86 Machine Check kodu istifadəçi sahəsindəki #MC-dən bərpa oluna bilir. mce: [Hardware Error]: CPU 0: Machine Check Exception: f Bank 3: bd80000000070134 mce: [Hardware Error]: RIP 10:<ffffffff8372f8bc> {memchr_inv+0x4c/0xf0} mce: [Hardware Error]: TSC afff7bbff88a ADDR 1d301b000 MISC 80 PPIN 1e741e77539027db mce: [Hardware Error]: PROCESSOR 0:d06d0 TIME 1758093249 SOCKET 0 APIC 0 microcode 80000320 mce: [Hardware Error]: Run the above through 'mcelog --ascii' mce: [Hardware Error]: Machine check: Data load in unrecoverable area of kernel Kernel panic - not syncing: Fatal local machine check Bu panic-in əsas səbəbi istifadəçi sahəsindəki #MC ilə tetiklənən yaddaş nasazlığının emalının THP-nin parçalanmasını tələb etməsidir. Parçalama prosesi try_to_map_unused_to_zeropage() funksiyasında tətbiq olunan, sıfırla doldurulmuş səhifələri müəyyən etmək üçün THP-dəki səhifələri oxuyan mexanizmdən istifadə edir. Lakin THP-dəki səhifələrin oxunması ilkin memory_failure() tamamlanmazdan əvvəl baş verən ikinci nüvədaxili #MC-yə səbəb olur və nəticədə nüvə panic vəziyyətinə düşür. İki #MC üzrə nüvə panic çağırış trace-inə baxın. Birinci Machine Check baş verir // [1] memory_failure() // [2] try_to_split_thp_page() split_huge_page() split_huge_page_to_list_to_order() __folio_split() // [3] remap_page() remove_migration_ptes() remove_migration_pte() try_to_map_unused_to_zeropage() // [4] memchr_inv() // [5] İkinci Machine Check baş verir // [6] Kernel panic [1] İstifadəçi sahəsində aparat tərəfindən zəhərlənmiş THP-yə müraciət nəticəsində tetiklənir və adətən təsirlənmiş prosesi dayandırmaqla bərpa oluna bilir. [2] try_to_split_thp_page() çağırışından əvvəl folio_set_has_hwpoisoned() çağırılır. [3] remap_page() funksiyasına RMP_USE_SHARED_ZEROPAGE remap bayrağı ötürülür. [4] İstifadə olunmamış THP-ni zeropage-ə map etməyə cəhd edilir. [5] Aparat tərəfindən zəhərlənmiş THP-dəki səhifələrə nüvədə yenidən müraciət edilir. [6] Nüvədaxili tetiklənir və nüvənin panic vəziyyətinə düşməsinə səbəb olur. Addım[2]-də memory_failure() try_to_split_thp_page() çağırışından əvvəl TestSetPageHWPoison() vasitəsilə THP-dəki səhifədə zəhərlənmə bayrağını qoyur. David Hildenbrand-ın təklif etdiyi kimi, bu panic-i zeropage müəyyən edilməsi zamanı THP-dəki zəhərlənmiş səhifəyə müraciət etməməklə, eyni zamanda mümkün zeropage map edilməsi üçün THP-dəki təsirlənməmiş səhifələri skan etməyə davam etməklə aradan qaldırın. Bu, Addım[4]-də nüvə panic-inə səbəb olacaq ikinci nüvədaxili #MC-nin qarşısını alır. Bu məsələnin həlli üzərində ilkin işinə görə Andrew Zaborowski-yə təşəkkür edirik.
Necə düzəltmək olar
- Linux Linux6fc0a7c99e973a50018c8b4be34914a1b5c7b383, 92acf4b04f255d2f0f6770bb0d0a208d8ffb2b77, 841a8bfcbad94bb1ba60f59ce34f75259074ae0d və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| Linux Linux | b1f202060afeb7fcb98473929d26fd3d2093b067 ≤ v < 6fc0a7c99e973a50018c8b4be34914a1b5c7b383, b1f202060afeb7fcb98473929d26fd3d2093b067 ≤ v < 92acf4b04f255d2f0f6770bb0d0a208d8ffb2b77, b1f202060afeb7fcb98473929d26fd3d2093b067 ≤ v < 841a8bfcbad94bb1ba60f59ce34f75259074ae0d, 6.12 | 6fc0a7c99e973a50018c8b4be34914a1b5c7b383, 92acf4b04f255d2f0f6770bb0d0a208d8ffb2b77, 841a8bfcbad94bb1ba60f59ce34f75259074ae0d |
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.