CVE-2024-43892
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: memcg: mem_cgroup_idr'ye eşzamanlı erişimi koruyun 73f576c04b94 numaralı commit ("mm: memcontrol: fix cgroup creation failure after many small jobs"), cgroup oluşturma hatalarını düzeltmek için memcg ID'lerini CSS ID alanından ayırmıştır. memcg ID alanını sürdürmek için IDR tanıtılmıştır. IDR, değişiklikler için harici senkronizasyon mekanizmalarına dayanır. mem_cgroup_idr için idr_alloc() ve idr_replace() işlemleri css geri çağırması (callback) içinde gerçekleşir ve bu nedenle cgroup_mutex aracılığıyla eşzamanlı değişikliklere karşı korunurlar. Ancak, mem_cgroup_idr için idr_remove() işlemi eşzamanlılığa karşı korunmamıştı ve farklı memcg'lerin refcnt değerleri sıfıra ulaştığında bunlar için eşzamanlı olarak çalıştırılabilir. Bu durum düzeltildi. Filomuzda uzun süredir düşük frekansta list_lru tabanlı çekirdek çökmeleri gözlemliyorduk. Bu çökmeler; list_lru_add(), list_lru_del() ve yeniden ebeveynleme kodu dahil olmak üzere list_lru kodunun farklı bölümlerinde meydana geliyordu. Daha detaylı inceleme sonucunda, belirli bir nesne (dentry ve inode) için super_block'un list_lru yapısının, o nesnenin memcg'si için list_lru_one değerine sahip olmadığı görüldü. İlk şüpheler, ya nesnenin kmem_cache_alloc_lru() üzerinden tahsis edilmediği ya da memcg_list_lru_alloc()'un bir memcg için list_lru_one() tahsis etmede başarısız olup başarı döndürdüğü yönündeydi. Bu durumlar için herhangi bir kanıt bulunamadı. Daha derinlemesine bakıldığında, geçerli memcg ID'sinin mem_cgroup_idr içinde bulunmadığı ve bazı durumlarda birden fazla geçerli memcg'nin aynı ID'ye sahip olduğu ve mem_cgroup_idr'nin bunlardan birini işaret ettiği durumlar görülmeye başlandı. Dolayısıyla, en makul açıklama, bu durumların birden fazla idr_remove() çağrısı arasındaki yarış durumu (race condition) veya idr_alloc()/idr_replace() ile idr_remove() arasındaki yarış durumu nedeniyle oluşabileceğidir. Bu yarış durumları, birden fazla memcg'nin aynı ID'yi almasına neden olmakta ve ardından bunlardan birinin çevrim dışı kalması sistemdeki tüm ilgili memcg'ler için list_lru'ların temizlenmesine yol açmaktadır. Daha sonra diğer memcg'lerin list_lru'ya erişimi, eksik list_lru_one nedeniyle çökmelere neden olmaktadır.
Nasıl düzeltilir
- linux linux_kernel6.6.46, 6.10.5 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| linux linux_kernel | 4.7 ≤ v < 6.6.46, 6.7 ≤ v < 6.10.5, 6.11 | 6.6.46, 6.10.5 |
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.