CVE-2026-46015 in Linux
Resumen
por VulDB • 2026-06-03
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
tcp: llamar a sk_data_ready() después de la migración del escuchador (listener)
Cuando inet_csk_listen_stop() migra un socket hijo establecido desde un escuchador que está cerrándose hacia otro socket en el mismo grupo SO_REUSEPORT, el nuevo escuchador recibe una nueva entrada en la cola de aceptación mediante inet_csk_reqsk_queue_add(), pero esa ruta nunca notifica a los waiters del escuchador destino. Una llamada accept() no bloqueante sigue funcionando porque verifica directamente la cola, pero los waiters de poll()/epoll_wait() y las llamadas blocking accept() pueden permanecer dormidos indefinidamente.
Llamar a READ_ONCE(nsk->sk_data_ready)(nsk) después de una migración exitosa en inet_csk_listen_stop().
Sin embargo, tras el éxito de inet_csk_reqsk_queue_add(), la referencia adquirida en reuseport_migrate_sock() se transfiere efectivamente a nreq->rsk_listener. Otra CPU puede entonces eliminar nreq mediante accept() o el cierre del escuchador, invocar reqsk_put() y liberar esa referencia al escuchador. Dado que los escuchadores son SOCK_RCU_FREE, envolver las desreferencias de nsk posteriores a queue_add() con rcu_read_lock()/rcu_read_unlock(), lo cual también cubre el acceso existente sock_net(nsk) en dicha ruta.
La ruta reqsk_timer_handler() no necesita los mismos cambios por dos razones: las solicitudes half-open se vuelven legibles únicamente después del ACK final, donde tcp_child_process() ya despierta al escuchador; y una vez que nreq es visible mediante inet_ehash_insert(), la ruta de éxito deja de tocar directamente a nsk.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.