From 5a423d2d9a2c57b44c8695862ed9a5e681515ef2 Mon Sep 17 00:00:00 2001 From: Patrick Lerda Date: Fri, 25 Oct 2024 20:22:28 +0200 Subject: [PATCH] glsl: fix gl_nir_validate_intrastage_interface_blocks() memory leak MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit For instance, this issue is triggered on redeonsi with "piglit/bin/shader_runner tests/spec/glsl-1.50/linker/interface-blocks-multiple-vs-member-count-mismatch.shader_test -auto -fbo": Indirect leak of 176 byte(s) in 1 object(s) allocated from: #0 0x7f894b5cd7ef in __interceptor_malloc (/usr/lib64/libasan.so.6+0xb17ef) #1 0x7f894183aebf in ralloc_size ../src/util/ralloc.c:118 #2 0x7f894183b36e in rzalloc_size ../src/util/ralloc.c:152 #3 0x7f894183b36e in rzalloc_array_size ../src/util/ralloc.c:232 #4 0x7f894182da67 in _mesa_hash_table_init ../src/util/hash_table.c:163 #5 0x7f894182da67 in _mesa_hash_table_create ../src/util/hash_table.c:186 #6 0x7f894169af03 in gl_nir_validate_intrastage_interface_blocks ../src/compiler/glsl/gl_nir_link_interface_blocks.c:533 #7 0x7f89414464a4 in link_intrastage_shaders ../src/compiler/glsl/gl_nir_linker.c:2750 #8 0x7f894144bad2 in gl_nir_link_glsl ../src/compiler/glsl/gl_nir_linker.c:3785 #9 0x7f894128977e in st_link_glsl_to_nir ../src/mesa/state_tracker/st_glsl_to_nir.cpp:515 #10 0x7f894128977e in st_link_shader ../src/mesa/state_tracker/st_glsl_to_nir.cpp:1008 #11 0x7f894113c7b5 in link_program ../src/mesa/main/shaderapi.c:1317 #12 0x7f894113c7b5 in link_program_error ../src/mesa/main/shaderapi.c:1426 #13 0x7f8940afb1bb in _mesa_unmarshal_LinkProgram src/mapi/glapi/gen/marshal_generated2.c:1627 #14 0x7f894063319b in glthread_unmarshal_batch ../src/mesa/main/glthread.c:141 #15 0x7f894184e658 in util_queue_thread_func ../src/util/u_queue.c:294 #16 0x7f89418d220a in impl_thrd_routine ../src/c11/impl/threads_posix.c:67 #17 0x7f894a66a7c3 (/lib64/libc.so.6+0x867c3) ... SUMMARY: AddressSanitizer: 1392 byte(s) leaked in 11 allocation(s). Fixes: ffbd763586f5 ("glsl: add gl_nir_validate_intrastage_interface_blocks()") Signed-off-by: Patrick Lerda Reviewed-by: Tapani Pälli Part-of: --- src/compiler/glsl/gl_nir_link_interface_blocks.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/compiler/glsl/gl_nir_link_interface_blocks.c b/src/compiler/glsl/gl_nir_link_interface_blocks.c index 999a48872e6..9b2b9fc05a3 100644 --- a/src/compiler/glsl/gl_nir_link_interface_blocks.c +++ b/src/compiler/glsl/gl_nir_link_interface_blocks.c @@ -582,12 +582,13 @@ gl_nir_validate_intrastage_interface_blocks(struct gl_shader_program *prog, true /* match_precision */)) { linker_error(prog, "definitions of interface block `%s' do not" " match\n", glsl_get_type_name(var->interface_type)); - return; + goto fail; } } } } + fail: ralloc_free(mem_ctx); }