[PATCH] drm/gem-shmem: When drm_gem_object_init failed, should release object
Chunyou Tang
tangchunyou at 163.com
Wed Nov 9 09:07:45 UTC 2022
Hi,
drm_gem_object_init() will do these before failed:
void drm_gem_private_object_init(struct drm_device *dev,
struct drm_gem_object *obj, size_t
size) {
BUG_ON((size & (PAGE_SIZE - 1)) != 0);
obj->dev = dev;
obj->filp = NULL;
kref_init(&obj->refcount);
obj->handle_count = 0;
obj->size = size;
dma_resv_init(&obj->_resv);
if (!obj->resv)
obj->resv = &obj->_resv;
drm_vma_node_reset(&obj->vma_node);
INIT_LIST_HEAD(&obj->lru_node);
}
so I think when it failed, should use drm_gem_object_release()
to do dma_resv_fini() and others.
another, if drm_gem_object_init() fails, the drm_gem_handle_create()
can not be called.
于 Tue, 8 Nov 2022 09:28:34 +0100
Thomas Zimmermann <tzimmermann at suse.de> 写道:
> Hi
>
> Am 08.11.22 um 03:03 schrieb ChunyouTang:
> > when goto err_free, the object had init, so it should be release
> > when fail.
>
> If the call to drm_gem_object_init() fails, the object is still
> uninitialized. Admittedly, the call to gem_create_object could need
> additional cleanup, but it appears as if no one has had a need for
> this so far.
>
> Is there anything that might leak?
>
> >
> > Signed-off-by: ChunyouTang <tangchunyou at 163.com>
> > ---
> > drivers/gpu/drm/drm_gem_shmem_helper.c | 4 ++--
> > 1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c
> > b/drivers/gpu/drm/drm_gem_shmem_helper.c index
> > 35138f8a375c..2e5e3207355f 100644 ---
> > a/drivers/gpu/drm/drm_gem_shmem_helper.c +++
> > b/drivers/gpu/drm/drm_gem_shmem_helper.c @@ -104,10 +104,10 @@
> > __drm_gem_shmem_create(struct drm_device *dev, size_t size, bool
> > private) return shmem;
> >
> > -err_release:
> > - drm_gem_object_release(obj);
> > err_free:
> > kfree(obj);
> > +err_release:
> > + drm_gem_object_release(obj);
>
> You have now freed the object's memory before releasing it. Not going
> to work.
>
> Best regards
> Thomas
>
> >
> > return ERR_PTR(ret);
> > }
>
More information about the dri-devel
mailing list