Instituto Nacional de ciberseguridad. Sección Incibe
Instituto Nacional de Ciberseguridad. Sección INCIBE-CERT

Vulnerabilidad en kernel de Linux (CVE-2024-40925)

Gravedad CVSS v3.1:
MEDIA
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
12/07/2024
Última modificación:
17/09/2025

Descripción

En el kernel de Linux, se resolvió la siguiente vulnerabilidad: bloque: corrige el uso de request.queuelist en Flush Friedrich Weber informó un problema de falla del kernel y lo bisecó para el commit 81ada09cc25e ("blk-flush: reutilizar rq queuelist en la máquina de estado de descarga"). La causa principal es que usamos "list_move_tail(&rq->queuelist, pendiente)" en las secuencias PREFLUSH/POSTFLUSH. Pero rq->queuelist.next == xxx ya que salió del plug->cached_rq en __blk_mq_alloc_requests_batch(). No inicializamos su lista de colas solo para esta primera solicitud, aunque se inicializará la lista de colas de todas las solicitudes emergentes posteriores. Solucionelo cambiando para usar "list_add_tail(&rq->queuelist, pendiente)" para que no sea necesario inicializar rq->queuelist. Debería estar bien ya que rq no puede estar en ninguna lista cuando PREFLUSH o POSTFLUSH, en realidad no tiene movimiento. Tenga en cuenta que el commit 81ada09cc25e ("blk-flush: reutilizar rq queuelist en la máquina de estado de descarga") también tiene otro requisito de que ningún controlador toque rq->queuelist después de blk_mq_end_request() ya que lo reutilizaremos para agregar rq al post-flush lista pendiente en POSTFLUSH. Si esto no es cierto, tendremos que revertir ese commit en mi humilde opinión. Esta versión actualizada agrega "list_del_init(&rq->queuelist)" en la devolución de llamada de Flush rq ya que la capa dm puede enviar una solicitud de un formato extraño no válido (REQ_FSEQ_PREFLUSH | REQ_FSEQ_POSTFLUSH), lo que provoca el doble list_add si no se tiene este "list_del_init(&rq->queuelist) ". El extraño problema del formato no válido debería solucionarse en la capa dm.

Productos y versiones vulnerables

CPE Desde Hasta
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.6 (incluyendo) 6.6.35 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.7 (incluyendo) 6.9.6 (excluyendo)
cpe:2.3:o:linux:linux_kernel:6.10:rc1:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.10:rc2:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.10:rc3:*:*:*:*:*:*