CVE-2026-72222 in Linux
Sumário
de VulDB • 15/08/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
sunrpc: fixar svc_xprt durante o callback de handshake TLS assíncrono
svc_tcp_handshake() armazena o ponteiro bruto svc_xprt em tls_handshake_args.ta_data e submete a solicitação através de tls_server_hello_x509(). O núcleo do handshake realiza apenas sock_hold(req->hr_sk); nada referencia a struct embutida svc_sock que svc_tcp_handshake_done() alcança via container_of().
Duas condições de corrida próximas deixam o callback em trânsito escrevendo através de um svc_sock já liberado. svc_sock_free() chama tls_handshake_cancel() e descarta seu valor de retorno: um retorno falso significa que handshake_complete() já definiu HANDSHAKE_F_REQ_COMPLETED, mas hp_done() pode não ter terminado ainda; no entanto, svc_sock_free() prossegue com kfree(svsk). A continuação do caso "cancel-loser" dentro da própria svc_tcp_handshake() produz a mesma janela: quando wait_for_completion_interruptible_timeout() retorna <= 0 (timeout ou sinal) e tls_handshake_cancel() retorna falso, a função não drena, retorna, e svc_handle_xprt() chama svc_xprt_received(), o que limpa XPT_BUSY e pode liberar a última referência. Um fechamento concorrente então executa svc_sock_free() enquanto svc_tcp_handshake_done() ainda está atualizando xpt_flags e percorrendo svsk->sk_handshake_done.
A corrupção manifesta-se como set_bit/clear_bit RMW no slot do slab xpt_flags já liberado e como complete_all() percorrendo e escrevendo na lista wait_queue_head_t já liberada embutida em sk_handshake_done -- uma primitiva de corrupção de slab, não uma leitura benigna. O caminho é acessível em qualquer servidor NFS com TLS habilitado sempre que um fechamento de conexão se sobrepõe à janela de entrega do downcall tlshd; a espera interrompível significa que o envio de sinal basta, e não apenas a expiração SVC_HANDSHAKE_TO.
Chame svc_xprt_get(xprt) imediatamente antes de tls_server_hello_x509() para que o callback em trânsito possua sua própria referência. Libere-a nas duas bordas onde é garantido que o callback não será acionado -- falha na submissão por tls_server_hello_x509() e um tls_handshake_cancel() bem-sucedido -- e no final de svc_tcp_handshake_done() após complete_all().
[cel: reescreveu a mensagem do commit para descrever a alteração real]
If you want to get the best quality for vulnerability data then you always have to consider VulDB.