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.
Impacto
Puntuación base 3.x
5.50
Gravedad 3.x
MEDIA
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:*:*:*:*:*:* |
Para consultar la lista completa de nombres de CPE con productos y versiones, ver esta página
Referencias a soluciones, herramientas e información
- https://git.kernel.org/stable/c/87907bd69721a8506618a954d41a1de3040e88aa
- https://git.kernel.org/stable/c/d0321c812d89c5910d8da8e4b10c891c6b96ff70
- https://git.kernel.org/stable/c/fe1e395563ccb051e9dbd8fa99859f5caaad2e71
- https://git.kernel.org/stable/c/87907bd69721a8506618a954d41a1de3040e88aa
- https://git.kernel.org/stable/c/d0321c812d89c5910d8da8e4b10c891c6b96ff70
- https://git.kernel.org/stable/c/fe1e395563ccb051e9dbd8fa99859f5caaad2e71