Linux kernel amdkfd: double-unpin of doorbell/MMIO buffer objects corrupts TTM pin accounting
Impact
amdgpu_amdkfd_gpuvm_free_memory_of_gpu() unpinned DOORBELL and MMIO remap buffer objects before it checked whether the BO was still mapped to the GPU. If the BO is still mapped the call returns -EBUSY and the BO stays alive - but already unpinned - and gets unpinned a second time when the process is torn down, producing a ttm_bo_unpin() refcount underflow. The practical effect on a ROCm node is corrupted pin accounting for a doorbell page that is still GPU-mapped, and a kernel WARN in the kfd_process_wq teardown worker; on a fleet built with panic_on_warn that WARN takes the whole node down and kills every other job on it. Any local user holding /dev/kfd can drive the path with ordinary allocate/map/free calls, so on a multi-tenant MI-series box one tenant reaches it without touching another tenant's API.
Who can reach it
Local user with access to /dev/kfd - that is, any tenant with a ROCm GPU pod or shell on the node. No authentication beyond device access, no root needed.
What to do
Update to a kernel carrying the fix (the change is in the in-tree amdgpu/amdkfd module) and reboot each GPU node, or at minimum stop all ROCm workloads and reload amdgpu, which is a drain in practice because the module cannot be unloaded with jobs holding the device. The record lists stable commits only and names no fixed release - check your distro and ROCm kernel-module errata for the shipping version.
References
Related entries
- Linux kernel vmwgfx: unbounded MOB cursor dimensions lead to NULL-pointer oops in the guestCVE-2026-80701 · Linux kernel drm/vmwgfx (MOB-backed cursor size validation)Unscored
- Linux kernel amdkfd: any /dev/kfd holder can disable another process's GPU debug sessionCVE-2026-80703 · Linux kernel amdkfd (KFD_IOC_DBG_TRAP_DISABLE ioctl)Unscored
- Linux kernel amdkfd: unvalidated CRIU-restored IDs reach idr_alloc and can trigger a kernel WARNCVE-2026-80870 · Linux kernel amdkfd CRIU restore (kfd_criu_restore_event, criu_restore_memory_of_gpu)Unscored
- Linux kernel drm/xe: OA config ioctl leaks sync entries and fence references when the config emit failsCVE-2026-80903 · Linux kernel drm/xe OA (observation architecture stream config ioctl)Unscored
- Linux drm/amdgpu: UVD H.264 minimum dpb size derived from level rather than the decode messageCVE-2026-80907 · Linux kernel drm/amdgpu (UVD H.264 decode picture buffer size check)Unscored
- Linux kernel amdgpu: unvalidated UVD decode message fields overflow the DPB size calculationCVE-2026-80908 · Linux kernel amdgpu UVD (decode message field validation)Unscored
This entry is curated: imported from vendor advisories with machine assistance, not yet individually verified. Confirm against your vendor's advisory before acting, and report anything wrong.