HIGH Introduced in 6.19
nouveau DmemUnmap Leak
CVE-2026-89804
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
KernelScan AI5.5MEDIUM
01Description
In the Linux kernel, the following vulnerability has been resolved: drm/nouveau/dmem: fix mismatched DMA unmap size for large folios Device-private THP migration maps migration buffers with page_size() and records that length in dma_info->size. For a compound folio page_size() is PAGE_SIZE << order, but two teardown sites still pass a literal PAGE_SIZE to dma_unmap_page(): - nouveau_dmem_migrate_to_ram() on the success path, and - nouveau_dmem_migrate_copy_one() on the copy-error path. For an order > 0 folio this unmaps less than was mapped, leaking the remainder of the IOMMU/IOVA mapping. The other unmap sites, in nouveau_dmem_migrate_chunk() and nouveau_dmem_evict_chunk(), already use the saved size; use it here too.
02KernelScan AI Analysis
Risk summary
A local user with access to a Nouveau GPU device can trigger device-private THP migration paths that partially unmap DMA mappings, leaking IOMMU/IOVA resources. Repeated triggering can exhaust IOMMU resources and cause denial of service. The fix corrects the unmap size to match the original mapping size.
Vulnerability analysis
When the Nouveau driver migrates device-private transparent huge pages, it maps DMA buffers using the full compound page size but, on two teardown paths, unmaps only a single base page size. This leaves the remainder of the IOMMU/IOVA mapping unreleased, leaking DMA mapping entries each time migration of a large folio completes or fails. The fix changes both unmap calls to use the recorded mapping size, matching what was originally mapped. The vulnerable code is reachable from a local process that can access a Nouveau GPU device and trigger device-private memory migration; no special capabilities beyond device access are required.
Lifecycle
03Fix Versions
| Branch | Introduced | Fixed in | Patch commit |
|---|---|---|---|
| 7.2 | 6.19 | 7.2.5 | 4deb29b9d33b |
| mainline | 6.19 | 7.3 | caa1bc2a0a6c |