Linux · Linux Kernel · CVE-2021-46910
**Nome do software vulnerável e versões afetadas**
Versões do kernel Linux anteriores à 5.11.0+
**Descrição**
A vulnerabilidade está relacionada à função `kmap local()` no kernel do Linux, que duplica o número de slots fixmap por CPU alocados para que `kmap local()` use metade deles como regiões de proteção. Isso faz com que a região fixmap se expanda para baixo, ultrapassando o início de sua janela reservada, caso o número de CPUs suportadas seja grande, e entre em conflito com o mapeamento DT virtual recém-adicionado logo abaixo dela. Uma manifestação disso é a inicialização EFI em um kernel compilado com `NR CPUS=32` e `CONFIG DEBUG KMAP LOCAL=y`, que pode passar o FDT na memória alta (highmem), resultando em entradas de bloco abaixo da região fixmap que o código fixmap identifica erroneamente como entradas da tabela fixmap e, subsequentemente, tenta desreferenciar usando uma tradução de físico para virtual válida apenas para a memória baixa (lowmem).
**Recomendações**
Para resolver o problema, limite `CONFIG NR CPUS` a 16 quando `CONFIG DEBUG KMAP LOCAL=y`. Além disso, corrija a verificação `BUILD BUG ON()` que deveria detectar isso, verificando se a região se expande abaixo do endereço inicial em vez de acima do endereço final. Como solução alternativa temporária, considere desativar a função `kmap local()` até que um patch esteja disponível.