[PATCH v6 09/11] drm/amdgpu: validate the shared bo for tracking usage size

Prike Liang Prike.Liang at amd.com
Fri Jul 11 09:39:28 UTC 2025


It requires validating the shared BO before updating its usage
size; otherwise, there is a potential NULL pointer error when the
BO released improperly.

Signed-off-by: Prike Liang <Prike.Liang at amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 25 +++++++++++++++++++++----
 1 file changed, 21 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
index f042372d9f2e..a574effdd3ec 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
@@ -321,12 +321,26 @@ static void amdgpu_vm_bo_reset_state_machine(struct amdgpu_vm *vm)
  */
 static void amdgpu_vm_update_shared(struct amdgpu_vm_bo_base *base)
 {
-	struct amdgpu_vm *vm = base->vm;
-	struct amdgpu_bo *bo = base->bo;
-	uint64_t size = amdgpu_bo_size(bo);
-	uint32_t bo_memtype = amdgpu_bo_mem_stats_placement(bo);
+	struct amdgpu_vm *vm;
+	struct amdgpu_bo *bo;
+	uint64_t size = 0;
+	uint32_t bo_memtype = TTM_PL_SYSTEM;
 	bool shared;
 
+	if (likely(base)) {
+		vm = base->vm;
+		bo = base->bo;
+	} else {
+		return;
+	}
+
+	if (likely(bo)) {
+		size = amdgpu_bo_size(bo);
+		bo_memtype = amdgpu_bo_mem_stats_placement(bo);
+	} else {
+		return;
+	}
+
 	spin_lock(&vm->status_lock);
 	shared = drm_gem_object_is_shared_for_memory_stats(&bo->tbo.base);
 	if (base->shared != shared) {
@@ -353,6 +367,9 @@ void amdgpu_vm_bo_update_shared(struct amdgpu_bo *bo)
 {
 	struct amdgpu_vm_bo_base *base;
 
+	if (unlikely(!bo))
+		return;
+
 	for (base = bo->vm_bo; base; base = base->next)
 		amdgpu_vm_update_shared(base);
 }
-- 
2.34.1



More information about the amd-gfx mailing list