glsl: fix leak in gl_nir_link_uniform_blocks
asan on llvmpipe with piglit tests/spec/arb_gl_spirv/execution/ssbo/array-indirect.shader_test
reported.
=================================================================
==3288325==ERROR: LeakSanitizer: detected memory leaks
Direct leak of 48 byte(s) in 1 object(s) allocated from:
#0 0x7f5b2d6513cf in __interceptor_malloc (/lib64/libasan.so.6+0xab3cf)
#1 0x7f5b2a1ae810 in ralloc_size ../src/util/ralloc.c:133
#2 0x7f5b2a1ae7e1 in ralloc_context ../src/util/ralloc.c:120
#3 0x7f5b2b210177 in gl_nir_link_uniform_blocks ../src/compiler/glsl/gl_nir_link_uniform_blocks.c:585
#4 0x7f5b2af7f52d in gl_nir_link_spirv ../src/compiler/glsl/gl_nir_linker.c:614
#5 0x7f5b2a3b76fa in st_link_nir ../src/mesa/state_tracker/st_glsl_to_nir.cpp:765
#6 0x7f5b2a3ace7b in st_link_shader ../src/mesa/state_tracker/st_glsl_to_ir.cpp:65
#7 0x7f5b2a471165 in _mesa_glsl_link_shader ../src/mesa/program/ir_to_mesa.cpp:3122
#8 0x7f5b2a97a6d8 in link_program ../src/mesa/main/shaderapi.c:1311
#9 0x7f5b2a97a6d8 in link_program_error ../src/mesa/main/shaderapi.c:1419
#10 0x7f5b2a97df45 in _mesa_LinkProgram ../src/mesa/main/shaderapi.c:1911
#11 0x7f5b299b59e5 in stub_glLinkProgram /mnt/devel/gl/piglit/tests/util/piglit-dispatch-gen.c:33956
#12 0x40a71a in link_and_use_shaders /mnt/devel/gl/piglit/tests/shaders/shader_runner.c:1604
#13 0x415722 in init_test /mnt/devel/gl/piglit/tests/shaders/shader_runner.c:5225
#14 0x4164ce in piglit_init /mnt/devel/gl/piglit/tests/shaders/shader_runner.c:5597
#15 0x7f5b29a214e9 in run_test /mnt/devel/gl/piglit/tests/util/piglit-framework-gl/piglit_winsys_framework.c:73
#16 0x7f5b29a103fe in piglit_gl_test_run /mnt/devel/gl/piglit/tests/util/piglit-framework-gl.c:229
#17 0x407847 in main /mnt/devel/gl/piglit/tests/shaders/shader_runner.c:72
#18 0x7f5b2928f1e1 in __libc_start_main (/lib64/libc.so.6+0x281e1)
SUMMARY: AddressSanitizer: 48 byte(s) leaked in 1 allocation(s).
Fixes: 57239192
("nir/linker: add gl_nir_link_uniform_blocks.c")
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8974>
This commit is contained in:
@@ -583,7 +583,7 @@ gl_nir_link_uniform_blocks(struct gl_context *ctx,
|
||||
struct gl_shader_program *prog)
|
||||
{
|
||||
void *mem_ctx = ralloc_context(NULL);
|
||||
|
||||
bool ret = false;
|
||||
for (int stage = 0; stage < MESA_SHADER_STAGES; stage++) {
|
||||
struct gl_linked_shader *const linked = prog->_LinkedShaders[stage];
|
||||
struct gl_uniform_block *ubo_blocks = NULL;
|
||||
@@ -603,7 +603,7 @@ gl_nir_link_uniform_blocks(struct gl_context *ctx,
|
||||
BLOCK_SSBO);
|
||||
|
||||
if (!prog->data->LinkStatus) {
|
||||
return false;
|
||||
goto out;
|
||||
}
|
||||
|
||||
prog->data->linked_stages |= 1 << stage;
|
||||
@@ -638,10 +638,13 @@ gl_nir_link_uniform_blocks(struct gl_context *ctx,
|
||||
}
|
||||
|
||||
if (!nir_interstage_cross_validate_uniform_blocks(prog, BLOCK_UBO))
|
||||
return false;
|
||||
goto out;
|
||||
|
||||
if (!nir_interstage_cross_validate_uniform_blocks(prog, BLOCK_SSBO))
|
||||
return false;
|
||||
goto out;
|
||||
|
||||
return true;
|
||||
ret = true;
|
||||
out:
|
||||
ralloc_free(mem_ctx);
|
||||
return ret;
|
||||
}
|
||||
|
Reference in New Issue
Block a user