Module: Mesa
Branch: main
Commit: bacace8634346f853547f51a0ea6ff8082a8dcb8
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=bacace8634346f853547f51a0ea6ff8082a8dcb8

Author: Patrick Lerda <patrick9...@free.fr>
Date:   Fri Jan 12 02:18:35 2024 +0100

glsl/nir: fix gl_nir_cross_validate_outputs_to_inputs() memory leak

For instance, this issue is triggered with
vs-to-fs-overlap.shader_test -auto -fbo:
Direct leak of 24 byte(s) in 1 object(s) allocated from:
    #0 0x7fe64f58e9a7 in calloc (/usr/lib64/libasan.so.6+0xb19a7)
    #1 0x7fe642ca2839 in _mesa_symbol_table_ctor 
../src/mesa/program/symbol_table.c:286
    #2 0x7fe642ff003d in gl_nir_cross_validate_outputs_to_inputs 
../src/compiler/glsl/gl_nir_link_varyings.c:728
    #3 0x7fe642d7c7d8 in gl_nir_link_glsl 
../src/compiler/glsl/gl_nir_linker.c:1357
    #4 0x7fe642be6931 in st_link_glsl_to_nir 
../src/mesa/state_tracker/st_glsl_to_nir.cpp:562
    #5 0x7fe642be6931 in st_link_shader 
../src/mesa/state_tracker/st_glsl_to_nir.cpp:944
    #6 0x7fe642acab55 in link_program ../src/mesa/main/shaderapi.c:1336
    #7 0x7fe642acab55 in link_program_error ../src/mesa/main/shaderapi.c:1447
    #8 0x7fe6424aa389 in _mesa_unmarshal_LinkProgram 
src/mapi/glapi/gen/marshal_generated2.c:1911
    #9 0x7fe641fd912b in glthread_unmarshal_batch 
../src/mesa/main/glthread.c:139
    #10 0x7fe641f48d48 in util_queue_thread_func ../src/util/u_queue.c:309
    #11 0x7fe641fa442a in impl_thrd_routine ../src/c11/impl/threads_posix.c:67

Fixes: 7d1948e9b5d9 ("glsl: implement cross_validate_outputs_to_inputs() in nir 
linker")
Signed-off-by: Patrick Lerda <patrick9...@free.fr>
Reviewed-by: Marek Olšák <marek.ol...@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27071>

---

 src/compiler/glsl/gl_nir_link_varyings.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/compiler/glsl/gl_nir_link_varyings.c 
b/src/compiler/glsl/gl_nir_link_varyings.c
index 234d4485c1c..4f576f2ee71 100644
--- a/src/compiler/glsl/gl_nir_link_varyings.c
+++ b/src/compiler/glsl/gl_nir_link_varyings.c
@@ -745,7 +745,7 @@ gl_nir_cross_validate_outputs_to_inputs(const struct 
gl_constants *consts,
          if (!validate_explicit_variable_location(consts,
                                                   output_explicit_locations,
                                                   var, prog, producer)) {
-            return;
+            goto out;
          }
       }
    }
@@ -799,7 +799,7 @@ gl_nir_cross_validate_outputs_to_inputs(const struct 
gl_constants *consts,
             if (!validate_explicit_variable_location(consts,
                                                      input_explicit_locations,
                                                      input, prog, consumer)) {
-               return;
+               goto out;
             }
 
             while (idx < slot_limit) {
@@ -807,7 +807,7 @@ gl_nir_cross_validate_outputs_to_inputs(const struct 
gl_constants *consts,
                   linker_error(prog,
                                "Invalid location %u in %s shader\n", idx,
                                _mesa_shader_stage_to_string(consumer->Stage));
-                  return;
+                  goto out;
                }
 
                output = 
output_explicit_locations[idx][input->data.location_frac].var;
@@ -870,6 +870,7 @@ gl_nir_cross_validate_outputs_to_inputs(const struct 
gl_constants *consts,
       }
    }
 
+ out:
    _mesa_symbol_table_dtor(table);
 }
 

Reply via email to