Linux: drm/amdgpu: free the userptr ranges when a CS fails after parser_bos
What fixes it
- 6ac46ae5ac561d4fc7d4246ad83d71bed0d9af9aLinuxCVE List
- 2d9d24385201f476a2f754495b71bbac5ba6ea7bLinuxCVE List
- 1b4da805a0ba354a549ce07459c871c17dd94fe0LinuxCVE 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/amdgpu: free the userptr ranges when a CS fails after parser_bos
amdgpu_cs_parser_bos() allocates an HMM range for every userptr entry of the BO list and looks up the user pages. Those ranges are only freed when amdgpu_cs_parser_bos() itself fails or when amdgpu_cs_submit() checks them under the notifier lock. If amdgpu_cs_patch_jobs(), amdgpu_cs_vm_handling(), amdgpu_cs_sync_rings() or the early part of amdgpu_cs_submit() fails, nothing frees them: neither amdgpu_cs_parser_fini() nor amdgpu_bo_list_free() touch e->range.
Each such CS then leaks the range, its hmm_pfns array (8 bytes per page of the userptr BO) and the BO reference the range holds. An IB on a ring that patches the CS in place (e.g. VCN) with an unmapped va_start fails in amdgpu_cs_patch_ibs() and takes this path.
Free the ranges on those error paths. Ranges amdgpu_cs_submit() already dropped are NULL, so freeing them again is a no-op.
(cherry picked from commit c52a9542ed7cfd527feb938bd0accada2ac8d267)
Text from CVE List
Affected versions 8
- Linuxaffected: fec8fdb54e8f74d88951c9f998f47bf4f2031fe0 before 6ac46ae5ac561d4fc7d4246ad83d71bed0d9af9aCVE List
- Linuxaffected: fec8fdb54e8f74d88951c9f998f47bf4f2031fe0 before 2d9d24385201f476a2f754495b71bbac5ba6ea7bCVE List
- Linuxaffected: fec8fdb54e8f74d88951c9f998f47bf4f2031fe0 before 1b4da805a0ba354a549ce07459c871c17dd94fe0CVE List
- Linuxaffected: 6.2CVE List
- Linuxunaffected: all versions before 6.2CVE List
- Linuxunaffected: 6.18.59 through 6.18.*CVE List
- Linuxunaffected: 7.2.13 through 7.2.*CVE List
- Linuxunaffected: 7.3CVE List