CVE-2026-93197
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: memcg: yeniden ebeveynleme sırasında LRU boyut muhasebesini kopyalamak yerine taşıyın Bir bellek cgroup'u çevrim dışı bırakıldığında, LRU folioları ebeveyne yeniden atanır. lruvec_reparent_lru(), alt grubun listelerini ebeveyninkilerle birleştirir ve alt grubun bölge başına düşen lru_zone_size[] değerini ebeveyne ekler; ancak alt grubun kopyasını hiçbir zaman temizlemez, bu nedenle boyut taşınmak yerine kopyalanmış olur. lru_gen_reparent_memcg() aynı işlemi MGLRU için yapar. Ebeveyn doğru kalır ve devraldığı foliolara tam olarak karşılık gelen kredi tanımlanır. Güncelliğini yitirmiş değer ise alt grupta kalır ve hiçbir şey bunu düzeltmez: folio->memcg_data artık ebeveyne çözümlendiği için, bu foliolara yönelik her sonraki update_lru_size() çağrısı oraya iletilir. Ömrünü tamamlayan cgroup'lar hemen serbest bırakılmaz ve mem_cgroup_iter() hala bunları taramaya devam eder, bu nedenle üzerlerinde shrink_lruvec() çağrılmaya devam eder. get_scan_count(), lruvec_lru_size() aracılığıyla hayalet sayacı okur ve ardından tarama döngüsü, ölü cgroup yaşadığı sürece boş bir listeye karşı SWAP_CLUSTER_MAX adımlarıyla nr[] üzerinden işlem yapmaya devam eder. MGLRU altında bunun yerine MGLRU tarayıcısı çalışır, ancak count_shadow_nodes() tüm NR_LRU_LISTS toplamını lruvec_lru_size() üzerinden hesaplar ve gölge düğüm limitini aynı şekilde aşırı bütçelendirir. 251 GiB'lık bir ana makinede yapılan her mz->lru_zone_size[] taramasında, hiçbir listede bulunmayan folioları tanımlayan 380 sayaç bulundu: 57 cgroup genelinde 124777314 sayfa, 476 GiB (makine RAM'inin 1,89 katı). Bunların tamamı CSS_DYING değeri ayarlanmış ve CSS_ONLINE değeri temizlenmiş memcg'lerdeydi ve ebeveyn/çocuk çiftleri bayt bazında özdeş boyutlar raporladı. LRU_UNEVICTABLE boyutunun da taşınması gerekir. Listesi kasıtlı olarak birleştirilmez çünkü lruvec_init() başlığı zehirler - tahliye edilemeyen LRU hayalidir ve foliolar asla üzerine dizilmez - ancak boyut lruvec_add_folio()/lruvec_del_folio() tarafından tutulur ve bu foliolar bundan böyle ebeveyne kaydedilir. Bu durum, bf4ade7dbd76 ("memcg: keep folio's objcg same as its node") commit'ine bağlıdır ve ondan önce geri port edilmemelidir. Bu değişmezlik olmadan, bir folionun objcg'si başka bir düğüme ait olabilir; dolayısıyla zaten ebeveynin listesine eklenmiş bir folio, objcg'nin düğümü memcg_reparent_objcgs()'nin daha sonraki bir yinelemesinde yeniden ebeveynlenene kadar hala çocuğun lruvec'ine çözümlenebilir. Alt grubun sayacının erken temizlenmesi, lruvec_del_folio()'nun bu değeri eksiltmesine ve mem_cgroup_update_lru_size() içindeki WARN_ONCE()/VM_BUG_ON() hatasının tetiklenmesine neden olur.
Nasıl düzeltilir
- Linux Linux007bc1842317bb99f5f6205afede940f951674c2, 0e0ac326c511d514817cc7b6d7741afd59098ce2 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| Linux Linux | 07a6e9a2c199fed361f528781284d56771d0016f ≤ v < 007bc1842317bb99f5f6205afede940f951674c2, 07a6e9a2c199fed361f528781284d56771d0016f ≤ v < 0e0ac326c511d514817cc7b6d7741afd59098ce2, 7.1 | 007bc1842317bb99f5f6205afede940f951674c2, 0e0ac326c511d514817cc7b6d7741afd59098ce2 |
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.