Linux · Linux Kernel · CVE-2024-50066
**Nome do software vulnerável e versões afetadas**
Versões do kernel Linux anteriores à 6.6.58
**Descrição**
O problema está relacionado a uma condição de corrida na função `move page tables()`, especificamente entre `move normal pmd()` e `retract page tables()` no código THP. Isso pode levar à criação de entradas PMD inválidas, permitindo potencialmente a escalada de privilégios de usuário para kernel em determinadas arquiteturas, como x86. A vulnerabilidade pode ser explorada criando mapeamentos THP de shmem/arquivo e provocando uma condição de corrida entre as funções `move normal pmd()` e `retract page tables()`.
A função `move page tables()` analisa o tipo da entrada PMD e o intervalo de endereços especificado para determinar como mover o próximo bloco de entradas da tabela de páginas. O `mmap lock` é mantido no modo de gravação, mas ainda não há bloqueios rmap. Para entradas PMD que apontam para tabelas de páginas e são totalmente cobertas pelo intervalo de endereços de origem, `move pgt entry(NORMAL PMD, ...)` é chamada, o que primeiro obtém bloqueios rmap e, em seguida, executa `move normal pmd()`.
A função `move normal pmd()` obtém os bloqueios de tabela de páginas necessários na origem e no destino e, em seguida, move uma tabela de páginas inteira da origem para o destino. O problema é que os bloqueios rmap, que protegem contra a remoção simultânea de tabelas de páginas por `retract page tables()` no código THP, só são obtidos após a leitura da entrada PMD e a decisão sobre como movê-la.
**Recomendações**
Para resolver o problema, atualize o kernel do Linux para a versão 6.6.58 ou posterior. Como