CVE-2025-38242

Yüksək

Təsvir

Linux kernel-də aşağıdakı zəiflik aradan qaldırılmışdır: mm: userfaultfd: userfaultfd_move və swap cache arasındakı yarış şərtinin (race condition) düzəldilməsi Bu commit iki növ yarış şərtini düzəldir ki, bunların fərqli nəticələri ola bilər: Barry c50f8e6053b0 commit-ində bir BUG_ON hesabatlaşdırdı; əgər filemap axtarışı NULL qaytararsa və bundan sonra folio swap cache-ə əlavə edilərsə, eyni BUG_ON ilə qarşılaşa bilərik. Digər növ yarış şərti tətikləndikdə (axtarışdan sonra folio dəyişdirildikdə), RSS sayğacının korlandığını görə bilərik: [ 406.893936] BUG: Bad rss-counter state mm:ffff0000c5a9ddc0 type:MM_ANONPAGES val:-1 [ 406.894071] BUG: Bad rss-counter state mm:ffff0000c5a9ddc0 type:MM_SHMEMPAGES val:1 Çünki folio yanlış VMA-ya aid edilir. Məlumatların korlanmasının olub-olmadığından əmin deyiləm, görünür ki, yoxdur. Lakin yuxarıdakı problemlər artıq kritikdir. Swap entry PTE gördükdə, userfaultfd_move kilidsiz swap cache axtarışı həyata keçirir və tapılan folionu xəta verən vma-ya köçürməyə çalışır. Hazırda o, köçürülən folionun hələ də src swap entry-sinə aid olduğunu və swap cache-ə yeni folio əlavə edilmədiyini təmin etmək üçün PTE dəyərinin yoxlanılmasına güvənir ki, bu da etibarsız olduğu məlum oldu. Barry ilə swap table seriyası üzərində işləyərkən və baxış keçirərkən mövcud olan aşağıdakı yarış şərtləri müşahidə edilmiş və təkrar istehsal edilmişdir [1]: Aşağıdakı nümunədə move_pages_pte src_pte-ni dst_pte-yə köçürür, burada src_pte S1 swap entry-sini saxlayan swap entry PTE-dir və S1 swap cache-də deyil: CPU1 CPU2 userfaultfd_move move_pages_pte() entry = pte_to_swp_entry(orig_src_pte); // Burada entry = S1 alındı ... < kəsildi > ... <swapin src_pte, folio A ayrıldı və istifadə edildi> // folio A yeni ayrılmış foliodur // və src_pte-yə quraşdırılır <swap entry S1 azad edildi> // src_pte indi folio A-ya işarə edir, S1-in // swap count-u == 0-dır, o, folio_swap_swap // və ya swap allocator-un reclaim-i tərəfindən // azad edilə bilər. <başqa bir folio B-ni swap out etməyə çalışmaq> // folio B başqa bir VMA-dakı foliodur. <S1-dən istifadə edərək folio B-ni swap cache-ə yerləşdirmək> // S1 azaddır, folio B ondan heç bir problem olmadan // swap out üçün istifadə edə bilər. ... folio = filemap_get_folio(S1) // Burada folio B alındı !!! ... < yenidən kəsildi > ... <folio B-ni swapin etmək və S1-i azad etmək> // İndi S1 yenidən istifadə üçün azaddır. <S1-dən istifadə edərək src_pte və folio A-nı swapout etmək> // İndi src_pte yenidən S1-i saxlayan // swap entry PTE-dir. folio_trylock(folio) move_swap_pte double_pt_lock is_pte_pages_stable // Yoxlama keçdi çünki src_pte == S1 folio_move_anon_rmap(...) // Burada etibarsız folio B köçürüldü !!! Yarış pəncərəsi çox qısadır və bir neçə nadir hadisənin eyni vaxtda baş verməsini tələb edir, buna görə də bunun baş vermə ehtimalı çox azdır, lakin qəsdən qurulmuş reproducer və artırılmış zaman pəncərəsi ilə bunu asanlıqla təkrar istehsal etmək olar. Bu, folio kilidi əldə etdikdən sonra filemap tərəfindən qaytarılan folionun valid swap cache foliosu olub-olmadığını yoxlayaraq düzəldilə bilər. Başqa bir oxşar yarış şərti mümkündür: filemap_get_folio NULL qaytara bilər, lakin folio (A) axtarışdan sonra eyni swap entry-dən istifadə edilərək swap in və sonra yenidən swap out edilə bilər. Belə halda, folio (A) swap cache-də qala bilər, ona görə də o da köçürülməlidir: CPU1 CPU2 userfaultfd_move move_pages_pte() entry = pte_to_swp_entry(orig_src_pte); // Burada entry = S1 alındı və S1 swap cache-də deyil folio = filemap_get ---kəsilib---

CiddilikYüksək
CVSS7.8
İstismar ehtimalı—
MəhsulLinux Kernel
Dərc9 iyl 2025
İlk görülmə9 iyl 2025

Necə düzəltmək olar

Yeniləyin
  • linux linux_kernel6.12.37, 6.15.5 və ya daha yeni versiya

Təsirlənən məhsullar

MəhsulTəsirlənən versiyalarDüzəldildiyi versiya
linux linux_kernel6.8 ≤ v < 6.12.37, 6.13 ≤ v < 6.15.5, 6.166.12.37, 6.15.5

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.

Intelligence 360 paketində

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.

CVE-2025-38242 · Linux Kernel · Dark Radar