mirror of
https://github.com/torvalds/linux.git
synced 2024-12-27 13:22:23 +00:00
drm/amdgpu: fix error handling in amdgpu_cs_user_fence_chunk
Slowly leaking memory one page at a time :) Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
3a74987b24
commit
0165de9832
@ -39,6 +39,7 @@ static int amdgpu_cs_user_fence_chunk(struct amdgpu_cs_parser *p,
|
|||||||
{
|
{
|
||||||
struct drm_gem_object *gobj;
|
struct drm_gem_object *gobj;
|
||||||
unsigned long size;
|
unsigned long size;
|
||||||
|
int r;
|
||||||
|
|
||||||
gobj = drm_gem_object_lookup(p->filp, data->handle);
|
gobj = drm_gem_object_lookup(p->filp, data->handle);
|
||||||
if (gobj == NULL)
|
if (gobj == NULL)
|
||||||
@ -50,20 +51,26 @@ static int amdgpu_cs_user_fence_chunk(struct amdgpu_cs_parser *p,
|
|||||||
p->uf_entry.tv.shared = true;
|
p->uf_entry.tv.shared = true;
|
||||||
p->uf_entry.user_pages = NULL;
|
p->uf_entry.user_pages = NULL;
|
||||||
|
|
||||||
|
drm_gem_object_put_unlocked(gobj);
|
||||||
|
|
||||||
size = amdgpu_bo_size(p->uf_entry.robj);
|
size = amdgpu_bo_size(p->uf_entry.robj);
|
||||||
if (size != PAGE_SIZE || (data->offset + 8) > size)
|
if (size != PAGE_SIZE || (data->offset + 8) > size) {
|
||||||
return -EINVAL;
|
r = -EINVAL;
|
||||||
|
goto error_unref;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (amdgpu_ttm_tt_get_usermm(p->uf_entry.robj->tbo.ttm)) {
|
||||||
|
r = -EINVAL;
|
||||||
|
goto error_unref;
|
||||||
|
}
|
||||||
|
|
||||||
*offset = data->offset;
|
*offset = data->offset;
|
||||||
|
|
||||||
drm_gem_object_put_unlocked(gobj);
|
|
||||||
|
|
||||||
if (amdgpu_ttm_tt_get_usermm(p->uf_entry.robj->tbo.ttm)) {
|
|
||||||
amdgpu_bo_unref(&p->uf_entry.robj);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
error_unref:
|
||||||
|
amdgpu_bo_unref(&p->uf_entry.robj);
|
||||||
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int amdgpu_cs_bo_handles_chunk(struct amdgpu_cs_parser *p,
|
static int amdgpu_cs_bo_handles_chunk(struct amdgpu_cs_parser *p,
|
||||||
|
Loading…
Reference in New Issue
Block a user