zink: Some return values of malloc should be checked

Signed-off-by: xurui <xurui@kylinos.cn>
Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22328>
This commit is contained in:
xurui 2023-04-06 18:11:48 +08:00 committed by Marge Bot
parent 0b4e7491f3
commit f66e6b671c
8 changed files with 86 additions and 0 deletions

View file

@ -1013,6 +1013,11 @@ zink_create_sampler_view(struct pipe_context *pctx, struct pipe_resource *pres,
struct zink_sampler_view *sampler_view = CALLOC_STRUCT_CL(zink_sampler_view);
bool err;
if (!sampler_view) {
mesa_loge("ZINK: failed to allocate sampler_view!");
return NULL;
}
sampler_view->base = *state;
sampler_view->base.texture = NULL;
pipe_resource_reference(&sampler_view->base.texture, pres);
@ -4993,14 +4998,26 @@ zink_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags)
util_idalloc_alloc(&ctx->di.bindless[i].img_slots);
if (zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_DB) {
ctx->di.bindless[i].db.buffer_infos = malloc(sizeof(VkDescriptorAddressInfoEXT) * ZINK_MAX_BINDLESS_HANDLES);
if (!ctx->di.bindless[i].db.buffer_infos) {
mesa_loge("ZINK: failed to allocate ctx->di.bindless[%d].db.buffer_infos!",i);
goto fail;
}
for (unsigned j = 0; j < ZINK_MAX_BINDLESS_HANDLES; j++) {
ctx->di.bindless[i].db.buffer_infos[j].sType = VK_STRUCTURE_TYPE_DESCRIPTOR_ADDRESS_INFO_EXT;
ctx->di.bindless[i].db.buffer_infos[j].pNext = NULL;
}
} else {
ctx->di.bindless[i].t.buffer_infos = malloc(sizeof(VkBufferView) * ZINK_MAX_BINDLESS_HANDLES);
if (!ctx->di.bindless[i].t.buffer_infos) {
mesa_loge("ZINK: failed to allocate ctx->di.bindless[%d].t.buffer_infos!",i);
goto fail;
}
}
ctx->di.bindless[i].img_infos = malloc(sizeof(VkDescriptorImageInfo) * ZINK_MAX_BINDLESS_HANDLES);
if (!ctx->di.bindless[i].img_infos) {
mesa_loge("ZINK: failed to allocate ctx->di.bindless[%d].img_infos!",i);
goto fail;
}
util_dynarray_init(&ctx->di.bindless[i].updates, NULL);
util_dynarray_init(&ctx->di.bindless[i].resident, NULL);
}

View file

