CVE-2026-93197
Təsvir
Linux nüvəsində aşağıdakı zəiflik aradan qaldırılıb: memcg: reparenting zamanı LRU ölçüsünün hesablanmasını kopyalamaq əvəzinə köçürün Yaddaş cgroup-u deaktiv edildikdə, onun LRU folio-ları valideynə reparent edilir. lruvec_reparent_lru() funksiyası övladın siyahılarını valideyninkilərə birləşdirir və övladın hər zonaya uyğun lru_zone_size[] dəyərini valideynə əlavə edir, lakin övladın nüsxəsini heç vaxt təmizləmir, buna görə də ölçü köçürülmək əvəzinə kopyalanır. lru_gen_reparent_memcg() MGLRU üçün eyni prosesi yerinə yetirir. Valideyn düzgün qalır və ona tam olaraq təhvil aldığı folio-lar əlavə edilir. Köhnəlmiş dəyər övladda qalır və heç nə onu düzəltmir: folio->memcg_data artıq valideynə yönəlir, buna görə də həmin folio-lar üçün sonrakı hər bir update_lru_size() çağırışı ora gedir. Ölməkdə olan cgroup-lar dərhal azad edilmir və mem_cgroup_iter() hələ də onları gəzir, buna görə də onlar üzərində shrink_lruvec() çağırılmağa davam edir. get_scan_count() funksiyası lruvec_lru_size() vasitəsilə fiktiv sayğacı oxuyur və skan dövrü ölü cgroup mövcud olduğu müddətcə boş siyahıya qarşı SWAP_CLUSTER_MAX addımları ilə nr[] üzərindən işləyir. MGLRU altında isə bunun əvəzinə MGLRU skaneri işləyir, lakin count_shadow_nodes() bütün NR_LRU_LISTS-ları lruvec_lru_size() vasitəsilə cəmləyir və shadow node limitini eyni şəkildə həddindən artıq artırır. Bir 251 GiB hostunda hər bir mz->lru_zone_size[] yoxlaması zamanı heç bir siyahıda olmayan folio-ları təsvir edən 380 sayğac tapılıb: 57 cgroup boyunca 124777314 səhifə, 476 GiB, maşının RAM-ının 1.89 qatı. Bunların hamısı CSS_DYING təyin edilmiş və CSS_ONLINE təmizlənmiş memcg-lərdə idi və valideyn/övlad cütlükləri bayt baxımından eyni ölçüləri bildirirdi. LRU_UNEVICTABLE ölçüsü də köçürülməlidir. Onun siyahısı qəsdən birləşdirilmir, çünki lruvec_init() başlığı pozur - unevictable LRU xəyalidir və folio-lar heç vaxt orada birləşdirilmir - lakin ölçü lruvec_add_folio()/lruvec_del_folio() tərəfindən saxlanılır və həmin folio-lar bundan sonra valideyndə uçota alınır. Bu, bf4ade7dbd76 ("memcg: keep folio's objcg same as its node") commit-indən asılıdır və ondan əvvəl backport edilməməlidir. Həmin invariant olmadan folio-nun objcg-si başqa bir node-a aid ola bilər, beləliklə, artıq valideynin siyahısına birləşdirilmiş folio, objcg-nin node-u memcg_reparent_objcgs()-in sonrakı iterasiyasında reparent edilənə qədər hələ də övladın lruvec-inə yönələ bilər; övladın sayğacını erkən təmizləmək isə lruvec_del_folio()-nun onu underflow etməsinə və mem_cgroup_update_lru_size() funksiyasındakı WARN_ONCE()/VM_BUG_ON() xətasının tetiklənməsinə səbəb olar.
Necə düzəltmək olar
- Linux Linux007bc1842317bb99f5f6205afede940f951674c2, 0e0ac326c511d514817cc7b6d7741afd59098ce2 və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| Linux Linux | 07a6e9a2c199fed361f528781284d56771d0016f ≤ v < 007bc1842317bb99f5f6205afede940f951674c2, 07a6e9a2c199fed361f528781284d56771d0016f ≤ v < 0e0ac326c511d514817cc7b6d7741afd59098ce2, 7.1 | 007bc1842317bb99f5f6205afede940f951674c2, 0e0ac326c511d514817cc7b6d7741afd59098ce2 |
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.
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.