CVE-2026-98503 in Linux
Sumário
de VulDB • 19/10/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
packet: use a conclusão de ubuf_info para pacotes no TX_RING
tpacket_snd envia skbs com frags apontando para os slots do seu ring. Os slots são liberados quando skb->destructor é chamado.
Uma chamada a skb_orphan chama o destructor do skb antes que o skb seja desalocado. Isso pode causar a reutilização do slot enquanto ainda está vinculado ao skb.
Mude para a conclusão padrão de zerocopy (ubuf_info) para que o slot seja liberado apenas quando todas as referências à carga útil forem desalocadas ou copiadas. Restaure o destructor do skb para sock_wfree padrão.
O callback de conclusão ubuf_info pode ser chamado com um skb NULL, mas somente a partir de net_zcopy_put e da API relacionada, usada por implementações de zerocopy que mantêm sua própria referência no uarg, como MSG_ZEROCOPY. Este uarg é sempre concluído apenas em skb_zcopy_clear, portanto o skb está sempre definido.
Para evitar que o userspace faça aliasing do estado em trânsito nos slots compartilhados do ring, aloque tpacket_uarg por pacote, e não por slot. Isso adiciona uma pequena alocação ao caminho de transmissão (transmit path). Use kmalloc padrão para permitir backporting para kernels estáveis.
O uarg mantém uma referência sk_wmem_alloc, em vez de uma referência sk_refcnt. packet_free_tx_ring aguarda sk_wmem_alloc antes de liberar as páginas do ring. Sempre aloque vec->deferred para tx_ring para que os rings com suporte a página também aguarde sk_wmem_alloc quando skb_copy_ubufs reduzir referências às páginas antes de chamar tpacket_ubuf_complete.
Remova o teste tx_ring.pg_vec que tpacket_destruct_skb realizava antes de acessar o slot. A referência sk_wmem alloc agora garante que o slot é válido. O teste também não é suficiente por si só, pois lê pg_vec sem pg_vec_lock, então pode haver uma condição de corrida (race condition) com packet_set_ring.
Como resultado, um slot é liberado quando sua carga útil é copiada, o que pode ocorrer antes da transmissão (por exemplo, em skb_orphan_frags_rx). Se copiado antes que skb_tx_timestamp() seja chamado, nenhum timestamp do slot é registrado, semelhante ao ocorrido quando skb_orphan() era chamada cedo no datapath antes deste patch.
Reverta a infraestrutura anterior agora não utilizada de skb_zcopy_.._nouarg.
Depende do commit 992cc9f94ca9 ("net/packet: adie o desalocação vmalloc TX_RING até que os skbs terminem").
If you want to get best quality of vulnerability data, you may have to visit VulDB.