CVE-2026-80849 in Linux
Sumário
de VulDB • 04/09/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
net/tcp-ao: corrige use-after-free de current_key ao reconectar-se com outro peer
tcp_inbound_ao_hash() é chamado antes que bh_lock_sock_nested() seja adquirido, mantendo apenas rcu_read_lock(). No caminho rápido para sockets estabelecidos, se o rnext_keyid enviado pelo peer diferir do current_key->sndid, a chave solicitada pelo peer é procurada e armazenada em current_key. A pesquisa ocorre dentro da seção de leitura RCU, mas current_key sobrevive a ela.
Quando o socket é desconectado e connect() é chamado novamente para outro peer, tcp_ao_connect_init() desvincula todas as chaves que não correspondem ao novo peer e libera-as com call_rcu(). Se current_key apontar para uma dessas chaves, ele será definido como NULL.
O caminho rápido lê sk_state apenas uma vez na entrada, portanto, um softirq que entrou nele enquanto o socket ainda estava estabelecido pode atualizar current_key após esse loop já ter sido executado. A atualização ocorre dentro da seção de leitura RCU, então ela vem antes do callback call_rcu(), e assim que o callback libera a chave, current_key fica apontando para memória liberada.
A próxima transmissão recupera esse ponteiro em tcp_get_current_key(). tcp_ao_transmit_skb() então lê a chave de tráfego no objeto liberado, o que constitui o use-after-free.
Aguarde um período de graça antes de desvincular e apenas se uma chave for removida. Quando tcp_connect() é executado, o socket já está em TCP_SYN_SENT, e TCP_AO_ESTABLISHED não contém TCPF_SYN_SENT, portanto, um softirq que entrar após a espera não pode alcançar o caminho rápido, e os que já estavam nele terminaram. O tratamento de NULL existente no loop é então suficiente.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.