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

VetorAV: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

BDU:2024-03151
CVE-2021-46910

Produtos afetados

Linux Kernel
Red Os