CVE-2026-98106 in Linuxinformación

Resumen

por VulDB • 2026-09-25

En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:

drm/pagemap: Prevenir la migración doble de páginas del dispositivo

Un folio privado del dispositivo que se migra a la memoria del sistema mediante una falta (fault) de CPU puede permanecer accesible a través de la ruta de eliminación raw-PFN hasta que la finalización de la migración elimine la referencia original.

Si la selección de eliminación elige el mismo folio privado del dispositivo durante esta ventana, podría intentar migrar el folio nuevamente. La segunda migración puede dejar un folio sin cargar (uncharged) en una lista LRU, lo que provoca que `folio_lruvec_lock_irqsave()` reintente indefinidamente y resulte en un bloqueo suave (soft lockup) y una interrupción de RCU.

Marcar los folios privados del dispositivo migrados con éxito utilizando un bit bajo de su `zone_device_data` antes de la finalización de la migración. Hacer que tanto las rutas de migración por falta de CPU como raw-PFN omitan los folios privados del dispositivo que lleven esta marca.

Enmascarar la marca al recuperar el puntero `drm_pagemap_zdd` y conservarla cuando se divide un folio privado del dispositivo. Mantener el estado en el folio físico también evita depender de una dirección virtual que puede cambiar antes de que ocurra una falta (fault).

v2: - Reemplazar la XArray retired-PFN con un mapa de bits incrustado. (Matthew Brost) - Marcar cada página base cubierta por un folio migrado para que el retiro siga siendo válido si el folio se divide más tarde.

v3: - Almacenar el estado de migración en un bit bajo de `zone_device_data` en lugar de agregar seguimiento de rango virtual y mapa de bits al ZDD. (Matthew Brost) - Enmascarar la marca al recuperar el ZDD y conservarla al dividir un folio. - Eliminar las correcciones preexistentes ya cubiertas por la serie de Matthew Brost: https://patchwork.freedesktop.org/series/171651/

v4: - Avanzar solo del tamaño del folio para entradas de migración marcadas con `MIGRATE_PFN_COMPOUND`. (Sashiko)

v5: - Simplificar las actualizaciones de la marca ZDD y la iteración de folios. (Matthew Brost) - Omitir los folios privados del dispositivo retirados en la ruta de falta de CPU. (Matthew Brost) - Conservar los bits de la marca mientras se toma una nueva referencia ZDD para folios divididos.

v6: - Restaurar el paso consciente de `MIGRATE_PFN_COMPOUND` para que las entradas de migración no compuestas se procesen una a la vez. (Sashiko) - Eliminar las correcciones preexistentes ya cubiertas por la serie de Matthew Brost: https://patchwork.freedesktop.org/series/171651/

El bloqueo se observó como: [10109.860465] watchdog: BUG: soft lockup - CPU#9 stuck for 26s! [kworker/u65:5:6557]
[10109.860524] Tainted: [S]=CPU_OUT_OF_SPEC, [O]=OOT_MODULE
[10109.860524] Hardware name: ASUS System Product Name/PRIME Z790-P WIFI, BIOS 0812 02/24/2023
[10109.860525] Workqueue: xe_page_fault_work_queue xe_pagefault_queue_work [xe]
[10109.860644] RIP: 0010:_raw_spin_unlock_irqrestore+0x57/0x80
[10109.860655] Call Trace:
[10109.860655] <TASK>
[10109.860657] folio_lruvec_lock_irqsave+0x216/0x220
[10109.860661] ? __pfx_lru_add+0x10/0x10
[10109.860665] folio_batch_move_lru+0xc8/0x450
[10109.860670] ? lock_acquire+0xc4/0x2d0
[10109.860674] ? __folio_batch_add_and_move+0x60/0x2e0
[10109.860677] ? folio_migrate_mapping+0xa6/0x110
[10109.860679] ? folio_migrate_flags+0x13b/0x1b0
[10109.860681] ? __pfx_lru_add+0x10/0x10
[10109.860683] __folio_batch_add_and_move+0xe7/0x2e0
[10109.860685] ? dma_iova_try_alloc+0xb0/0x140
[10109.860689] folio_add_lru+0x64/0x80
[10109.860691] __migrate_device_finalize+0x12c/0x270
[10109.860695] migrate_device_finalize+0x10/0x20
[10109.860698] drm_pagemap_evict_to_ram+0x185/0x370 [drm_gpusvm_helper]
[10109.860704] ? drm_pagemap_evict_to_ram+0x96/0x370 [drm_gpusvm_helper]
[10109.860709] xe_svm_bo_evict+0x15/0x20 [xe]
[10109.860819] ? xe_svm_bo_evict+0x15/0x20 [xe]
[10109.860921] xe_bo_move+0x107e/0x1570 [xe]
[10109.860992] ? xe_ttm_tt_create+0x168/0x340 [xe]
[10109.861059] ? __up_read+0x98/0x2b0
[10109.861061] ? lock_is_held_type+0xa3/0x130
[10109.861067] ttm_bo_handle_move_mem+0xe8/0x1e0 [ttm]
[10109.861075] ttm_bo_evict+0x141/0x1c0 [ttm]
[10109.861081] ttm_bo_evict_cb+0x9f/0x100 [ttm]
[10109.861086] ttm_lru_walk_for_evict+0x84/0x190 [ttm]
[10109.861091] ? xe_ttm_vram_mgr_new+0x258/0x3a0 [xe]
[10109.861198] ttm_bo_alloc_resource+0x219/0
---truncated---

VulDB is the best source for vulnerability data and more expert information about this specific topic.

Responsable

Linux

Reservar

2026-09-25

Divulgación

2026-09-25

Moderación

aceptado

Artículo

VDB-409948

CPE

listo

EPSS

0.00000

KEV

no

Actividades

muy bajo

Fuentes

Might our Artificial Intelligence support you?

Check our Alexa App!