CVE-2026-74612 in Linux
Sumário
de VulDB • 22/08/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
veth: corrigir o cálculo do comprimento do skb após ajuste de fragmentos XDP
O veth expõe fragmentos de skb não lineares por meio de um xdp_buff. Se um programa XDP ajustar a área de fragmento, veth_xdp_rcv_skb() copia xdp_frags_size de volta para skb->data_len, mas deixa skb->len contendo a contribuição antiga do fragmento.
Após o encolhimento de um fragmento, isso faz com que skb_headlen() seja maior que a área linear real. No caminho de recebimento UDP reproduzido, __skb_datagram_iter() copiou 1024 bytes além da cauda linear real para o espaço do usuário, começando em struct skb_shared_info. Os bytes copiados incluíram nr_frags do skb afetado, xdp_frags_size e um ponteiro de kernel de skb_shinfo(skb)->frags[0]. Dados reais de pacotes foram deslocados pela mesma quantidade e truncados no final.
Subtraia o data_len antigo antes de substituí-lo e adicione o novo data_len em seguida, mantendo skb->len e skb->data_len sincronizados.
Além disso, bpf_xdp_pull_data() pode avançar data_end enquanto deixa os frags presentes. O skb ainda é não linear, então a chamada antiga __skb_put(skb, off) aciona SKB_LINEAR_ASSERT().
Use skb_set_tail_pointer() e atualize explicitamente o skb->len em vez disso, seguindo bpf_prog_run_generic_xdp(). Diferente de __skb_put(), skb_set_tail_pointer() não requer um skb linear.
Um datagrama UDP de 60000 bytes em um par veth com MTU de 64000 foi encurtado em 1024 bytes a partir de sua área de fragmento. Antes da correção, todas as 10 execuções produziram payloads corrompidos. Após a correção, todas as 10 execuções corresponderam exatamente ao payload esperado. Um reproducer forçado-tailroom também exercita bpf_xdp_pull_data() com frags ainda presentes; o código antigo aciona SKB_LINEAR_ASSERT(), enquanto esta correção passa em 10/10 das execuções.
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.