From 2a7df331af65216e0229fe6481c1eca70221b225 Mon Sep 17 00:00:00 2001 From: Karmjit Mahil Date: Fri, 8 Nov 2024 16:31:28 +0100 Subject: [PATCH] nir: Fix `no_lower_set` leak on early return Addresses: ``` Indirect leak of 256 byte(s) in 2 object(s) allocated from: #0 0x7faaf53ee0 in __interceptor_malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:145 #1 0x7fa8cfe900 in ralloc_size ../src/util/ralloc.c:118 #2 0x7fa8cfeb20 in rzalloc_size ../src/util/ralloc.c:152 #3 0x7fa8cff004 in rzalloc_array_size ../src/util/ralloc.c:232 #4 0x7fa8d06a84 in _mesa_set_init ../src/util/set.c:133 #5 0x7fa8d06bcc in _mesa_set_create ../src/util/set.c:152 #6 0x7fa8d0939c in _mesa_pointer_set_create ../src/util/set.c:613 #7 0x7fa95e5790 in nir_lower_mediump_vars ../src/compiler/nir/nir_lower_mediump.c:574 #8 0x7fa862c1c8 in tu_spirv_to_nir(tu_device*, void*, unsigned long, VkPipelineShaderStageCreateInfo const*, tu_shader_key const*, pipe_shader_type) ../src/freedreno/vulkan/tu_shader.cc:116 #9 0x7fa8646f24 in tu_compile_shaders(tu_device*, unsigned long, VkPipelineShaderStageCreateInfo const**, nir_shader**, tu_shader_key const*, tu_pipeline_layout*, unsigned char const*, tu_shader**, char**, void*, nir_shader**, VkPipelineCreationFeedback*) ../src/freedreno/vulkan/tu_shader.cc:2741 #10 0x7fa85a16a4 in tu_pipeline_builder_compile_shaders ../src/freedreno/vulkan/tu_pipeline.cc:1887 #11 0x7fa85eb844 in tu_pipeline_builder_build<(chip)7> ../src/freedreno/vulkan/tu_pipeline.cc:3923 #12 0x7fa85e6bd8 in tu_graphics_pipeline_create<(chip)7> ../src/freedreno/vulkan/tu_pipeline.cc:4203 #13 0x7fa85c2588 in VkResult tu_CreateGraphicsPipelines<(chip)7>(VkDevice_T*, VkPipelineCache_T*, unsigned int, VkGraphicsPipelineCreateInfo const*, VkAllocationCallbacks const*, VkPipeline_T**) ../src/freedreno/vulkan/tu_pipeline.cc:4234 ``` seen in: dEQP-VK.binding_model.mutable_descriptor.single.switches.uniform_texel_buffer_storage_image.update_write.no_source.no_source.pool_expand_types.pre_update.no_array.vert Fixes: 7e986e5f045 ("nir/lower_mediump_vars: Don't lower mediump shared vars with atomic access.") Signed-off-by: Karmjit Mahil Part-of: --- src/compiler/nir/nir_lower_mediump.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/compiler/nir/nir_lower_mediump.c b/src/compiler/nir/nir_lower_mediump.c index c0289dd0f91..176e2d1e1b0 100644 --- a/src/compiler/nir/nir_lower_mediump.c +++ b/src/compiler/nir/nir_lower_mediump.c @@ -584,8 +584,10 @@ nir_lower_mediump_vars(nir_shader *shader, nir_variable_mode modes) nir_variable *var = nir_deref_instr_get_variable(deref); /* If we have atomic derefs that we can't track, then don't lower any mediump. */ - if (!var) + if (!var) { + ralloc_free(no_lower_set); return false; + } _mesa_set_add(no_lower_set, var); break;