lkml.org 
[lkml]   [2019]   [Nov]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 093/149] drm/amdgpu: fix memory leak
    Date
    From: Nirmoy Das <nirmoy.das@amd.com>

    [ Upstream commit 083164dbdb17c5ea4ad92c1782b59c9d75567790 ]

    cleanup error handling code and make sure temporary info array
    with the handles are freed by amdgpu_bo_list_put() on
    idr_replace()'s failure.

    Signed-off-by: Nirmoy Das <nirmoy.das@amd.com>
    Reviewed-by: Christian König <christian.koenig@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c | 14 +++++++-------
    1 file changed, 7 insertions(+), 7 deletions(-)

    diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c
    index b80243d3972e4..ce7f18c5ccb26 100644
    --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c
    +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c
    @@ -264,7 +264,7 @@ int amdgpu_bo_list_ioctl(struct drm_device *dev, void *data,

    r = amdgpu_bo_create_list_entry_array(&args->in, &info);
    if (r)
    - goto error_free;
    + return r;

    switch (args->in.operation) {
    case AMDGPU_BO_LIST_OP_CREATE:
    @@ -277,8 +277,7 @@ int amdgpu_bo_list_ioctl(struct drm_device *dev, void *data,
    r = idr_alloc(&fpriv->bo_list_handles, list, 1, 0, GFP_KERNEL);
    mutex_unlock(&fpriv->bo_list_lock);
    if (r < 0) {
    - amdgpu_bo_list_put(list);
    - return r;
    + goto error_put_list;
    }

    handle = r;
    @@ -300,9 +299,8 @@ int amdgpu_bo_list_ioctl(struct drm_device *dev, void *data,
    mutex_unlock(&fpriv->bo_list_lock);

    if (IS_ERR(old)) {
    - amdgpu_bo_list_put(list);
    r = PTR_ERR(old);
    - goto error_free;
    + goto error_put_list;
    }

    amdgpu_bo_list_put(old);
    @@ -319,8 +317,10 @@ int amdgpu_bo_list_ioctl(struct drm_device *dev, void *data,

    return 0;

    +error_put_list:
    + amdgpu_bo_list_put(list);
    +
    error_free:
    - if (info)
    - kvfree(info);
    + kvfree(info);
    return r;
    }
    --
    2.20.1


    \
     
     \ /
      Last update: 2019-11-04 23:20    [W:4.117 / U:0.072 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site