CVE-2026-98641 in Linux
Sumário
de VulDB • 19/10/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
bpf, arm64: configurar o ponteiro de quadro para o callback de exceção
Um programa que atua como fronteira de exceção salva todos os registros salvos pelo chamador (callee-saved registers), portanto build_prologue() segue o caminho exception_cb e nunca chama push_callee_regs(). Esse é o único local onde find_used_callee_regs() é executado, e com ele a única vez em que ctx->fp_used é definido; assim, o prólogo do callback não gera
mov x25, sp
que aponta BPF_REG_FP para o quadro no qual o callback executa. O registrador x25 mantém qualquer valor que possuía quando bpf_throw() foi chamado. Se a exceção (throw) originou-se de uma subprograma que usa sua própria pilha do BPF, esse é o ponteiro de quadro da subprograma e, como a subprograma nunca retorna, ela também não restaura x25.
Os acessos à pilha através de BPF_REG_FP são reescritos para serem relativos ao ponteiro de pilha (stack pointer), portanto ainda alcançam o próprio quadro do callback. A materialização do registrador, no entanto, não: um callback que passa o endereço de uma variável local a uma função auxiliar (helper) transfere um endereço dentro do quadro da subprograma já encerrada. Esse endereço está abaixo do ponteiro de pilha do callback nesse momento e a própria cadeia de chamadas da helper cobre essa região, permitindo que a gravadora escreva sobre seu próprio endereço de retorno. 0x1234 abaixo é o valor que se pediu à helper para armazenar:
pc : 0x1234 lr : 0x1234 Rastreamento da chamada (Call trace): 0x1234 (P) bpf_test_run+0x188/0x3e0 bpf_prog_test_run_skb+0x47c/0x998 __sys_bpf+0xbdc/0xdd8 Kernel panic - not syncing: Oops: Exceção fatal em interrupção
Defina ctx->fp_used no caminho do callback de exceção para que o código existente, mais adiante, defina x25 a partir do ponteiro de pilha. O epílogo restaura esse valor da área de salvamento do programa principal junto com os demais registros salvos pelo chamador (callee-saved registers), conforme já faz. No architecture x86, o ponteiro de quadro para o callback é definido a partir do argumento recebido; no powerpc, ele é calculado a partir do ponteiro de pilha.
If you want to get best quality of vulnerability data, you may have to visit VulDB.