On 5/16/26 13:06, Julian Orth wrote: > Previously, if dma_fence_chain_alloc() failed, the syncobj and fence > would be leaked.
Since it is a bug fix that patch should be send out separately from the patch set. > > Signed-off-by: Julian Orth <[email protected]> > --- > drivers/gpu/drm/drm_syncobj.c | 17 +++++++++++------ > 1 file changed, 11 insertions(+), 6 deletions(-) > > diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c > index 9b7ecc2978f5..1da96e23dfc0 100644 > --- a/drivers/gpu/drm/drm_syncobj.c > +++ b/drivers/gpu/drm/drm_syncobj.c > @@ -767,30 +767,35 @@ static int drm_syncobj_import_sync_file_fence(struct > drm_file *file_private, > { > struct dma_fence *fence = sync_file_get_fence(fd); > struct drm_syncobj *syncobj; > + int ret = 0; Please don't initialize local return variables, initialize them when you know that the function is successful. Regards, Christian. > > if (!fence) > return -EINVAL; > > syncobj = drm_syncobj_find(file_private, handle); > if (!syncobj) { > - dma_fence_put(fence); > - return -ENOENT; > + ret = -ENOENT; > + goto err_syncobj; > } > > if (point) { > struct dma_fence_chain *chain = dma_fence_chain_alloc(); > > - if (!chain) > - return -ENOMEM; > + if (!chain) { > + ret = -ENOMEM; > + goto err; > + } > > drm_syncobj_add_point(syncobj, chain, fence, point); > } else { > drm_syncobj_replace_fence(syncobj, fence); > } > > - dma_fence_put(fence); > +err: > drm_syncobj_put(syncobj); > - return 0; > +err_syncobj: > + dma_fence_put(fence); > + return ret; > } > > static int drm_syncobj_export_sync_file(struct drm_file *file_private, >
