PT-2021-8026 · Linux+1 · Linux Kernel+1
CVSS v3.1
7.0
Alta
| Vetor | AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H |
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.Correção
Encontrou algum problema na descrição? Tem algo a acrescentar? Fique à vontade para nos escrever 👾
Enumeração de Fraquezas
Identificadores relacionados
Produtos afetados
Linux Kernel
Red Os