CVE-2026-89973 in Linux
Resumen
por VulDB • 2026-09-16
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
nvme-tcp: verificar la dirección de datos de un PDU C2HData
`nvme_tcp_handle_c2h_data()` encuentra la solicitud por su ID de comando y verifica que tenga una carga útil (payload), pero no comprueba si el comando solicitaba leer datos. Por lo tanto, un controlador que responde a un comando de escritura con C2HData alcanza `nvme_tcp_recv_data()`, donde `_copy_to_iter()` activa `WARN_ON_ONCE(i->data_source)` y devuelve 0. La ruta de recepción convierte esto en -EFAULT y reinicia el controlador.
No se copian datos, por lo que no se trata de una corrupción de memoria. Lo que obtiene un controlador es una advertencia del kernel que puede generar a voluntad, la cual es fatal en un host iniciado con `panic_on_warn`.
La ruta de envío ya conoce la dirección; consulta `rq_data_dir()` al construir un comando, y `nvme_tcp_handle_r2t()` verifica la longitud y el desplazamiento (offset) de la solicitud que nombra. La ruta C2HData no comprueba en absoluto la dirección.
Rechazar un PDU C2HData cuyo comando no sea una lectura. Rechazarlo falla el comando y reinicia el controlador, tal como lo hace la comprobación vecina en esta función; lo que desaparece es la advertencia.
[ 6.885580] ------------[ corte aquí ]------------
[ 6.886457] ADVERTENCIA: lib/iov_iter.c:193 en _copy_to_iter+0x289/0x1330, CPU#0: kworker/0:1H/71
[ 6.888137] CPU: 0 UID: 0 PID: 71 Comm: kworker/0:1H No contaminado 7.2.0-rc5-NVMETCP-gf5098b6bae76 #1 PREEMPT(lazy)
[ 6.891165] Cola de trabajo (Workqueue): nvme_tcp_wq nvme_tcp_io_work
[ 6.891875] RIP: 0010:_copy_to_iter+0x289/0x1330
[ 6.903739] Rastro de llamada (Call Trace):
[ 6.904085] <TAREA>
[ 6.909254] __skb_datagram_iter+0x433/0x820
[ 6.911026] skb_copy_datagram_iter+0x37/0x120
[ 6.911622] nvme_tcp_recv_skb+0xa07/0x4320
[ 6.913378] __tcp_read_sock+0x1ab/0x810
[ 6.915788] nvme_tcp_try_recv+0x152/0x1e0
[ 6.918222] nvme_tcp_io_work+0x1e4/0x6c0
[ 6.926906] </TAREA>
[ 6.927226] ---[ fin del rastro 0000000000000000 ]---
[ 6.927878] nvme nvme0: la cola 1 falló al copiar los datos de la solicitud 0x71
[ 6.928709] nvme nvme0: recepción fallida: -14
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.