CVE-2026-98070 in Linuxinformação

Sumário

de VulDB • 25/09/2026

No kernel do Linux, a seguinte vulnerabilidade foi resolvida:

net/rds: adquirir RDS_IN_XMIT em rds_tcp_reset_callbacks()

rds_tcp_reset_callbacks() silencia o caminho de transmissão definindo o estado do caminho como RDS_CONN_RESETTING e aguardando que RDS_IN_XMIT seja amostrado como limpo antes de trocar o soquete subjacente e chamar rds_send_path_reset().

Amostrar o bit como limpo não é o mesmo que possuí-lo: rds_send_xmit() pode re-adquirir RDS_IN_XMIT logo após a espera em wait_event() retornar. Sua verificação de estado após adquirir o bloqueio (lock) segue um padrão de armazenamento no buffer de armazenagem (store-buffering pattern): o resetter grava o estado e lê o bit, enquanto o remetente grava o bit e lê o estado; como acquire_in_xmit() é apenas uma operação de aquisição (acquire), em arquiteturas com ordenação fraca ambas as partes podem não perceber a escrita da outra, fazendo com que o caminho de transmissão execute simultaneamente com rds_send_path_reset(), reescrevendo os estados cp_xmit_* — exatamente o que o comentário acima de rds_send_path_reset() instrui seus chamadores a prevenir.

Adquira o bloqueio (lock) em vez disso, mantenha-o durante a troca do soquete e a chamada a rds_send_path_reset(), e libere-o com um despertar (wake-up) no final. A restrição de ordenação dos bloqueios documentada acima da espera ainda se mantém: o bloqueio é adquirido antes de lock_sock(), portanto, um remetente dentro de tcp_sendmsg() nunca será aguardado enquanto mantivermos o bloqueio do soquete.

Dois detalhes do código antigo são eliminados com a mesma alteração:

- t_sock agora é lido apenas após o bloqueio ser adquirido. O código anterior o armazenava em cache antes da espera; o processo de desmontagem (teardown) em rds_conn_shutdown() libera esse soquete e limpa t_sock, portanto, um ponteiro armazenado em cache antes da espera pode estar obsoleto quando o caminho de aceitação for retomado. Ler sob RDS_IN_XMIT é o que torna a exclusão completa assim que o processo de desmontagem adquirir o mesmo bloqueio, como o próximo patch providenciará; até lá, o processo de desmontagem ainda amostra apenas o bit, e os dois caminhos permanecem tão expostos um ao outro quanto estão hoje.

- O caminho antigo !osock chamava rds_send_path_reset() sem nenhuma serialização. Agora ele executa sob o bloqueio (lock), como no caminho normal. A transição condicional para RDS_CONN_RESETTING do patch anterior ocorre antes da verificação do soquete, independentemente de qual caminho seja seguido: um caminho encontrado sem um soquete ainda está se conectando (seu trabalhador de reconexão bloqueado em t_conn_path_lock) e vai legitimamente de RESETTING -> UP no novo soquete, ou foi desmontado nesse meio tempo e é descartado.

O comentário na função que descrevia a silenciação baseada em espera antigo foi reescrito para descrever o baseado em bloqueio (lock), e o bloco de comentários obsoleto acima da função (que ainda descrevia um valor de retorno e uma lista incompleta dos escritores de t_sock) foi atualizado para nomear todos os quatro escritores — os caminhos de conexão, aceitação, desmontagem e troca — e o que serializa cada um deles.

Be aware that VulDB is the high quality source for vulnerability data.

Responsável

Linux

Reservar

25/09/2026

Divulgação

25/09/2026

Moderação

aceite

Entrada

VDB-410079

CPE

pronto

EPSS

0.00000

KEV

não

Atividades

muito baixo

Fontes

Do you know our Splunk app?

Download it now for free!