amdgpu: replace alloca with calloc v2

use heap memory instead of stack memory to avoid potential stack overflow
when a large number of resources are used for the bo_list.

v2: some minor improvement

Signed-off-by: Jammy Zhou <Jammy.Zhou@amd.com>
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
main
Jammy Zhou 2015-05-18 20:57:41 +08:00 committed by Alex Deucher
parent 8cf8ac1539
commit 3f1ca0f939
1 changed files with 8 additions and 3 deletions

View File

@ -666,7 +666,10 @@ int amdgpu_bo_list_create(amdgpu_device_handle dev,
unsigned i;
int r;
list = alloca(sizeof(struct drm_amdgpu_bo_list_entry) * number_of_resources);
list = calloc(number_of_resources, sizeof(struct drm_amdgpu_bo_list_entry));
if (list == NULL)
return -ENOMEM;
memset(&args, 0, sizeof(args));
args.in.operation = AMDGPU_BO_LIST_OP_CREATE;
@ -685,12 +688,14 @@ int amdgpu_bo_list_create(amdgpu_device_handle dev,
r = drmCommandWriteRead(dev->fd, DRM_AMDGPU_BO_LIST,
&args, sizeof(args));
if (r)
return r;
goto out;
*result = calloc(1, sizeof(struct amdgpu_bo_list));
(*result)->dev = dev;
(*result)->handle = args.out.list_handle;
return 0;
out:
free(list);
return r;
}
int amdgpu_bo_list_destroy(amdgpu_bo_list_handle list)