From b73fe8d52e781a70fe52d0dd141074922ad5c120 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Sun, 12 Feb 2023 16:58:19 -0500 Subject: [PATCH] zink: also replace hash_entry::key when replacing separable program this otherwise still points to the separable program's shader array and will access freed memory Part-of: --- src/gallium/drivers/zink/zink_program.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gallium/drivers/zink/zink_program.c b/src/gallium/drivers/zink/zink_program.c index 9c617151d93..5b6535f29e6 100644 --- a/src/gallium/drivers/zink/zink_program.c +++ b/src/gallium/drivers/zink/zink_program.c @@ -699,6 +699,7 @@ zink_gfx_program_update_optimal(struct zink_context *ctx) if (util_queue_fence_is_signalled(&prog->base.cache_fence)) { struct zink_gfx_program *real = prog->full_prog; entry->data = real; + entry->key = real->shaders; real->base.removed = false; prog->full_prog = NULL; prog->base.removed = true; @@ -737,6 +738,7 @@ zink_gfx_program_update_optimal(struct zink_context *ctx) struct hash_entry *entry = _mesa_hash_table_search_pre_hashed(ht, hash, ctx->gfx_stages); struct zink_gfx_program *real = prog->full_prog; entry->data = real; + entry->key = real->shaders; real->base.removed = false; prog->full_prog = NULL; prog->base.removed = true;