summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGert Wollny <gert.wollny@collabora.com>2023-12-06 12:35:56 +0100
committerMarge Bot <emma+marge@anholt.net>2023-12-16 10:57:18 +0000
commitbc43908b3a5bef62d702033a19b597d738196839 (patch)
treeec99ae679e6c092f586e9d010ed852482f16de16
parent4a6001c9cc44e4c453c820042dbb51d0c14f4a0a (diff)
shader: don't double-allocate the so_names
In geometry shaders emit_so_movs is called for each TGSI_OPCODE_EMIT, which may result in allocating the name for the emitted TF output more than once. Make sure we only allocate the name once. Fixes memory leak: Direct leak of 252 byte(s) in 36 object(s) allocated from: #0 0x55f1147d0290 in strdup /var/tmp/portage/sys-libs/compiler-rt-sanitizers-16.0.6/work/compiler-rt/lib/asan/asan_interceptors.cpp:475:3 #1 0x7f7b0fedbb3c in emit_so_movs /home/gerddie/Collabora/virglrenderer/build-clang/../src/vrend_shader.c:2384:29 #2 0x7f7b0fea0870 in iter_instruction /home/gerddie/Collabora/virglrenderer/build-clang/../src/vrend_shader.c:5948:13 #3 0x7f7b1030cd26 in tgsi_iterate_shader /home/gerddie/Collabora/virglrenderer/build-clang/../src/gallium/auxiliary/tgsi/tgsi_iterate.c:54:18 #4 0x7f7b0fe91fa2 in vrend_convert_shader /home/gerddie/Collabora/virglrenderer/build-clang/../src/vrend_shader.c:8168:11 #5 0x7f7b0fe73a2c in vrend_shader_create /home/gerddie/Collabora/virglrenderer/build-clang/../src/vrend_renderer.c:4327:18 #6 0x7f7b0fe1b631 in vrend_shader_select /home/gerddie/Collabora/virglrenderer/build-clang/../src/vrend_renderer.c:4377:11 #7 0x7f7b0fe622c0 in vrend_finish_shader /home/gerddie/Collabora/virglrenderer/build-clang/../src/vrend_renderer.c:4420:11 #8 0x7f7b0fe00c0a in vrend_shader_assign_tgsi /home/gerddie/Collabora/virglrenderer/build-clang/../src/vrend_renderer.c:4444:8 #9 0x7f7b0fdff9a0 in vrend_create_shader /home/gerddie/Collabora/virglrenderer/build-clang/../src/vrend_renderer.c:4568:20 #10 0x7f7b0fde51e0 in vrend_decode_create_shader /home/gerddie/Collabora/virglrenderer/build-clang/../src/vrend_decode.c:136:10 #11 0x7f7b0fdd7430 in vrend_decode_create_object /home/gerddie/Collabora/virglrenderer/build-clang/../src/vrend_decode.c:865:13 #12 0x7f7b0fdd6e8d in vrend_decode_ctx_submit_cmd /home/gerddie/Collabora/virglrenderer/build-clang/../src/vrend_decode.c:2055:13 #13 0x7f7b0fdc7b45 in virgl_renderer_submit_cmd /home/gerddie/Collabora/virglrenderer/build-clang/../src/virglrenderer.c:299:11 #14 0x55f114837935 in vtest_submit_cmd /home/gerddie/Collabora/virglrenderer/build-clang/../vtest/vtest_renderer.c:1273:10 #15 0x55f11482d365 in vtest_client_dispatch_commands /home/gerddie/Collabora/virglrenderer/build-clang/../vtest/vtest_server.c:757:10 #16 0x55f11482bc97 in vtest_server_dispatch_clients /home/gerddie/Collabora/virglrenderer/build-clang/../vtest/vtest_server.c:526:13 #17 0x55f11482a24c in vtest_server_run /home/gerddie/Collabora/virglrenderer/build-clang/../vtest/vtest_server.c:636:7 #18 0x55f1148291c4 in vtest_main /home/gerddie/Collabora/virglrenderer/build-clang/../vtest/vtest_server.c:153:4 #19 0x55f114829113 in main /home/gerddie/Collabora/virglrenderer/build-clang/../vtest/vtest_main.c:28:12 v2: remove no-op free call (Ryan) Signed-off-by: Gert Wollny <gert.wollny@collabora.com> Part-of: <https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/1313>
-rw-r--r--src/vrend_shader.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/vrend_shader.c b/src/vrend_shader.c
index f9d2099..bf3873f 100644
--- a/src/vrend_shader.c
+++ b/src/vrend_shader.c
@@ -2379,9 +2379,11 @@ static void emit_so_movs(const struct dump_ctx *ctx,
ctx->so_names[i] = strdup(out_var);
}
} else {
- char ntemp[8];
- snprintf(ntemp, 8, "tfout%d", i);
- ctx->so_names[i] = strdup(ntemp);
+ if (!ctx->so_names[i]) {
+ char ntemp[8];
+ snprintf(ntemp, 8, "tfout%d", i);
+ ctx->so_names[i] = strdup(ntemp);
+ }
}
if (ctx->so->output[i].num_components == 1) {
if (output->is_int)