Vulnerabilidad en kernel de Linux (CVE-2025-38209)
Gravedad:
Pendiente de análisis
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
04/07/2025
Última modificación:
08/07/2025
Descripción
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: nvme-tcp: eliminar el conjunto de etiquetas cuando falla la configuración de la segunda cola de administración. El commit 104d0e2f6222 ("nvme-fabrics: restablecer la conexión de administración para una concatenación segura") modificó nvme_tcp_setup_ctrl() para llamar a nvme_tcp_configure_admin_queue() dos veces. La primera llamada prepara la negociación DH-CHAP y la segunda es necesaria para la concatenación segura. Sin embargo, este cambio activó el error "slab-use-after-free" en blk_mq_queue_tag_busy_iter()". Este error se puede recrear repitiendo el caso de prueba blktests nvme/063 varias veces [1]. Cuando ocurre el ERROR, nvme_tcp_create_ctrl() falla en la siguiente cadena de llamadas: nvme_tcp_create_ctrl() nvme_tcp_alloc_ctrl() new=true ... Asignar nvme_tcp_ctrl y admin_tag_set nvme_tcp_setup_ctrl() new=true nvme_tcp_configure_admin_queue() new=true ... Correcto nvme_alloc_admin_tag_set() ... Asignar el conjunto de etiquetas para admin_tag_set nvme_stop_keep_alive() nvme_tcp_teardown_admin_queue() remove=false nvme_tcp_configure_admin_queue() new=false nvme_tcp_alloc_admin_queue() ... Falla, pero no se llama nvme_remove_admin_tag_set() nvme_uninit_ctrl() nvme_put_ctrl() ... Libera nvme_tcp_ctrl y admin_tag_set La primera llamada de nvme_tcp_configure_admin_queue() tiene éxito con el argumento new=true. La segunda llamada falla con el argumento new=false. Esta segunda llamada no llama a nvme_remove_admin_tag_set() en caso de error, debido al argumento new=false. Entonces, el conjunto de etiquetas admin no se elimina. Sin embargo, nvme_tcp_create_ctrl() supone que nvme_tcp_setup_ctrl() llamaría a nvme_remove_admin_tag_set(). Luego libera la estructura nvme_tcp_ctrl que tiene el campo admin_tag_set. Posteriormente, el controlador de tiempo de espera accede al campo admin_tag_set y provoca el error "BUG KASAN slab-use-after-free". Para mantener la etiqueta admin activa, llame a nvme_remove_admin_tag_set() cuando falle la segunda llamada a nvme_tcp_configure_admin_queue(). No regrese de nvme_tcp_setup_ctrl() en caso de error. En su lugar, vaya a la etiqueta "destroy_admin" para llamar a nvme_tcp_teardown_admin_queue(), que a su vez llama a nvme_remove_admin_tag_set().