On 2/12/2026 4:13 PM, Alex Deucher wrote:
On Thu, Feb 12, 2026 at 2:32 PM Chen, Xiaogang<[email protected]> wrote:
[AMD Official Use Only - AMD Internal Distribution Only]


Let parent/child process share same vm will cause multiple issues. There is no 
use case or need for that. It should be prevented at uses space, not work 
around at this specific place in driver.

I agree that userspace shouldn't to stupid things, but if it does, the
kernel needs to gracefully handle it.

Using same vm for multiple processes will cause multiple issues. Not only race on vm->process_info. This hacking does not reveal useful security issue. If parent process wants share its vm to another process kernel cannot do anything. This sharing just makes driver not work. People can see multiple errors from this sharing. If driver addresses every raised issue duo to vm sharing it would be endless.

Xiaogang


Alex


Regards

Xiaogang



From: amd-gfx<[email protected]> On Behalf Of 
Kasiviswanathan, Harish
Sent: Thursday, February 12, 2026 12:31 PM
To: Liu, Alysa<[email protected]>;[email protected]
Cc: Deucher, Alexander<[email protected]>
Subject: Re: [PATCH] drm/amdgpu: Fix use-after-free race in VM acquire



[AMD Official Use Only - AMD Internal Distribution Only]



Reviewed-by: Harish Kasiviswanathan<[email protected]>

________________________________

From: Liu, Alysa<[email protected]>
Sent: Thursday, February 5, 2026 11:28 AM
To:[email protected] <[email protected]>
Cc: Deucher, Alexander<[email protected]>; Kasiviswanathan, 
Harish<[email protected]>; Liu, Alysa<[email protected]>
Subject: [PATCH] drm/amdgpu: Fix use-after-free race in VM acquire



Replace non-atomic vm->process_info assignment with cmpxchg()
to prevent race when parent/child processes sharing a drm_file
both try to acquire the same VM after fork().

Signed-off-by:[email protected] <[email protected]>
---
  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 6 +++++-
  1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
index 00ea69baa126..f7b2358a0303 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
@@ -1432,7 +1432,10 @@ static int init_kfd_vm(struct amdgpu_vm *vm, void 
**process_info,
                  *process_info = info;
          }

-       vm->process_info = *process_info;
+       if (cmpxchg(&vm->process_info, NULL, *process_info) != NULL) {
+               ret = -EINVAL;
+               goto already_acquired;
+       }

          /* Validate page directory and attach eviction fence */
          ret = amdgpu_bo_reserve(vm->root.bo, true);
@@ -1472,6 +1475,7 @@ static int init_kfd_vm(struct amdgpu_vm *vm, void 
**process_info,
          amdgpu_bo_unreserve(vm->root.bo);
  reserve_pd_fail:
          vm->process_info = NULL;
+already_acquired:
          if (info) {
                  dma_fence_put(&info->eviction_fence->base);
                  *process_info = NULL;
--
2.34.1

Reply via email to