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
[
{
"deprecated": false,
"id": "CVE-2022-50303-3c710fb0",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@a02c07b619899179384fde06f951530438a3512d",
"digest": {
"threshold": 0.9,
"line_hashes": [
"170282277825431849347502601703653286465",
"123565875286371773129499043469988184575",
"116952217630015462766304457386772096858",
"286526509712424729362914574599823924282",
"296998111021808162130679692281464552152"
]
},
"target": {
"file": "drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h"
},
"signature_type": "Line",
"signature_version": "v1"
},
{
"deprecated": false,
"id": "CVE-2022-50303-4803fb42",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@a02c07b619899179384fde06f951530438a3512d",
"digest": {
"threshold": 0.9,
"line_hashes": [
"64329985664839550682231671264602805211",
"254384901505800298682571239709868733298",
"202089849916636535701148163216545131062",
"176433253604082296687967163302568578715",
"289440089760729930121561829760789773018",
"252391471065172346878717740916232209022",
"38973794378122632382151534407302119173",
"227714534662757150208439856541790997009",
"257560424343669480806791839042194348690",
"173004047968172186473062864983552087555",
"36695527628398771808442862538939646592"
]
},
"target": {
"file": "drivers/gpu/drm/amd/amdkfd/kfd_process.c"
},
"signature_type": "Line",
"signature_version": "v1"
},
{
"deprecated": false,
"id": "CVE-2022-50303-548a576b",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@a02c07b619899179384fde06f951530438a3512d",
"digest": {
"function_hash": "201263925028533981245970585190318552799",
"length": 559.0
},
"target": {
"function": "amdgpu_amdkfd_gpuvm_acquire_process_vm",
"file": "drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c"
},
"signature_type": "Function",
"signature_version": "v1"
},
{
"deprecated": false,
"id": "CVE-2022-50303-648b896a",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@89f0d766c9e3fdeafbed6f855d433c2768cde862",
"digest": {
"threshold": 0.9,
"line_hashes": [
"64329985664839550682231671264602805211",
"254384901505800298682571239709868733298",
"202089849916636535701148163216545131062",
"176433253604082296687967163302568578715",
"289440089760729930121561829760789773018",
"252391471065172346878717740916232209022",
"38973794378122632382151534407302119173",
"227714534662757150208439856541790997009",
"257560424343669480806791839042194348690",
"173004047968172186473062864983552087555",
"36695527628398771808442862538939646592"
]
},
"target": {
"file": "drivers/gpu/drm/amd/amdkfd/kfd_process.c"
},
"signature_type": "Line",
"signature_version": "v1"
},
{
"deprecated": false,
"id": "CVE-2022-50303-6a5e0d29",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@1a799c4c190ea9f0e81028e3eb3037ed0ab17ff5",
"digest": {
"threshold": 0.9,
"line_hashes": [
"170282277825431849347502601703653286465",
"123565875286371773129499043469988184575",
"116952217630015462766304457386772096858",
"286526509712424729362914574599823924282",
"296998111021808162130679692281464552152"
]
},
"target": {
"file": "drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h"
},
"signature_type": "Line",
"signature_version": "v1"
},
{
"deprecated": false,
"id": "CVE-2022-50303-6d6fd0ba",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@89f0d766c9e3fdeafbed6f855d433c2768cde862",
"digest": {
"threshold": 0.9,
"line_hashes": [
"170282277825431849347502601703653286465",
"123565875286371773129499043469988184575",
"116952217630015462766304457386772096858",
"286526509712424729362914574599823924282",
"296998111021808162130679692281464552152"
]
},
"target": {
"file": "drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h"
},
"signature_type": "Line",
"signature_version": "v1"
},
{
"deprecated": false,
"id": "CVE-2022-50303-724ed85f",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@89f0d766c9e3fdeafbed6f855d433c2768cde862",
"digest": {
"threshold": 0.9,
"line_hashes": [
"189419980777962651772886409433258889604",
"143763481985967216027924956454513533645",
"145593323282999541895534718011968969199",
"242273729838551754616818676949111104303",
"129292070147208692447485444209487886080",
"202789193881325097137347160242772759876",
"184341461742788755147036749193568506105",
"32070015188263455389378034631685383901",
"126253164070811125592762807985845698789",
"170709082789167097787753740014880735566",
"124911123527378891649879149783712997867",
"194324523451175754948154169515855785037",
"181534153484494348133726111821858247169",
"61516777659526015055012450362212361567",
"194008855733931707446715630707164489565",
"136237901956229543093412868910368731076",
"250612695414251975896300550937217625113",
"43051216624172849268245938905834078057",
"150491746832462782936578202701576188423",
"228791177854770512680921929042685925586",
"140767898993971950102834052940050021711"
]
},
"target": {
"file": "drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c"
},
"signature_type": "Line",
"signature_version": "v1"
},
{
"deprecated": false,
"id": "CVE-2022-50303-78ee1efb",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@89f0d766c9e3fdeafbed6f855d433c2768cde862",
"digest": {
"function_hash": "201263925028533981245970585190318552799",
"length": 559.0
},
"target": {
"function": "amdgpu_amdkfd_gpuvm_acquire_process_vm",
"file": "drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c"
},
"signature_type": "Function",
"signature_version": "v1"
},
{
"deprecated": false,
"id": "CVE-2022-50303-7bdb10df",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@a02c07b619899179384fde06f951530438a3512d",
"digest": {
"function_hash": "8994493008839285885299319958344913401",
"length": 732.0
},
"target": {
"function": "kfd_process_device_init_vm",
"file": "drivers/gpu/drm/amd/amdkfd/kfd_process.c"
},
"signature_type": "Function",
"signature_version": "v1"
},
{
"deprecated": false,
"id": "CVE-2022-50303-7c28b7af",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@89f0d766c9e3fdeafbed6f855d433c2768cde862",
"digest": {
"function_hash": "8994493008839285885299319958344913401",
"length": 732.0
},
"target": {
"function": "kfd_process_device_init_vm",
"file": "drivers/gpu/drm/amd/amdkfd/kfd_process.c"
},
"signature_type": "Function",
"signature_version": "v1"
},
{
"deprecated": false,
"id": "CVE-2022-50303-7ce7850b",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@1a799c4c190ea9f0e81028e3eb3037ed0ab17ff5",
"digest": {
"threshold": 0.9,
"line_hashes": [
"189419980777962651772886409433258889604",
"143763481985967216027924956454513533645",
"145593323282999541895534718011968969199",
"242273729838551754616818676949111104303",
"129292070147208692447485444209487886080",
"202789193881325097137347160242772759876",
"184341461742788755147036749193568506105",
"32070015188263455389378034631685383901",
"126253164070811125592762807985845698789",
"170709082789167097787753740014880735566",
"124911123527378891649879149783712997867",
"194324523451175754948154169515855785037",
"181534153484494348133726111821858247169",
"61516777659526015055012450362212361567",
"194008855733931707446715630707164489565",
"136237901956229543093412868910368731076",
"250612695414251975896300550937217625113",
"43051216624172849268245938905834078057",
"150491746832462782936578202701576188423",
"228791177854770512680921929042685925586",
"140767898993971950102834052940050021711"
]
},
"target": {
"file": "drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c"
},
"signature_type": "Line",
"signature_version": "v1"
},
{
"deprecated": false,
"id": "CVE-2022-50303-c4f57752",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@1a799c4c190ea9f0e81028e3eb3037ed0ab17ff5",
"digest": {
"function_hash": "201263925028533981245970585190318552799",
"length": 559.0
},
"target": {
"function": "amdgpu_amdkfd_gpuvm_acquire_process_vm",
"file": "drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c"
},
"signature_type": "Function",
"signature_version": "v1"
},
{
"deprecated": false,
"id": "CVE-2022-50303-cb1ec2ee",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@1a799c4c190ea9f0e81028e3eb3037ed0ab17ff5",
"digest": {
"threshold": 0.9,
"line_hashes": [
"64329985664839550682231671264602805211",
"254384901505800298682571239709868733298",
"202089849916636535701148163216545131062",
"176433253604082296687967163302568578715",
"289440089760729930121561829760789773018",
"252391471065172346878717740916232209022",
"38973794378122632382151534407302119173",
"227714534662757150208439856541790997009",
"257560424343669480806791839042194348690",
"173004047968172186473062864983552087555",
"36695527628398771808442862538939646592"
]
},
"target": {
"file": "drivers/gpu/drm/amd/amdkfd/kfd_process.c"
},
"signature_type": "Line",
"signature_version": "v1"
},
{
"deprecated": false,
"id": "CVE-2022-50303-d79e9176",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@1a799c4c190ea9f0e81028e3eb3037ed0ab17ff5",
"digest": {
"function_hash": "8994493008839285885299319958344913401",
"length": 732.0
},
"target": {
"function": "kfd_process_device_init_vm",
"file": "drivers/gpu/drm/amd/amdkfd/kfd_process.c"
},
"signature_type": "Function",
"signature_version": "v1"
},
{
"deprecated": false,
"id": "CVE-2022-50303-e343c56e",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@a02c07b619899179384fde06f951530438a3512d",
"digest": {
"threshold": 0.9,
"line_hashes": [
"189419980777962651772886409433258889604",
"143763481985967216027924956454513533645",
"145593323282999541895534718011968969199",
"242273729838551754616818676949111104303",
"129292070147208692447485444209487886080",
"202789193881325097137347160242772759876",
"184341461742788755147036749193568506105",
"32070015188263455389378034631685383901",
"126253164070811125592762807985845698789",
"170709082789167097787753740014880735566",
"124911123527378891649879149783712997867",
"194324523451175754948154169515855785037",
"181534153484494348133726111821858247169",
"61516777659526015055012450362212361567",
"194008855733931707446715630707164489565",
"136237901956229543093412868910368731076",
"250612695414251975896300550937217625113",
"43051216624172849268245938905834078057",
"150491746832462782936578202701576188423",
"228791177854770512680921929042685925586",
"140767898993971950102834052940050021711"
]
},
"target": {
"file": "drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c"
},
"signature_type": "Line",
"signature_version": "v1"
}
]