CVE-2026-89928

Yüksək

Təsvir

Linux kernel-də aşağıdakı zəiflik aradan qaldırılmışdır: KVM: x86/mmu: Lockless rmap gəzintisində kilidlənmiş rmap dəyərindən istifadə edin __kvm_rmap_lock() boş rmap müşahidə etdikdə qəsdən rmap kilidini ötürür. Bu halda kvm_rmap_lock_readonly() həmçinin preemption-u yenidən aktivləşdirir və sıfır qaytarır, beləliklə çağıran tərəf nə rmap kilidinə, nə də preemption istinadına sahib olur. Kilidin ötürülməsi onun əsaslandığı invariantı sənədləşdirir: * Əgər rmap boşdursa, kilidi ötürün, çünki lockless gəzintilər (yalnız oxuma rejimi) boş rmap-i gəzməli deyil (və gəzə bilmir), həmçinin onlar rmap-ə yeni girişlər əlavə edə bilməzlər. Yəni, boş rmap-ləri emal edən yeganə yollar bunu yazma üçün mmu_lock tutarkən edirlər və qarşılıqlı olaraq istisna edilirlər. kvm_rmap_age_gfn_range() qaytarılan dəyəri görməzdən gəlir və şərtsiz olaraq for_each_rmap_spte_lockless() funksiyasına daxil olur. İterator rmap_get_first() ilə başlayır ki, o da kilid tərəfindən qaytarılan dəyərdən istifadə etmək əvəzinə rmap_head->val dəyərini yenidən oxuyur. Əgər yazıçı kilidin oxunması ilə iteratorun yenidən oxuması arasında rmap-i doldursa, yaşlandırma yolu (aging path) kilidi tutmadan yeni quraşdırılmış rmap-i gəzir. KVM_RMAP_MANY rmap üçün bu, gəzintinin heç vaxt kilidlənməmiş pte_list_desc zəncirini izləməsinə səbəb olur. Yazma üçün mmu_lock tutan bir yazıçı, gəzinti davam edərkən həmin zənciri (məsələn, geri dövr yolu üzərində kvm_zap_all_rmap_sptes() və ya hər hansı rmap zap vasitəsilə) kmem_cache_free() ilə azad edə bilər ki, bu da slab use-after-free xətasına yol açır. Bunları ardıcıl edən heç nə yoxdur: CONFIG_KVM_MMU_LOCKLESS_AGING=y olduqda yaşlandırma yolu mmu_lock olmadan işləyir və əks halda yazıçını istisna edəcək rmap kilidi ötürülmüşdü. Boş yol preemption-u yenidən aktivləşdirdiyi üçün iki oxuma arasındakı interval ixtiyari planlaşdırma gecikməsini əhatə edə bilər. Bu növ xətanı düzəltmək üçün lockless gəzintinin rmap-i yenidən oxumaq əvəzinə kilid tərəfindən qaytarılan dəyəri istehlak etməsini təmin edin. rmap_get_first() funksiyasını artıq oxunmuş rmap dəyərindən iteratoru başladan __rmap_get_first() funksiyasına bölün və for_each_rmap_spte_lockless()-in həmin dəyəri qəbul edib birbaşa __rmap_get_first()-i çağırmasını təmin edin. kvm_rmap_age_gfn_range() kvm_rmap_lock_readonly() tərəfindən qaytarılan dəyəri ötürür: kilid ötürüldükdə dəyər sıfırdır, __rmap_get_first() NULL qaytarır və gəzinti ötürülür. Heç bir lockless gəzinti rmap-i yenidən oxumur, buna görə də kilid-ötürmə invariantı pozula bilməz və yaşlandırma koduna cütləşdirilmiş unlock() olmadan lock() yolu əlavə edilmir.

CiddilikYüksək
CVSS8.8
İstismar ehtimalı—
MəhsulLinux
Dərc16 sen 2026
İlk görülmə16 sen 2026

Necə düzəltmək olar

Yeniləyin
  • Linux Linux41debfc98526c0a95c41a62435aca0a70340a26d, 8edb3c09e43f7cd8a5dfd291c6e0fc9c74d4621d, e428f9779a43737d830111238816f1928b07aefb və ya daha yeni versiya

Təsirlənən məhsullar

MəhsulTəsirlənən versiyalarDüzəldildiyi versiya
Linux Linuxaf3b6a9eba48419732b07a0472db7160282f0f39 ≤ v < 41debfc98526c0a95c41a62435aca0a70340a26d, af3b6a9eba48419732b07a0472db7160282f0f39 ≤ v < 8edb3c09e43f7cd8a5dfd291c6e0fc9c74d4621d, af3b6a9eba48419732b07a0472db7160282f0f39 ≤ v < e428f9779a43737d830111238816f1928b07aefb, 6.1541debfc98526c0a95c41a62435aca0a70340a26d, 8edb3c09e43f7cd8a5dfd291c6e0fc9c74d4621d, e428f9779a43737d830111238816f1928b07aefb

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-2026-89928 · Linux · Dark Radar