From b176372af4c773de188fae67e334e2a83c5706e3 Mon Sep 17 00:00:00 2001 From: Tom St Denis Date: Fri, 9 Oct 2015 12:46:40 -0400 Subject: [PATCH] amdgpu: Cleanly handle ENOMEM on result in amdgpu_bo_list_create() Move the allocation of result prior to the IOCTL so we can cleanly backtrack if the allocation fails. Signed-off-by: Tom St Denis Reviewed-by: Alex Deucher --- amdgpu/amdgpu_bo.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/amdgpu/amdgpu_bo.c b/amdgpu/amdgpu_bo.c index 348da003..1a5a4011 100644 --- a/amdgpu/amdgpu_bo.c +++ b/amdgpu/amdgpu_bo.c @@ -591,6 +591,12 @@ int amdgpu_bo_list_create(amdgpu_device_handle dev, if (!list) return -ENOMEM; + *result = malloc(sizeof(struct amdgpu_bo_list)); + if (!*result) { + free(list); + return -ENOMEM; + } + memset(&args, 0, sizeof(args)); args.in.operation = AMDGPU_BO_LIST_OP_CREATE; args.in.bo_number = number_of_resources; @@ -608,10 +614,11 @@ int amdgpu_bo_list_create(amdgpu_device_handle dev, r = drmCommandWriteRead(dev->fd, DRM_AMDGPU_BO_LIST, &args, sizeof(args)); free(list); - if (r) + if (r) { + free(*result); return r; + } - *result = malloc(sizeof(struct amdgpu_bo_list)); (*result)->dev = dev; (*result)->handle = args.out.list_handle; return 0;