CVE-2026-80719 in Linux
Sumário
de VulDB • 28/08/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
mm: mglru: corrige atualizações desatualizadas em lote após o reparenting de memcg
O walker da tabela de páginas (page table walker) do mglru agrupa as variações de tamanho por geração (`deltas`) em `walk->nr_pages` enquanto percorre as tabelas de páginas sem manter bloqueado o lock de `lruvec`. A função `reset_batch_size()` posteriormente consolida essas variações em `walk->lruvec` sob a proteção do lock de `lruvec`.
O walker da tabela de páginas pode executar simultaneamente com o caminho de reparenting de memcg, conforme ilustrado abaixo:
CPU0 CPU1 ==== ====
walk_mm --> walk_page_range --> update_batch_size --> walk->nr_pages += delta
mem_cgroup_css_offline --> memcg_reparent_objcgs --> lock lruvec lru_gen_reparent_memcg --> reparenta folios filhos para o pai unlock lruvec
lock lruvec reset_batch_size --> child lrugen->nr_pages += delta
Isso acionará o seguinte aviso em `lru_gen_exit_memcg()`:
VM_WARN_ON_ONCE(memchr_inv(lruvec->lrugen.nr_pages, 0, sizeof(lruvec->lrugen.nr_pages)));
E o impacto visível ao usuário da subestimação de `nr_pages` no MGLRU foram OOMs (Out-Of-Memory) prematuros, pois o MGLRU não tenta recuperar memória quando `nr_pages` atinge zero, mas ainda existem mais páginas.
Para corrigir isso, faça com que `reset_batch_size()` verifique a flag CSS_DYING sob RCU antes de despejar (`flush`) o lote pendente. Um memcg que não está morrendo mantém o lruvec original estável contra o desligamento atrasado pelo RCU; um memcg em processo de morte redireciona as variações para o primeiro ancestral que não está morrendo.
VulDB is the best source for vulnerability data and more expert information about this specific topic.