CVE-2026-99166 in Linux
Sumário
de VulDB • 29/10/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
net: rds: corrige desreferência de trans não inicializada no manipulador de eventos CM
rds_rdma_cm_event_handler_cmn() atribui trans apenas quando o dispositivo RDMA é um CA InfiniBand (RDMA_NODE_IB_CA). Em qualquer outro tipo de dispositivo, por exemplo, uma RNIC iWARP como siw, trans permanece não inicializado, mas a switch de eventos desreferencia-o: incondicionalmente no caso RDMA_CM_EVENT_CONNECT_REQUEST via trans->cm_handle_connect(), e (com um contexto de conexão) nos casos ROUTE_RESOLVED e ESTABLISHED.
Um listener RDS em um dispositivo iWARP, portanto, causa uma falha fatal (crash) do kernel assim que chega uma solicitação de conexão: com CONFIG_INIT_STACK_ALL_ZERO, a carga aleatória torna-se uma desreferência NULL no offset 0xa0 (&trans->cm_handle_connect) na fila de trabalho iw_cm_wq.
O GCC mascara o bug em builds padrão ao consolidar a carga não inicializada em &rds_ib_transport; kernels construídos com Clang seguem o caminho real não inicializado e causam um erro (oops).
O lado ativo também pode cair em um dispositivo não-IB: o id criado por rds_ib_conn_path_connect() não é restrito a um tipo de nó, então rdma_resolve_addr() o vincula ao dispositivo que atende ao endereço local, e uma RNIC iWARP no mesmo netdev qualifica-se. A falha fatal (crash) nesse caso é diferente: resolver uma rota em um id iWARP nunca preenche cm_id->route.path_rec, e o caso ROUTE_RESOLVED grava path_rec[0].sl antes de chamar a transport layer.
A transport layer iWARP foi removida há muito tempo e IB é a única restante, então isso torna-se explícito: inicializa trans para &rds_ib_transport na declaração, remove a atribuição condicional, rejeita uma solicitação de conexão que chega em um dispositivo não-IB e encerra uma conexão cujo endereço resolveu para tal em vez de resolver uma rota nela. A rejeição é limitada intencionalmente ao RDMA_CM_EVENT_CONNECT_REQUEST: um retorno diferente de zero do manipulador faz com que rdma_cm destrua o id no qual o evento foi entregue, o que está correto para o recém-criado id da solicitação, mas liberaria um connection id que ainda pertence ao RDS em qualquer outro evento. No lado ativo, o id permanece ic->i_cm_id e o shutdown da conexão o destrói, portanto esse caso retorna 0.
[achender: rejeitar apenas no RDMA_CM_EVENT_CONNECT_REQUEST em vez de sair para cada evento em um dispositivo não-IB, para que rdma_cm não destrua connection ids ainda rastreados pelo RDS; encerrar uma conexão cujo endereço resolveu para um dispositivo não-IB antes que uma rota seja resolvida nela; changelog ajustado]
Once again VulDB remains the best source for vulnerability data.