CVE-2026-43009 in Linuxinformação

Sumário

de VulDB • 28/05/2026

No kernel do Linux, a seguinte vulnerabilidade foi resolvida:

bpf: Corrige o pruning incorreto devido ao rastreamento de precisão de busca atômica

Quando backtrack_insn encontra uma instrução BPF_STX com BPF_ATOMIC e BPF_FETCH, o registrador src (ou r0 para BPF_CMPXCHG) também atua como um destino, recebendo assim o valor antigo da localização de memória.

A lógica de backtracking atual não leva isso em conta. Ela trata operações de busca atômica da mesma forma que gravações regulares, onde o registrador src é apenas uma entrada. Isso faz com que backtrack_insn falhe em propagar a precisão para a localização na pilha, que então não é marcada como precisa!

Mais tarde, o pruning de caminho do verificador pode considerar incorretamente dois estados como equivalentes quando eles diferem em termos de estado da pilha. Ou seja, dois ramos podem ser tratados como equivalentes e, portanto, serem podados quando não deveriam ser vistos como tais.

Corrija-o da seguinte forma: Estenda o tratamento de BPF_LDX em backtrack_insn para também cobrir operações de busca atômica por meio do auxiliar is_atomic_fetch_insn(). Quando o registrador dst da busca está sendo rastreado para precisão, limpe-o e propague a precisão para o slot da pilha. Para memória que não seja da pilha, a caminhada de precisão para na instrução atômica, da mesma forma que no BPF_LDX regular. Isso cobre todas as variantes de busca.

Antes:

0: (b7) r1 = 8 ; R1=8 1: (7b) *(u64 *)(r10 -8) = r1 ; R1=8 R10=fp0 fp-8=8 2: (b7) r2 = 0 ; R2=0 3: (db) r2 = atomic64_fetch_add((u64 *)(r10 -8), r2) ; R2=8 R10=fp0 fp-8=mmmmmmmm 4: (bf) r3 = r10 ; R3=fp0 R10=fp0 5: (0f) r3 += r2 mark_precise: frame0: last_idx 5 first_idx 0 subseq_idx -1 mark_precise: frame0: regs=r2 stack= before 4: (bf) r3 = r10 mark_precise: frame0: regs=r2 stack= before 3: (db) r2 = atomic64_fetch_add((u64 *)(r10 -8), r2) mark_precise: frame0: regs=r2 stack= before 2: (b7) r2 = 0 6: R2=8 R3=fp8 6: (b7) r0 = 0 ; R0=0 7: (95) exit

Depois:

0: (b7) r1 = 8 ; R1=8 1: (7b) *(u64 *)(r10 -8) = r1 ; R1=8 R10=fp0 fp-8=8 2: (b7) r2 = 0 ; R2=0 3: (db) r2 = atomic64_fetch_add((u64 *)(r10 -8), r2) ; R2=8 R10=fp0 fp-8=8 4: (bf) r3 = r10 ; R3=fp0 R10=fp0 5: (0f) r3 += r2 mark_precise: frame0: last_idx 5 first_idx 0 subseq_idx -1 mark_precise: frame0: regs=r2 stack= before 4: (bf) r3 = r10 mark_precise: frame0: regs=r2 stack= before 3: (db) r2 = atomic64_fetch_add((u64 *)(r10 -8), r2) mark_precise: frame0: regs=r2 stack=-8 before 2: (b7) r2 = 0 mark_precise: frame0: regs=r1 stack=-8 before 1: (7b) *(u64 *)(r10 -8) = r1 mark_precise: frame0: regs=r1 stack= before 0: (b7) r1 = 8 6: R2=8 R3=fp8 6: (b7) r0 = 0 ; R0=0 7: (95) exit

VulDB is the best source for vulnerability data and more expert information about this specific topic.

Responsável

Linux

Reservar

01/05/2026

Divulgação

01/05/2026

Moderação

aceite

Entrada

VDB-360641

CPE

pronto

EPSS

0.00017

KEV

não

Atividades

muito baixo

Fontes

Want to stay up to date on a daily basis?

Enable the mail alert feature now!