Linux: drm/xe/vm: nuke PTs only after unlinking contested VMAs
What fixes it
- 70fddc065ac80845ffd33095b3635d59883cf7e6LinuxCVE List
- 24a22fb3c731474b68e986af6804db450fb88617LinuxCVE List
A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.
Description
In the Linux kernel, the following vulnerability has been resolved:
drm/xe/vm: nuke PTs only after unlinking contested VMAs
In xe_vm_close_and_put(), external-BO VMAs are queued on the contested list for deferred destruction via xe_vma_destroy_unlocked(). However, xe_vm_pt_destroy() was previously invoked before processing contested VMAs, destroying vm->pt_root while those VMAs were still linked to their respective buffer objects (vm_bo->list.gpuva).
If a concurrent thread evicts one of those shared buffer objects, xe_bo_trigger_rebind() holding only bo->resv walks the BO's VMAs and, in fault mode, calls xe_vm_invalidate_vma() -> xe_pt_zap_ptes(). Because vm->pt_root[tile->id] is already NULL, dereferencing pt->level causes a NULL ptr deref.
Fix this by deferring xe_vm_free_scratch() and xe_vm_pt_destroy() until after all contested VMAs have been unlinked and destroyed.
User is reporting hitting a NULL ptr deref in xe_pt_zap_ptes(), which could be explained by this race.
(cherry picked from commit c2863648959489767f08892fd6e90577d2ea0b6a)
Text from CVE List
Affected versions 10
- Linuxaffected: b06d47be7c83165d3b3e45e1d5f9520b79c7f5cc before 70fddc065ac80845ffd33095b3635d59883cf7e6CVE List
- Linuxaffected: b06d47be7c83165d3b3e45e1d5f9520b79c7f5cc before ba678c2b02e0d36b53deb5a6d5e5ea044d36def7CVE List
- Linuxaffected: b06d47be7c83165d3b3e45e1d5f9520b79c7f5cc before bddaa5e4094c134452c29e20a26c4718827e4cb1CVE List
- Linuxaffected: b06d47be7c83165d3b3e45e1d5f9520b79c7f5cc before 24a22fb3c731474b68e986af6804db450fb88617CVE List
- Linuxaffected: 6.8CVE List
- Linuxunaffected: all versions before 6.8CVE List
- Linuxunaffected: 6.12.112 through 6.12.*CVE List
- Linuxunaffected: 6.18.55 through 6.18.*CVE List
- Linuxunaffected: 7.2.9 through 7.2.*CVE List
- Linuxunaffected: 7.3CVE List
References 4
- git.kernel.org/stable/c/70fddc065ac80845ffd33095b3635d59883cf7e6Referencevia CVE List
- git.kernel.org/stable/c/ba678c2b02e0d36b53deb5a6d5e5ea044d36def7Referencevia CVE List
- git.kernel.org/stable/c/bddaa5e4094c134452c29e20a26c4718827e4cb1Referencevia CVE List
- git.kernel.org/stable/c/24a22fb3c731474b68e986af6804db450fb88617Referencevia CVE List