On Tue, Apr 22, 2025 at 03:34:58PM +0200, Christian König wrote: > Am 22.04.25 um 15:17 schrieb Srinivasan Shanmugam: > > This change adds a check to ensure that 'bo_va' is not null before > > dereferencing it. If 'bo_va' is null, the function returns early, > > preventing any potential crashes or undefined behavior > > That commit message doesn't reflect the changes any more. > > > > > Fixes the below: > > drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:139 > > amdgpu_gem_update_bo_mapping() > > error: we previously assumed 'bo_va' could be null (see line 124) > > > > drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c > > 115 static void > > 116 amdgpu_gem_update_bo_mapping(struct drm_file *filp, > > 117 struct amdgpu_bo_va *bo_va, > > 118 uint32_t operation, > > 119 uint64_t point, > > 120 struct dma_fence *fence, > > 121 struct drm_syncobj *syncobj, > > 122 struct dma_fence_chain *chain) > > 123 { > > 124 struct amdgpu_bo *bo = bo_va ? bo_va->base.bo : NULL; > > ^^^^^^^^^^ If bo_va is NULL then bo is > > also NULL > > > > ... > > 135 case AMDGPU_VA_OP_REPLACE: > > 136 if (bo && (bo->tbo.base.resv == > > vm->root.bo->tbo.base.resv)) > > ^^ > > > > 137 last_update = vm->last_update; > > 138 else > > --> 139 last_update = bo_va->last_pt_update; > > ^^^^^ This pointer is > > dereferenced without being checked. > > > > 140 break; > > Please completely drop that. This conclusion is actually incorrect. > > BO might be NULL here because bo_va->base.bo is NULL and *not* because bo_va > is NULL. > > @Dan your script seems to reports false positives here. >
I mean my analysis was only based on only looking at the function itself without looking at the caller. It turns out that it's a false positve because "bo_va" is only NULL when the operation is AMDGPU_VA_OP_CLEAR. You need to look at the caller and also where fpriv->prt_va is set in amdgpu_driver_open_kms(). It's a bit too complicated for Smatch to do this level of analysis. Anyway, yes, please don't silence static checker false positives, just ignore them. regards, dan carpenter