Odebrany

CVE-2026-93197

opublikowano:
modyfikacja:
Ocena CVSS
n/a
Brak oceny

>_ Opis

Tłumaczenie automatyczne – może zawierać nieścisłości.

W jądrze Linuksa usunięto następującą lukę:

memcg: przenieś rozliczanie rozmiaru LRU podczas ponownego rodzicielstwa zamiast go kopiować

Kiedy grupa pamięci jest w trybie offline, jej folia LRU są ponownie przesyłane do
rodzic. lruvec_reparent_lru() łączy listy dziecka w
rodzica i przyznaje rodzicowi strefę przypadającą na dziecko
lru_zone_size[], ale nigdy nie czyści kopii dziecka, więc rozmiar jest taki
skopiowane, a nie przeniesione. lru_gen_reparent_memcg() robi to samo dla
MGLRU.

Rodzic ma rację, przypisując mu dokładnie te folio, które wziął
koniec. Przestarzała wartość leży na dziecku i nic jej nie poprawi:
folio->memcg_data jest teraz rozpoznawane jako element nadrzędny, więc co później
update_lru_size() dla tych folio tam trafia.

Umierające grupy cgroup nie są natychmiast uwalniane, a mem_cgroup_iter() nadal
spaceruje po nich, więc wywoływana jest na nich funkcja Shrek_lruvec().
get_scan_count() odczytuje licznik fantomowy poprzez lruvec_lru_size() i
pętla skanowania następnie przechodzi przez nr[] w krokach SWAP_CLUSTER_MAX
pustą listę, tak długo jak żyje martwa grupa. W ramach MGLRU
Zamiast tego działa skaner MGLRU, ale funkcja count_shadow_nodes() sumuje wszystko
NR_LRU_LISTS poprzez lruvec_lru_size() i przekracza budżet węzła cienia
ograniczyć tak samo.

Na jednym hoście 251 GiB przeszukanie każdego znalezionego mz->lru_zone_size[] 380
liczniki opisujące folia, których w ogóle nie ma na liście: 124777314 stron, 476 GiB,
1,89x pamięć RAM urządzenia w 57 grupach. Wszyscy byli na memcgs
CSS_DYING ustawione, CSS_ONLINE wyczyszczone i zgłoszone pary rodzic/dziecko
rozmiary identyczne w bajtach.

LRU_UNEVICTABLE również wymaga przeniesienia rozmiaru. Jego lista celowo nie jest
łączone, ponieważ lruvec_init() zatruwa głowę - LRU jest nieuniknione
imaginary i folio nigdy nie są na nim nawleczone - ale rozmiar jest zachowywany
lruvec_add_folio()/lruvec_del_folio() i te folia zaliczają się do
odtąd rodzicem.

Zależy to od zatwierdzenia bf4ade7dbd76 („memcg: zachowaj objcg folio tak samo jak
jego węzeł”) i nie wolno go przenosić przed nim. Bez tego
niezmienny objcg folio może należeć do innego węzła, a więc już folio
dołączona do listy rodzica może nadal zostać przekształcona w lruvec dziecka
dopóki węzeł objcg nie zostanie ponownie wyświetlony w późniejszej iteracji
memcg_reparent_objcgs(); wyczyść licznik dziecka wcześniej, a potem pozwól
lruvec_del_folio() przekracza go i wyzwala WARN_ONCE()/VM_BUG_ON() w
mem_cgroup_update_lru_size().

>_ Referencje

Dane podatności pochodzą z oficjalnych źródeł (CVE® List / NVD). Opisy po polsku są tłumaczone automatycznie i mogą zawierać nieścisłości – na stronie rekordu można wyświetlić wersję angielską.

This product uses the NVD API but is not endorsed or certified by the NVD.

Copyright © 1999–2026, The MITRE Corporation. CVE is a registered trademark and the CVE logo is a registered trademark of The MITRE Corporation.

CVE Usage: MITRE hereby grants you a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute Common Vulnerabilities and Exposures (CVE®). Any copy you make for such purposes is authorized provided that you reproduce MITRE's copyright designation and this license in any such copy. ALL DOCUMENTS AND THE INFORMATION CONTAINED THEREIN PROVIDED BY MITRE ARE PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND.

NVD Terms of Use / CVE® Terms of Use / nvd.nist.gov / cve.org