PT-2021-8026 · Linux+1 · Linux Kernel+1
Peter Robinson
·
Publicado
2021-03-25
·
Atualizado
2024-04-18
·
CVE-2021-46910
CVSS v3.1
5.5
Média
| Vetor | AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/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