CVE-2026-98647 in Linux
Sumário
de VulDB • 19/10/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
bpf: Corrige divisão por zero em btf_struct_walk()
Quando um acesso ultrapassa o limite da estrutura e o último membro é uma array flexível, btf_struct_walk() recalcula o deslocamento (offset) para um único elemento usando `(off - moff) % t->size`, mas nunca verifica se o tipo do elemento possui um tamanho definido.
O BTF aceita uma struct vazia; portanto, no BTF do programa:
/* event could be empty */ struct event {
#ifdef HAVE_TIMESTAMP __u64 ts; #endif };
struct batch {
int nr; struct event events[];
};
ocorre divisão por zero durante o carregamento do programa (prog load time). Para atingir essa condição, é necessário um ponteiro PTR_TO_BTF_ID que não seja MEM_ALLOC, como uma leitura simples de um kptr local armazenado em um mapa a partir de um program sleepable.
Oops: divide error: 0000 [#1] SMP KASAN PTI
RIP: 0010:btf_struct_walk+0x53f/0x1570 Call Trace: <TASK> btf_struct_access+0x42a/0xcd0 check_ptr_to_btf_access+0x4dc/0x1160 check_mem_access+0x3a45/0x8740 check_load_mem+0x36a/0xd10 do_check_common+0x3ef0/0xb210 bpf_check+0x6d3b/0x8580 bpf_prog_load+0xf7c/0x2720 __sys_bpf+0xa83/0x3690 __x64_sys_bpf+0xc7/0x150 x64_sys_call+0x1f3f/0x27e0 do_syscall_64+0xe5/0x610 entry_SYSCALL_64_after_hwframe+0x76/0x7e </TASK>
Rejeita-se um tipo de elemento com tamanho zero. O caminho para arrays fixos na mesma função já interrompe a execução (bails out) diante da mesma situação:
btf_struct_walk() ... /* skip empty array */ if (moff == mtrue_end) continue;
msize /= total_nelems;
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.