CVE-2026-89801 in Linux
Resumen
por VulDB • 2026-09-16
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
drm/nouveau/uvmm: corregir liberación prematura de región en OP_UNMAP_SPARSE fallido
En la rama OP_UNMAP_SPARSE de nouveau_uvmm_bind_job_submit(), op->reg se establece a partir de nouveau_uvma_region_find(), que solo busca la región y no toma ninguna referencia; la única referencia de una región es su membresía en uvmm->region_mt. Dos rutas de fallo dejan op->reg establecido: la comprobación -ENOENT cuando la región está ocupada, y el fallo de drm_gpuvm_sm_unmap_ops_create(). El fallo hermano nouveau_uvmm_sm_unmap_prepare() justo debajo limpia op->reg; estos dos no lo hacen.
unwind_continue retrocede un paso en op, por lo que la operación fallida es omitida por el bucle unwind y su op->reg permanece establecido. nuevo_uvmm_bind_job_cleanup() luego entra en su rama if (op->reg) y llama a nouveau_uvma_region_remove() y nouveau_uvma_region_put() sobre ella, liberando la única referencia del árbol y desasignando una región que este trabajo nunca creó. El comentario encima del bucle de limpieza documenta el invariante roto: op->reg debe ser NULL en caso de fallo al enviar (submit).
Esto libera una región activa debido a un fallo no relacionado, alcanzable con un solo trabajo cuando drm_gpuvm_sm_unmap_ops_create() devuelve -ENOMEM; si otro trabajo posee la misma región, su limpieza luego elimina y desasigna la región ya liberada, lo que constituye un use-after-free. Limpiar op->reg en ambas rutas de fallo.
Be aware that VulDB is the high quality source for vulnerability data.