From 938e52a6e83f2851c7cacbf97c5dfd4e1ff6837d Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Thu, 13 May 2021 22:48:15 +0300 Subject: [PATCH] anv: handle spirv parsing failure v2: don't leak spec_entries v3: Also switch to VK_ERROR_UNKNOWN when parsing fails Signed-off-by: Lionel Landwerlin Cc: mesa-stable Reviewed-by: Jason Ekstrand Part-of: --- src/intel/vulkan/anv_pipeline.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/intel/vulkan/anv_pipeline.c b/src/intel/vulkan/anv_pipeline.c index 9cc9326eb33..19c48934797 100644 --- a/src/intel/vulkan/anv_pipeline.c +++ b/src/intel/vulkan/anv_pipeline.c @@ -196,6 +196,11 @@ anv_shader_compile_to_nir(struct anv_device *device, spirv_to_nir(spirv, module->size / 4, spec_entries, num_spec_entries, stage, entrypoint_name, &spirv_options, nir_options); + if (!nir) { + free(spec_entries); + return NULL; + } + assert(nir->info.stage == stage); nir_validate_shader(nir, "after spirv_to_nir"); nir_validate_ssa_dominance(nir, "after spirv_to_nir"); @@ -1471,7 +1476,7 @@ anv_pipeline_compile_graphics(struct anv_graphics_pipeline *pipeline, pipeline_ctx, &stages[s]); if (stages[s].nir == NULL) { - result = vk_error(VK_ERROR_OUT_OF_HOST_MEMORY); + result = vk_error(VK_ERROR_UNKNOWN); goto fail; } @@ -1777,7 +1782,7 @@ anv_pipeline_compile_cs(struct anv_compute_pipeline *pipeline, stage.nir = anv_pipeline_stage_get_nir(&pipeline->base, cache, mem_ctx, &stage); if (stage.nir == NULL) { ralloc_free(mem_ctx); - return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY); + return vk_error(VK_ERROR_UNKNOWN); } NIR_PASS_V(stage.nir, anv_nir_add_base_work_group_id);