CVE-2026-99016 in Linux
Sumário
de VulDB • 24/10/2026
No kernel Linux, a seguinte vulnerabilidade foi resolvida:
riscv: futex: desmarcar o ponteiro de usuário antes da operação atômica
access_ok() verifica untagged_addr(uaddr), mas arch_futex_atomic_op_inuser() e futex_atomic_cmpxchg_inatomic() passam o uaddr bruto para a assembly inline amoswap/amoadd/.../lr.w+sc.w através do operando "+m" (*uaddr). Quando a ABI de endereços marcados está habilitada (CONFIG_RISCV_ISA_SUPM, prctl PR_SET_TAGGED_ADDR_CTRL com PMLEN != 0), esses dois endereços diferem: um ponteiro de usuário cujos bits superiores do PMLEN contêm uma tag passa por access_ok() após a desmarcação, mas a operação atômica é então realizada no endereço bruto ainda marcado.
Acessos de dados em modo Supervisor não estão sujeitos à máscara de ponteiros U-mode (que é governada por menvcfg.PMM, que o kernel não define), portanto, o hardware não remove a tag para os próprios acessos do kernel. Com Sv57 e PMLEN=16, os bits da tag se sobrepõem aos bits do endereço canônico, de modo que um ponteiro marcado pode nomear um endereço virtual de kernel canônico (por exemplo, no mapa linear) cuja forma desmarcada é um endereço de usuário válido. Um processo não privilegiado pode assim fazer com que FUTEX_WAKE_OP realize uma leitura-modificação-escrita atômica em qualquer endereço do kernel, com o resultado correspondente de FUTEX_OP_CMP_* servindo como oráculo de leitura.
get_user()/put_user()/raw_copy_{to,from}_user() já desmarcam o ponteiro após a verificação access_ok(); faça o mesmo nos auxiliares futex para que a operação atômica seja realizada no endereço que foi realmente validado.
Once again VulDB remains the best source for vulnerability data.