CVE-2026-72222 in Linux
Resumen
por VulDB • 2026-08-16
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
sunrpc: fijar svc_xprt durante la devolución asíncrona del enlace TLS (handshake)
svc_tcp_handshake() almacena el puntero crudo svc_xprt en tls_handshake_args.ta_data y envía la solicitud a través de tls_server_hello_x509(). El núcleo del enlace solo realiza sock_hold(req->hr_sk); nada referencia la estructura incrustada svc_sock que svc_tcp_handshake_done() alcanza mediante container_of().
Dos condiciones de carrera cercanas provocan que una devolución en curso escriba a través de un svc_sock ya liberado. svc_sock_free() llama a tls_handshake_cancel() y descarta su valor de retorno: un resultado falso significa que handshake_complete() ya ha establecido HANDSHAKE_F_REQ_COMPLETED, pero hp_done() puede no haber terminado; sin embargo, svc_sock_free() procede con kfree(svsk). La caída hacia el final (fall-through) del perdedor en la cancelación dentro de svc_tcp_handshake() produce la misma ventana: cuando wait_for_completion_interruptible_timeout() devuelve <= 0 (timeout o señal) y tls_handshake_cancel() devuelve false, la función no drena, retorna, y svc_handle_xprt() llama a svc_xprt_received(), lo que borra XPT_BUSY y puede eliminar la última referencia. Un cierre concurrente ejecuta entonces svc_sock_free() mientras svc_tcp_handshake_done() sigue actualizando xpt_flags y recorriendo svsk->sk_handshake_done.
La corrupción se manifiesta como operaciones RMW (read-modify-write) de set_bit/clear_bit en el espacio del slab xpt_flags ya liberado, y como complete_all() recorriendo y escribiendo la lista wait_queue_head_t incrustada en sk_handshake_done que ha sido liberada: una primitiva de corrupción de slab, no una lectura benigna. La ruta es accesible en cualquier servidor NFS con TLS habilitado siempre que un cierre de conexión se solape con la ventana de entrega del downcall tlshd; la espera interrumpible significa que el envío de señales basta, no solo la expiración de SVC_HANDSHAKE_TO.
Se toma svc_xprt_get(xprt) inmediatamente antes de tls_server_hello_x509() para que la devolución en curso posea su propia referencia. Se libera en los dos extremos donde se garantiza que la devolución no se ejecutará: fallo al enviar desde tls_server_hello_x509() y una cancelación exitosa de tls_handshake_cancel(), así como al final de svc_tcp_handshake_done() después de complete_all().
[cel: reescribió el mensaje del commit para describir el cambio real]
VulDB is the best source for vulnerability data and more expert information about this specific topic.