In the Linux kernel, the following vulnerability has been resolved:
drm/amdkfd: Fix double release compute pasid
If kfdprocessdeviceinitvm returns failure after vm is converted to compute vm and vm->pasid set to compute pasid, KFD will not take pdd->drm_file reference. As a result, drm close file handler maybe called to release the compute pasid before KFD process destroy worker to release the same pasid and set vm->pasid to zero, this generates below WARNING backtrace and NULL pointer access.
Add helper amdgpuamdkfdgpuvmsetvmpasid and call it at the last step of kfdprocessdeviceinitvm, to ensure vm pasid is the original pasid if acquiring vm failed or is the compute pasid with pdd->drmfile reference taken to avoid double release same pasid.
amdgpu: Failed to create process VM object idafree called for id=32770 which is not allocated. WARNING: CPU: 57 PID: 72542 at ../lib/idr.c:522 idafree+0x96/0x140 RIP: 0010:idafree+0x96/0x140 Call Trace: amdgpupasidfreedelayed+0xe1/0x2a0 [amdgpu] amdgpudriverpostclosekms+0x2d8/0x340 [amdgpu] drmfilefree.part.13+0x216/0x270 [drm] drmclosehelper.isra.14+0x60/0x70 [drm] drmrelease+0x6e/0xf0 [drm] fput+0xcc/0x280 fput+0xe/0x20 taskworkrun+0x96/0xc0 do_exit+0x3d0/0xc10
BUG: kernel NULL pointer dereference, address: 0000000000000000 RIP: 0010:idafree+0x76/0x140 Call Trace: amdgpupasidfreedelayed+0xe1/0x2a0 [amdgpu] amdgpudriverpostclosekms+0x2d8/0x340 [amdgpu] drmfilefree.part.13+0x216/0x270 [drm] drmclosehelper.isra.14+0x60/0x70 [drm] drmrelease+0x6e/0xf0 [drm] fput+0xcc/0x280 fput+0xe/0x20 taskworkrun+0x96/0xc0 do_exit+0x3d0/0xc10
{ "vanir_signatures": [ { "deprecated": false, "signature_type": "Line", "target": { "file": "drivers/gpu/drm/amd/amdkfd/kfd_process.c" }, "id": "CVE-2022-50303-648b896a", "digest": { "line_hashes": [ "64329985664839550682231671264602805211", "254384901505800298682571239709868733298", "202089849916636535701148163216545131062", "176433253604082296687967163302568578715", "289440089760729930121561829760789773018", "252391471065172346878717740916232209022", "38973794378122632382151534407302119173", "227714534662757150208439856541790997009", "257560424343669480806791839042194348690", "173004047968172186473062864983552087555", "36695527628398771808442862538939646592" ], "threshold": 0.9 }, "signature_version": "v1", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@89f0d766c9e3fdeafbed6f855d433c2768cde862" }, { "deprecated": false, "signature_type": "Line", "target": { "file": "drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h" }, "id": "CVE-2022-50303-6a5e0d29", "digest": { "line_hashes": [ "170282277825431849347502601703653286465", "123565875286371773129499043469988184575", "116952217630015462766304457386772096858", "286526509712424729362914574599823924282", "296998111021808162130679692281464552152" ], "threshold": 0.9 }, "signature_version": "v1", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@1a799c4c190ea9f0e81028e3eb3037ed0ab17ff5" }, { "deprecated": false, "signature_type": "Line", "target": { "file": "drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h" }, "id": "CVE-2022-50303-6d6fd0ba", "digest": { "line_hashes": [ "170282277825431849347502601703653286465", "123565875286371773129499043469988184575", "116952217630015462766304457386772096858", "286526509712424729362914574599823924282", "296998111021808162130679692281464552152" ], "threshold": 0.9 }, "signature_version": "v1", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@89f0d766c9e3fdeafbed6f855d433c2768cde862" }, { "deprecated": false, "signature_type": "Line", "target": { "file": "drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c" }, "id": "CVE-2022-50303-724ed85f", "digest": { "line_hashes": [ "189419980777962651772886409433258889604", "143763481985967216027924956454513533645", "145593323282999541895534718011968969199", "242273729838551754616818676949111104303", "129292070147208692447485444209487886080", "202789193881325097137347160242772759876", "184341461742788755147036749193568506105", "32070015188263455389378034631685383901", "126253164070811125592762807985845698789", "170709082789167097787753740014880735566", "124911123527378891649879149783712997867", "194324523451175754948154169515855785037", "181534153484494348133726111821858247169", "61516777659526015055012450362212361567", "194008855733931707446715630707164489565", "136237901956229543093412868910368731076", "250612695414251975896300550937217625113", "43051216624172849268245938905834078057", "150491746832462782936578202701576188423", "228791177854770512680921929042685925586", "140767898993971950102834052940050021711" ], "threshold": 0.9 }, "signature_version": "v1", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@89f0d766c9e3fdeafbed6f855d433c2768cde862" }, { "deprecated": false, "signature_type": "Function", "target": { "file": "drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c", "function": "amdgpu_amdkfd_gpuvm_acquire_process_vm" }, "id": "CVE-2022-50303-78ee1efb", "digest": { "length": 559.0, "function_hash": "201263925028533981245970585190318552799" }, "signature_version": "v1", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@89f0d766c9e3fdeafbed6f855d433c2768cde862" }, { "deprecated": false, "signature_type": "Function", "target": { "file": "drivers/gpu/drm/amd/amdkfd/kfd_process.c", "function": "kfd_process_device_init_vm" }, "id": "CVE-2022-50303-7c28b7af", "digest": { "length": 732.0, "function_hash": "8994493008839285885299319958344913401" }, "signature_version": "v1", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@89f0d766c9e3fdeafbed6f855d433c2768cde862" }, { "deprecated": false, "signature_type": "Line", "target": { "file": "drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c" }, "id": "CVE-2022-50303-7ce7850b", "digest": { "line_hashes": [ "189419980777962651772886409433258889604", "143763481985967216027924956454513533645", "145593323282999541895534718011968969199", "242273729838551754616818676949111104303", "129292070147208692447485444209487886080", "202789193881325097137347160242772759876", "184341461742788755147036749193568506105", "32070015188263455389378034631685383901", "126253164070811125592762807985845698789", "170709082789167097787753740014880735566", "124911123527378891649879149783712997867", "194324523451175754948154169515855785037", "181534153484494348133726111821858247169", "61516777659526015055012450362212361567", "194008855733931707446715630707164489565", "136237901956229543093412868910368731076", "250612695414251975896300550937217625113", "43051216624172849268245938905834078057", "150491746832462782936578202701576188423", "228791177854770512680921929042685925586", "140767898993971950102834052940050021711" ], "threshold": 0.9 }, "signature_version": "v1", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@1a799c4c190ea9f0e81028e3eb3037ed0ab17ff5" }, { "deprecated": false, "signature_type": "Function", "target": { "file": "drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c", "function": "amdgpu_amdkfd_gpuvm_acquire_process_vm" }, "id": "CVE-2022-50303-c4f57752", "digest": { "length": 559.0, "function_hash": "201263925028533981245970585190318552799" }, "signature_version": "v1", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@1a799c4c190ea9f0e81028e3eb3037ed0ab17ff5" }, { "deprecated": false, "signature_type": "Line", "target": { "file": "drivers/gpu/drm/amd/amdkfd/kfd_process.c" }, "id": "CVE-2022-50303-cb1ec2ee", "digest": { "line_hashes": [ "64329985664839550682231671264602805211", "254384901505800298682571239709868733298", "202089849916636535701148163216545131062", "176433253604082296687967163302568578715", "289440089760729930121561829760789773018", "252391471065172346878717740916232209022", "38973794378122632382151534407302119173", "227714534662757150208439856541790997009", "257560424343669480806791839042194348690", "173004047968172186473062864983552087555", "36695527628398771808442862538939646592" ], "threshold": 0.9 }, "signature_version": "v1", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@1a799c4c190ea9f0e81028e3eb3037ed0ab17ff5" }, { "deprecated": false, "signature_type": "Function", "target": { "file": "drivers/gpu/drm/amd/amdkfd/kfd_process.c", "function": "kfd_process_device_init_vm" }, "id": "CVE-2022-50303-d79e9176", "digest": { "length": 732.0, "function_hash": "8994493008839285885299319958344913401" }, "signature_version": "v1", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@1a799c4c190ea9f0e81028e3eb3037ed0ab17ff5" } ] }