CVE-2024-55916 in Linux
Resumen
por VulDB • 2026-06-30
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
Controladores: hv: util: Evitar acceder a un ringbuffer que aún no está inicializado
Si el demonio KVP (o VSS) se inicia antes de que el anillo del canal VMBus esté completamente inicializado, podemos provocar el pánico indicado a continuación:
hv_utils: Registrando controlador HyperV Utility Driver hv_vmbus: registrando controlador hv_utils ... BUG: kernel NULL pointer dereference, address: 0000000000000000 CPU: 44 UID: 0 PID: 2552 Comm: hv_kvp_daemon Tainted: G E 6.11.0-rc3+ #1 RIP: 0010:hv_pkt_iter_first+0x12/0xd0 Call Trace: ... vmbus_recvpacket hv_kvp_onchannelcallback vmbus_on_event tasklet_action_common tasklet_action handle_softirqs irq_exit_rcu sysvec_hyperv_stimer0 asm_sysvec_hyperv_stimer0 ... kvp_register_done hvt_op_read vfs_read ksys_read __x64_sys_read
Esto puede ocurrir porque la devolución de llamada (callback) del canal KVP/VSS puede invocarse incluso antes de que el canal esté completamente abierto: 1) tan pronto como hv_kvp_init() -> hvutil_transport_init() crea /dev/vmbus/hv_kvp, el demonio kvp puede abrir inmediatamente el archivo de dispositivo y registrarse en el controlador escribiendo un mensaje KVP_OP_REGISTER1 al archivo (lo cual es manejado por kvp_on_msg() ->kvp_handle_handshake()) y leyendo del archivo la respuesta del controlador, lo cual es gestionado por hvt_op_read(), que llama a hvt->on_read(), es decir, kvp_register_done().
2) el problema con kvp_register_done() es que puede provocar que se llame a la devolución de llamada del canal incluso antes de que este esté completamente abierto, y cuando la devolución de llamada comienza a ejecutarse, util_probe()-> vmbus_open() podría no haber inicializado aún el ringbuffer, por lo que la devolución de llamada puede provocar un pánico debido a una desreferenciación de puntero NULL.
Para reproducir el pánico de manera consistente, podemos añadir "ssleep(10)" para KVP en __vmbus_open(), justo antes del primer hv_ringbuffer_init(), y luego descargar y volver a cargar el controlador hv_utils, y ejecutar manualmente el demonio dentro de los 10 segundos.
Se corrige el pánico reordenando los pasos en util_probe() para que la entrada del dispositivo de caracteres utilizada por el demonio KVP o VSS no se cree hasta después de que vmbus_open() haya finalizado. Este reordenamiento evita que ocurra la condición de carrera (race condition).
If you want to get best quality of vulnerability data, you may have to visit VulDB.