CVE-2026-98949: drm/imagination: Fix reference and vm_bo handling in remap()
In the Linux kernel, the following vulnerability has been resolved:
drm/imagination: Fix reference and vmbo handling in remap()
When a map overlaps part of an existing mapping, pvrvmgpuvaremap() splits the mapping into prev/next parts covering what the request did not take, instead of creating something new. It gets two things wrong.
- A GEM reference is taken for each part but it's never needed and never dropped, so it leaks one reference per split (remap-next-in-2m in tests/imagination/pvrvmmap.c):
CRITICAL: 33558528 bytes of shmem still held after close
- The parts still belong to the original object being split, but pvrvmgpuvaremap() links them to ctx->gpuvmbo, the new object's vmbo:
prevva --obj--> BOA BOB <--obj-- vmbo (ctx->gpuvmbo) \link/ (mismatch: BOA != BOB)
drmgpuvalink() catches the mismatch:
WARNING: drivers/gpu/drm/drmgpuvm.c:2108 at drmgpuvalink+0x2ec/0x310 drmWARNON(obj != vmbo->obj) Call trace: drmgpuvalink pvrvmgpuvaremap drmgpuvmsmmap pvrvmmap pvrioctlvmmap
Link them to op->remap.unmap->va->vmbo instead.
The locking of the GPUVA lists of the other objects touched by a split is not addressed here; it is handled by switching the GPUVM to immediate mode.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Configuration
Switch the GPUVM to immediate mode to address the remap reference and vm_bo handling issue.
GPUVM mode = immediate