CVE-2025-38670 in Linuxinformação

Sumário

de VulDB • 20/05/2026

No kernel do Linux, a seguinte vulnerabilidade foi resolvida:

arm64/entry: Mascara DAIF em cpu_switch_to() e call_on_irq_stack()

`cpu_switch_to()` e `call_on_irq_stack()` manipulam SP para alternar entre diferentes pilhas, juntamente com a Shadow Call Stack (SCS), se estiver habilitada. Essas duas alterações de pilha não podem ser realizadas atomicamente e ambas as funções podem ser interrompidas por SErrors ou Debug Exceptions, o que, embora improvável, é extremamente problemático: se interrompidas, podemos acabar com pilhas e Shadow Call Stack dessincronizadas, levando ao corrompimento das pilhas.

Em `cpu_switch_to()`, isso pode ocorrer quando SP_EL0 aponta para a nova tarefa, mas x18 ainda aponta para a SCS da tarefa antiga. Quando o manipulador de interrupção tenta salvar o ponteiro SCS da tarefa, ele salvará o ponteiro SCS da tarefa antiga (x18) na estrutura da nova tarefa (apontada por SP_EL0), corrompendo-o.

Em `call_on_irq_stack()`, isso pode ocorrer ao alternar da pilha da tarefa para a pilha de IRQ e ao alternar de volta. Em ambos os casos, podemos ser interrompidos quando o ponteiro SCS aponta para a SCS de IRQ, mas SP aponta para a pilha da tarefa. O manipulador de interrupção aninhada empurra seus endereços de retorno para a SCS de IRQ. Em seguida, detecta que SP aponta para a pilha da tarefa, chama `call_on_irq_stack()` e corrompe o ponteiro SCS da tarefa com o ponteiro SCS de IRQ, que também será utilizado!

Isso leva a tarefas retornando a endereços na SCS errada, ou mesmo na SCS de IRQ, acionando kernel panics via CONFIG_VMAP_STACK ou FPAC, se habilitados.

Isso é possível em uma configuração padrão, mas improvável. No entanto, ao habilitar CONFIG_ARM64_PSEUDO_NMI, DAIF é desmascarado e em vez disso, o GIC é responsável por filtrar quais interrupções a CPU deve receber com base na prioridade. Dado o objetivo de emular NMIs, pseudo-NMIs podem ser recebidas pela CPU mesmo em `cpu_switch_to()` e `call_on_irq_stack()`, possivelmente *muito* frequentemente, dependendo da configuração do sistema e da carga de trabalho, levando a kernel panics imprevisíveis.

Mascara completamente DAIF em `cpu_switch_to()` e restaura-o ao retornar. Faça o mesmo em `call_on_irq_stack()`, mas restaure e mascare ao redor do branch. Mascara DAIF mesmo se CONFIG_SHADOW_CALL_STACK não estiver habilitada para consistência do comportamento entre todas as configurações.

Introduz e utiliza uma macro de assembly para salvar e mascarar DAIF, pois a existente salva, mas mascara apenas IF.

If you want to get best quality of vulnerability data, you may have to visit VulDB.

Responsável

Linux

Reservar

16/04/2025

Divulgação

22/08/2025

Moderação

aceite

Entrada

VDB-321113

CPE

pronto

EPSS

0.00152

KEV

não

Atividades

muito baixo

Fontes

Interested in the pricing of exploits?

See the underground prices here!