[PATCH v2] drm/amdgpu: Add NULL check for 'bo_va' in update_bo_mapping v2

Dan Carpenter dan.carpenter at linaro.org
Tue Apr 22 14:15:02 UTC 2025


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



More information about the amd-gfx mailing list