CVE-2026-89791
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: perf: perf mmap() yeniden canlandırmasının son munmap() ile yarıştığı durumlarda oluşan serbest bırakıldıktan sonra kullanım (use-after-free) hatası düzeltildi. perf_mmap_close(), event->mmap_mutex kilidini tutmadan rb->mmap_count değerini düşürür (event->mmap_count üzerindeki refcount_dec_and_mutex_lock()'dan hemen önceki refcount_dec_and_test()). Eşzamanlı bir perf_mmap_rb(), tüm "yeniden canlandırma" yolunu bu pencereye yerleştirebilir (perf_mmap, rb_alloc dahil olmak üzere tüm süresi boyunca event->mmap_mutex kilidini tutar): munmap tarafı (perf_mmap_close) mmap tarafı (perf_mmap_rb) ----------------------------------- -------------------------------- rb->mmap_count 1 -> 0 (kilit yok) (event->mmap_mutex kilidini tutar) inc_not_zero(rb->mmap_count) başarısız olur ring_buffer_attach(event, NULL) rb_alloc() + yeni rb ekleme refcount_set(&event->mmap_count, 1) kilit; event->mmap_count 1 -> 0 ring_buffer_attach(event, NULL) ring_buffer_put() -> *yeni* rb'yi serbest bırakır Yeniden canlandırmanın refcount_set(&event->mmap_count, 1) işlemi görünmez bir 1 -> 1 yazımıdır: kapatma işlemi, diğer işlem hala eşlenmiş olmasına rağmen az önce yeniden canlandırılan tamponu serbest bırakır; bu durum, herhangi bir ayrıcalıksız kullanıcının (varsayılan kernel.perf_event_paranoid=2) root yetkilerine yükselmesine izin veren sayfa düzeyinde bir serbest bırakıldıktan sonra kullanım (use-after-free) açığına yol açar. İki sayaç güncellemesinin sırası değiştirilmiştir: event->mmap_count önce refcount_dec_and_mutex_lock() aracılığıyla düşürülür, böylece 1 -> 0 geçişi ve ring_buffer_attach() işlemi perf_mmap() ile serileştirilmiş olarak kalır. Bu durumda rb->mmap_count == 0 olması, tamponu kullanan her olayın zaten ayrıldığını gösterir; dolayısıyla rb->mmap_count düşürme işleminin sonucu kalan yıkım sürecini doğrudan yönetebilir ve detach_rest artık gerekli değildir. Kyle Zeng ve David Lee tarafından bu yarış durumu için sunulan daha önceki bir düzeltme, her iki sayaç güncellemesini de event->mmap_mutex kapsamına almaktaydı [0]; burada ise son olmayan kapatma işlemi kilitsiz kalmaya devam eder.
Nasıl düzeltilir
- Linux Linux929cb3b9dc818dd9fa89d510d4ff2b255e42badd, 0c739f54f1c77f3a4643160cd2e031b6c2f2aab6, 58a8108bc73de0740d5b88150465d6690ea5f85f ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| Linux Linux | 59741451b49ce9964a9758c19d6f7df2a1255c75 ≤ v < 929cb3b9dc818dd9fa89d510d4ff2b255e42badd, 59741451b49ce9964a9758c19d6f7df2a1255c75 ≤ v < 0c739f54f1c77f3a4643160cd2e031b6c2f2aab6, 59741451b49ce9964a9758c19d6f7df2a1255c75 ≤ v < 58a8108bc73de0740d5b88150465d6690ea5f85f, 6.18 | 929cb3b9dc818dd9fa89d510d4ff2b255e42badd, 0c739f54f1c77f3a4643160cd2e031b6c2f2aab6, 58a8108bc73de0740d5b88150465d6690ea5f85f |
Sürümünüzü kontrol edin
Ürünü seçin ve kullandığınız sürümü yazın; sürümün etkilenen aralıkta olup olmadığını görün.
Attack Surface Management
Alan adlarınıza bağlı varlıkları, bu varlıklarda çalışan teknolojileri ve bilinen zafiyetleri tek listede görün.