From 14345c4dd67c75698ed071eb7b798e1f52abea62 Mon Sep 17 00:00:00 2001 From: antonino Date: Tue, 16 Jan 2024 15:27:23 +0100 Subject: [PATCH] zink: plug leak in `zink_create_quads_emulation_gs` When the shader is freed xfb info should be freed as well. Part-of: --- src/gallium/drivers/zink/zink_compiler.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/zink/zink_compiler.c b/src/gallium/drivers/zink/zink_compiler.c index a3b9c2ca9e5..c8ff54b72cc 100644 --- a/src/gallium/drivers/zink/zink_compiler.c +++ b/src/gallium/drivers/zink/zink_compiler.c @@ -1073,7 +1073,9 @@ zink_create_quads_emulation_gs(const nir_shader_compiler_options *options, nir->info.has_transform_feedback_varyings = prev_stage->info.has_transform_feedback_varyings; memcpy(nir->info.xfb_stride, prev_stage->info.xfb_stride, sizeof(prev_stage->info.xfb_stride)); if (prev_stage->xfb_info) { - nir->xfb_info = mem_dup(prev_stage->xfb_info, nir_xfb_info_size(prev_stage->xfb_info->output_count)); + size_t size = nir_xfb_info_size(prev_stage->xfb_info->output_count); + nir->xfb_info = ralloc_size(nir, size); + memcpy(nir->xfb_info, prev_stage->xfb_info, size); } nir_variable *in_vars[VARYING_SLOT_MAX];