From b5ccb6901c357e39346b67822968810901d04bc0 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 5 Sep 2023 12:37:29 -0400 Subject: [PATCH] nir/inline_uniforms: fix oob access with nir_find_inlinable_uniforms MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit the array dimensionality needs to match nir_add_inlinable_uniforms even if only the first member is used Fixes: 0c0fb216dd6 ("nir/inline_uniforms: Allow possibility of more than one UBO") Reviewed-by: Marek Olšák Part-of: (cherry picked from commit 39fca243bb914cea853e9d3502f1f38e6bf96ad4) --- .pick_status.json | 2 +- src/compiler/nir/nir_inline_uniforms.c | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 913abf0573a..218805fdd8e 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -31,7 +31,7 @@ "description": "nir/inline_uniforms: fix oob access with nir_find_inlinable_uniforms", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "0c0fb216dd6d9d194593178eb0493d31b4b977af" }, diff --git a/src/compiler/nir/nir_inline_uniforms.c b/src/compiler/nir/nir_inline_uniforms.c index 0479b25dff5..1c8d02db8b3 100644 --- a/src/compiler/nir/nir_inline_uniforms.c +++ b/src/compiler/nir/nir_inline_uniforms.c @@ -372,7 +372,7 @@ void nir_find_inlinable_uniforms(nir_shader *shader) { uint32_t uni_offsets[MAX_INLINABLE_UNIFORMS]; - uint8_t num_offsets = 0; + uint8_t num_offsets[MAX_NUM_BO] = {0}; nir_foreach_function(function, shader) { if (function->impl) { @@ -380,13 +380,13 @@ nir_find_inlinable_uniforms(nir_shader *shader) nir_var_all, false); foreach_list_typed(nir_cf_node, node, node, &function->impl->body) - process_node(node, NULL, uni_offsets, &num_offsets); + process_node(node, NULL, uni_offsets, num_offsets); } } - for (int i = 0; i < num_offsets; i++) + for (int i = 0; i < num_offsets[0]; i++) shader->info.inlinable_uniform_dw_offsets[i] = uni_offsets[i] / 4; - shader->info.num_inlinable_uniforms = num_offsets; + shader->info.num_inlinable_uniforms = num_offsets[0]; } void