CVE-2025-37964

Yüksək

Təsvir

Linux kernel-də aşağıdakı zəiflik aradan qaldırılmışdır: x86/mm: TLB təmizlənmələrinin təsadüfən ötürülə biləcəyi boşluğun aradan qaldırılması Qısa xülasə: mm dəyişdirilməsi kodunda yeni CR3-ün təyin edildiyi və CPU-nun yeni mm üçün TLB təmizlənmələri almalı olduğu bir boşluq mövcuddur. Lakin should_flush_tlb() funksiyasında xəta var və o, təmizləməni bloklayır. Bu problem, should_flush_tlb() funksiyasının IPI göndərdiyi boşluğu genişləndirməklə həll edilmişdir. Ətraflı versiya: === Tarixçə === Buna səbəb olan bir neçə amil var idi. İlk öncə, mm_cpumask() yeniləməsinin çox bahalı olduğu müşahidə edildi və bu proses daha "tənbəl" (lazy) hala gətirildi. Lakin tənbəl yanaşma, artıq tənbəl olan mm_cpumask() səbəbindən CPU-lara həddindən artıq lazımsız IPI-lərin göndərilməsinə yol açdı. Buna görə də, mm_cpumask()-i dövri olaraq təmizləmək üçün kod əlavə edildi[2]. Lakin bu təmizləmə prosesi həddindən artıq aqressiv oldu və TLB təmizlənmələrinə ehtiyacı olan CPU-lara onların göndərilməsini ötürdü. Beləliklə, yenidən eyni problemlə qarşılaşdıq. === Problem === should_flush_tlb() funksiyasındakı həddindən artıq aqressiv kod bu boşluqda təsir göstərir: // Bu CPU/mm kombinasiyası üçün IPI-ləri aktivləşdir, lakin yalnız // should_flush_tlb() razılaşarsa: cpumask_set_cpu(cpu, mm_cpumask(next)); next_tlb_gen = atomic64_read(&next->context.tlb_gen); choose_new_asid(next, next_tlb_gen, &new_asid, &need_flush); load_new_mm_cr3(need_flush); // ^ 'need_flush' false təyin edildikdən sonra, IPI-lər mütləq // bu CPU-ya göndərilməli və nəzərə alınmalıdır. this_cpu_write(cpu_tlbstate.loaded_mm, next); // ^ Yalnız bu nöqtədən sonra should_flush_tlb() doğru (true) olur! should_flush_tlb() funksiyası load_new_mm_cr3() ilə 'loaded_mm'-ə yazılma arasındakı boşluqda TLB təmizlənmələrini bloklayacaqdır, halbuki bu boşluqda onlar bloklanmamalıdır. === Həll yolu === Xoşbəxtlikdən, "CR3-ə yazmaq üzrə" olan qeyri-müəyyən boşluq artıq loaded_mm==LOADED_MM_SWITCHING ilə işarələnib. should_flush_tlb() funksiyasında sadəcə bu vəziyyətin yoxlanılması CPU-nun IPI hədəfi olmasını təmin etmək üçün kifayətdir. Bu, daha çox TLB təmizləmə IPI-lərinə səbəb olacaq. Lakin boşluq nisbətən kiçikdir və bunun ölçüləbilən performans təsirinə səbəb olacağını gözləmirəm. LOADED_MM_SWITCHING yazıldığı şərhi yeniləyin, çünki onun istifadə sahəsi daha da genişləndi. Peter Z həmçinin narahatlığını bildirdi ki, should_flush_tlb() funksiyası 'loaded_mm' və 'is_lazy' dəyişənlərini switch_mm_irqs_off() funksiyasının onları yazdığı ardıcıllıqla görməyə bilər. Onların yazıldığı ardıcıllıqla oxunduğunu təmin etmək üçün barier (barrier) əlavə edildi.

CiddilikYüksək
CVSS7.8
İstismar ehtimalı—
MəhsulLinux Kernel
Dərc20 may 2025
İlk görülmə20 may 2025

Necə düzəltmək olar

Yeniləyin
  • linux linux_kernel5.15.183, 6.1.139, 6.6.91, 6.12.29, 6.14.7 və ya daha yeni versiya

Təsirlənən məhsullar

MəhsulTəsirlənən versiyalarDüzəldildiyi versiya
linux linux_kernel5.15.179 ≤ v < 5.15.183, 6.1.129 ≤ v < 6.1.139, 6.6.79 ≤ v < 6.6.91, 6.12.16 ≤ v < 6.12.29, 6.13.4 ≤ v < 6.14.7, 6.155.15.183, 6.1.139, 6.6.91, 6.12.29, 6.14.7
debian debian_linux11.0—

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-37964 · Linux Kernel · Dark Radar