CVE-2026-89805 in Linuxinformación

Resumen

por VulDB • 2026-09-16

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

drm/pagemap: Corregir la ruta alternativa (fallback) para la asignación de folios y corregir un use-after-put.

La función drm_pagemap_migrate_populate_ram_pfn() presentaba dos problemas al poblar los PFNs de RAM con folios de orden superior:

1. Las llamadas a vma_alloc_folio()/folio_alloc() para órdenes superiores no pasaban __GFP_NOWARN, por lo que un fallo en la asignación de THP bajo presión de memoria saturaría el registro del kernel (kernel log), y no existía una ruta alternativa a pesar de haber un comentario TODO indicando que era necesaria. Se añade __GFP_NOWARN a la asignación para órdenes superiores y, en caso de fallo, se recurre a asignaciones de orden 0 para todo el rango originalmente cubierto por la asignación fallida de orden superior, dejando MIGRATE_PFN_COMPOUND sin establecer (unset) para esos PFNs.

2. En la ruta de error free_pages, order se calculaba mediante folio_order(page_folio(page)) *después* de que put_page(page) ya hubiera liberado la referencia, lo que resultaba en un use-after-free/put cuando esa era la última referencia sobre la página. Se calcula el orden antes de liberar la página.

Introducir la ruta alternativa (fallback) descrita en 1 también requiere construir de manera diferente el array de páginas fuente pasado a ->copy_to_ram(). Ambos llamadores solo poblaban la entrada en la cabeza de cada folio fuente, confiando en que la devolución de llamada (callback) de copia derivara el resto del folio a partir del orden registrado en drm_pagemap_addr coincidente. Una vez que el destino se ha degradado a folios de orden 0, las entradas de drm_pagemap_addr son por página; por lo tanto, se necesita una página fuente para cada una de ellas; dejarlas como NULL hace que la devolución de llamada de copia se detenga después de la primera página y el resto del rango nunca se copie.

El folio fuente solo se divide más adelante mediante migrate_vma_pages() / migrate_device_pages(), por lo que su orden no puede usarse para detectar la degradación; en su lugar, se prueba si el destino tiene establecido MIGRATE_PFN_COMPOUND. Se extrae la población del array a drm_pagemap_migrate_populate_src_pages() y se utiliza tanto desde drm_pagemap_evict_to_ram() como desde __drm_pagemap_migrate_to_ram().

If you want to get best quality of vulnerability data, you may have to visit VulDB.

Responsable

Linux

Reservar

2026-09-11

Divulgación

2026-09-16

Moderación

aceptado

Artículo

VDB-405623

CPE

listo

EPSS

0.00000

KEV

no

Actividades

muy bajo

Fuentes

Want to stay up to date on a daily basis?

Enable the mail alert feature now!