@ -323,6 +323,10 @@ kopper_GetSwapchainImages(struct zink_screen *screen, struct kopper_swapchain *c
if (error != VK_SUCCESS)
return error;
cswap->images = calloc(cswap->num_images, sizeof(struct kopper_swapchain_image));
if (!cswap->images) {
mesa_loge("ZINK: failed to allocate cswap->images!");
return VK_ERROR_OUT_OF_HOST_MEMORY;
}
cswap->presents = _mesa_hash_table_create_u32_keys(NULL);
VkImage images[32];
error = VKSCR(GetSwapchainImagesKHR)(screen->dev, cswap->swapchain, &cswap->num_images, images);
@ -720,6 +724,11 @@ kopper_present(void *data, void *gdata, int thread_idx)
arr = he->data;
else {
arr = malloc(sizeof(struct util_dynarray));
if (!arr) {
mesa_loge("ZINK: failed to allocate arr!");
return;
}
util_dynarray_init(arr, NULL);
_mesa_hash_table_insert(swapchain->presents, (void*)(uintptr_t)next, arr);
}
@ -746,6 +755,11 @@ zink_kopper_present_queue(struct zink_screen *screen, struct zink_resource *res)
prune_old_swapchains(screen, cdt, false);
struct kopper_present_info *cpi = malloc(sizeof(struct kopper_present_info));
if (!cpi) {
mesa_loge("ZINK: failed to allocate cpi!");
return;
}
cpi->sem = res->obj->present;
cpi->res = res;
cpi->swapchain = cdt->swapchain;

View file

@ -1196,6 +1196,10 @@ create_gfx_program_separable(struct zink_context *ctx, struct zink_shader **stag
prog->last_variant_hash = ctx->gfx_pipeline_state.optimal_key;
struct zink_gfx_library_key *gkey = CALLOC_STRUCT(zink_gfx_library_key);
if (!gkey) {
mesa_loge("ZINK: failed to allocate gkey!");
goto fail;
}
gkey->optimal_key = prog->last_variant_hash;
assert(gkey->optimal_key);
gkey->pipeline = zink_create_gfx_pipeline_combined(screen, prog, VK_NULL_HANDLE, libs, 2, VK_NULL_HANDLE, false);
@ -1927,6 +1931,11 @@ struct zink_gfx_library_key *
zink_create_pipeline_lib(struct zink_screen *screen, struct zink_gfx_program *prog, struct zink_gfx_pipeline_state *state)
{
struct zink_gfx_library_key *gkey = CALLOC_STRUCT(zink_gfx_library_key);
if (!gkey) {
mesa_loge("ZINK: failed to allocate gkey!");
return NULL;
}
gkey->optimal_key = state->optimal_key;
assert(gkey->optimal_key);
memcpy(gkey->modules, prog->modules, sizeof(gkey->modules));
@ -1988,6 +1997,11 @@ print_pipeline_stats(struct zink_screen *screen, VkPipeline pipeline)
VkPipelineExecutableStatisticKHR *stats = NULL;
VKSCR(GetPipelineExecutableStatisticsKHR)(screen->dev, &info, &count, NULL);
stats = calloc(count, sizeof(VkPipelineExecutableStatisticKHR));
if (!stats) {
mesa_loge("ZINK: failed to allocate stats!");
return;
}
for (unsigned i = 0; i < count; i++)
stats[i].sType = VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR;
VKSCR(GetPipelineExecutableStatisticsKHR)(screen->dev, &info, &count, stats);

View file

@ -474,6 +474,10 @@ query_pool_get_range(struct zink_context *ctx, struct zink_query *q)
pool = find_or_allocate_qp(ctx, q, pool_idx);
}
vkq = CALLOC_STRUCT(zink_vk_query);
if (!vkq) {
mesa_loge("ZINK: failed to allocate vkq!");
return;
}
vkq->refcount = 1;
vkq->needs_reset = true;

View file

@ -671,6 +671,11 @@ resource_object_create(struct zink_screen *screen, const struct pipe_resource *t
pipe_reference_init(&obj->reference, 1);
if (loader_private) {
obj->bo = CALLOC_STRUCT(zink_bo);
if (!obj->bo) {
mesa_loge("ZINK: failed to allocate obj->bo!");
return NULL;
}
obj->transfer_dst = true;
return obj;
} else if (templ->target == PIPE_BUFFER) {
@ -1169,6 +1174,11 @@ resource_create(struct pipe_screen *pscreen,
struct zink_screen *screen = zink_screen(pscreen);
struct zink_resource *res = CALLOC_STRUCT_CL(zink_resource);
if (!res) {
mesa_loge("ZINK: failed to allocate res!");
return NULL;
}
if (modifiers_count > 0 && screen->info.have_EXT_image_drm_format_modifier) {
/* for rebinds */
res->modifiers_count = modifiers_count;
@ -1334,6 +1344,11 @@ add_resource_bind(struct zink_context *ctx, struct zink_resource *res, unsigned
if (bind & ZINK_BIND_DMABUF && !res->modifiers_count && screen->info.have_EXT_image_drm_format_modifier) {
res->modifiers_count = 1;
res->modifiers = malloc(res->modifiers_count * sizeof(uint64_t));
if (!res->modifiers) {
mesa_loge("ZINK: failed to allocate res->modifiers!");
return false;
}
res->modifiers[0] = DRM_FORMAT_MOD_LINEAR;
}
struct zink_resource_object *new_obj = resource_object_create(screen, &res->base.b, NULL, &res->linear, res->modifiers, res->modifiers_count, NULL);

View file

@ -1511,6 +1511,10 @@ choose_pdev(struct zink_screen *screen)
assert(pdev_count > 0);
pdevs = malloc(sizeof(*pdevs) * pdev_count);
if (!pdevs) {
mesa_loge("ZINK: failed to allocate pdevs!");
return;
}
result = VKSCR(EnumeratePhysicalDevices)(screen->instance, &pdev_count, pdevs);
assert(result == VK_SUCCESS);
assert(pdev_count > 0);
@ -1570,6 +1574,11 @@ update_queue_props(struct zink_screen *screen)
assert(num_queues > 0);
VkQueueFamilyProperties *props = malloc(sizeof(*props) * num_queues);
if (!props) {
mesa_loge("ZINK: failed to allocate props!");
return;
}
VKSCR(GetPhysicalDeviceQueueFamilyProperties)(screen->pdev, &num_queues, props);
bool found_gfx = false;

View file

@ -735,6 +735,10 @@ zink_create_vertex_state(struct pipe_screen *pscreen,
uint32_t full_velem_mask)
{
struct zink_vertex_state *zstate = CALLOC_STRUCT(zink_vertex_state);
if (!zstate) {
mesa_loge("ZINK: failed to allocate zstate!");
return NULL;
}
util_init_pipe_vertex_state(pscreen, buffer, elements, num_elements, indexbuf, full_velem_mask,
&zstate->b);

View file

@ -256,6 +256,11 @@ static struct pipe_surface *
wrap_surface(struct pipe_context *pctx, const struct pipe_surface *psurf)
{
struct zink_ctx_surface *csurf = CALLOC_STRUCT(zink_ctx_surface);
if (!csurf) {
mesa_loge("ZINK: failed to allocate csurf!");
return NULL;
}
csurf->base = *psurf;
pipe_reference_init(&csurf->base.reference, 1);
csurf->surf = (struct zink_surface*)psurf;
@ -493,6 +498,10 @@ zink_surface_swapchain_update(struct zink_context *ctx, struct zink_surface *sur
free(surface->swapchain);
surface->swapchain_size = cdt->swapchain->num_images;
surface->swapchain = calloc(surface->swapchain_size, sizeof(VkImageView));
if (!surface->swapchain) {
mesa_loge("ZINK: failed to allocate surface->swapchain!");
return;
}
surface->base.width = res->base.b.width0;
surface->base.height = res->base.b.height0;
init_surface_info(surface, res, &surface->ivci);