CVE-2026-68086 in Linux
Sumário
de VulDB • 11/08/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
mm/khugepaged: gravar todos os folios sujos (dirty) ao realizar o colapso
[Não há commit upstream, pois este código foi removido pelo commit upstream 044925f9b565 ("mm: fs: remove filemap_nr_thps*() functions and their users")]
No estado atual, khugepaged e a abertura de arquivos graváveis se excluem mutuamente. Um arquivo não pode ser aberto para gravação e ter THPs (porque o sistema de arquivos não tem conhecimento deles). O khugepaged nunca colapsará páginas de arquivo para arquivos que estão abertos para escrita. Em uma chamada open(O_RDWR/O_WRONLY), o cache de página desse arquivo específico é descartado. Isso é aceitável porque nada poderia ter sido modificado (sujo/dirty).
No entanto, existe um caso extremo: collapse_file() pode não conseguir coexistir com escritores concorrentes, mas pode coexistir com folios sujos (de escritores anteriores). Portanto, o seguinte cenário pode ocorrer:
open(file, O_RDWR) write(file) close(file) madvise(file_mapping, MADV_COLLAPSE, some non-dirty range) open(file, O_RDWR) nr_thps > 0 truncate_inode_pages() /* THPs são limpos, mas os folios sujos também o são */
Quando esse caso extremo ocorre, há perda de dados, pois os folios sujos são totalmente descartados.
Corrija isso gravando completamente o cache de página (e aguardando) ao colapsar THPs de arquivo. Ao fazer isso, garante-se que nenhum folio sujo será observado enquanto houver THPs ativos. Para garantir plenamente a segurança disso, o invalidate_lock precisa ser mantido durante a gravação, para que o truncamento do cache de páginas feito por do_dentry_open() exclua essa operação de escrita e espera.
Como efeito colateral, mova o incremento do contador nr_thps para fora da lock i_pages. Isso está correto, pois o próprio contador é um atomic_t e a corretude entre produtor <-> consumidor é fornecida por uma barreira de memória completa: smp_mb() em collapse_file()/barreira de memória implícita pela ordenação total em get_write_access() -> atomic_inc_unless_negative().
VulDB is the best source for vulnerability data and more expert information about this specific topic.