CVE-2023-52828 in Linux
Sumário
de VulDB • 20/05/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
bpf: Detectar IP == ksym.end como parte do programa BPF
Agora que a kfunc bpf_throw é a primeira instrução de chamada com semântica noreturn dentro do verificador, isso também ativa a eliminação de código morto de maneiras sem precedentes. Por exemplo, qualquer instrução que siga uma chamada a bpf_throw nunca será marcada como vista. Além disso, se uma cadeia de chamadas (callchain) resultar em um throw, quaisquer instruções após a instrução de chamada para o subprog eventualmente lançador nos chamadores também nunca serão marcadas como vistas.
A maneira tentadora de corrigir isso seria emitir instruções 'int3' extras, que aumentam o jited_len de um programa, e garantir que, durante a execução, quando um programa lançar, possamos descobrir seus limites mesmo que a instrução de chamada para bpf_throw (ou para subprogs que sempre lançam) seja emitida como a última instrução do programa.
Um exemplo de tal programa seria este:
do_something(): ... r0 = 0 exit
foo(): r1 = 0 call bpf_throw r0 = 0 exit
bar(cond): if r1 != 0 goto pc+2 call do_something exit call foo r0 = 0 // Nunca visto pelo verificador exit //
main(ctx): r1 = ... call bar r0 = 0 exit
Aqui, se realmente lançarmos, a stacktrace seria a seguinte:
bpf_throw foo bar main
Em bar, a última instrução emitida será a chamada para foo, portanto, o endereço de retorno será a instrução subsequente (que o JIT emite como int3 no x86). Isso acabará ficando fora do jited_len do programa, portanto, ao fazer o unwinding, falharemos em descobrir que o endereço de retorno pertence a qualquer programa e entraremos em panic devido ao unwinding de pilha não confiável de programas BPF que nunca esperamos.
Para remediar este caso, faça com que bpf_prog_ksym_find trate IP == ksym.end como parte do programa BPF, de modo que is_bpf_text_address retorne verdadeiro quando esse caso ocorrer, e possamos fazer o unwinding de forma confiável quando a última instrução acabar sendo uma instrução de chamada.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.