From 343f9f52a127231ed02247096374fcc44248e014 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 25 Jan 2022 11:25:24 -0500 Subject: [PATCH] zink: reorder fbfetch flag-setting to avoid null deref this avoids dereferencing pg->dd which is allocated a few lines later Fixes: 417477f60ed ("zink: always use lazy (non-push) updating for fbfetch descriptors") fixes (radv): dEQP-GLES31.functional.blend_equation_advanced.basic.multiply Reviewed-by: Dave Airlie Part-of: (cherry picked from commit 8747715aecea73fa932d11a30188aae2b353cdb4) --- .pick_status.json | 2 +- src/gallium/drivers/zink/zink_descriptors_lazy.c | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 83068db0f2e..39d5c949290 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -4648,7 +4648,7 @@ "description": "zink: reorder fbfetch flag-setting to avoid null deref", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "417477f60ede0fab0a5a601c872731fc9c612da1" }, diff --git a/src/gallium/drivers/zink/zink_descriptors_lazy.c b/src/gallium/drivers/zink/zink_descriptors_lazy.c index 4c988cbb908..42bfc31b740 100644 --- a/src/gallium/drivers/zink/zink_descriptors_lazy.c +++ b/src/gallium/drivers/zink/zink_descriptors_lazy.c @@ -140,20 +140,20 @@ zink_descriptor_program_init_lazy(struct zink_context *ctx, struct zink_program struct zink_shader **stages; if (pg->is_compute) stages = &((struct zink_compute_program*)pg)->shader; - else { + else stages = ((struct zink_gfx_program*)pg)->shaders; - if (stages[PIPE_SHADER_FRAGMENT]->nir->info.fs.uses_fbfetch_output) { - zink_descriptor_util_init_fbfetch(ctx); - push_count = 1; - pg->dd->fbfetch = true; - } - } if (!pg->dd) pg->dd = (void*)rzalloc(pg, struct zink_program_descriptor_data); if (!pg->dd) return false; + if (!pg->is_compute && stages[PIPE_SHADER_FRAGMENT]->nir->info.fs.uses_fbfetch_output) { + zink_descriptor_util_init_fbfetch(ctx); + push_count = 1; + pg->dd->fbfetch = true; + } + unsigned entry_idx[ZINK_DESCRIPTOR_TYPES] = {0}; unsigned num_shaders = pg->is_compute ? 1 : ZINK_SHADER_COUNT;