[Mesa-dev] [PATCH] ttn: Fix out-of-bounds accesses since the always-2D-constants change.

Nicolai Hähnle nhaehnle at gmail.com
Wed Sep 13 15:08:25 UTC 2017


On 07.09.2017 19:17, Eric Anholt wrote:
> Only one of the three checks for dim was updated, so we would try to set a
> UBO buffer index source value on a nir_load_uniform, and wouldn't actually
> declare non-UBO uniforms.
> 
> Fixes: 37dd8e8dee1d ("gallium: all drivers should accept two-dimensional constant buffer indexing")

Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>

> ---
>   src/gallium/auxiliary/nir/tgsi_to_nir.c | 5 +++--
>   1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/src/gallium/auxiliary/nir/tgsi_to_nir.c b/src/gallium/auxiliary/nir/tgsi_to_nir.c
> index aa715dcae2db..1b630096ffaa 100644
> --- a/src/gallium/auxiliary/nir/tgsi_to_nir.c
> +++ b/src/gallium/auxiliary/nir/tgsi_to_nir.c
> @@ -314,7 +314,8 @@ ttn_emit_declaration(struct ttn_compile *c)
>                file == TGSI_FILE_CONSTANT);
>   
>         /* nothing to do for UBOs: */
> -      if ((file == TGSI_FILE_CONSTANT) && decl->Declaration.Dimension) {
> +      if ((file == TGSI_FILE_CONSTANT) && decl->Declaration.Dimension &&
> +          decl->Dim.Index2D != 0) {
>            b->shader->info.num_ubos =
>               MAX2(b->shader->info.num_ubos, decl->Dim.Index2D);
>            return;
> @@ -638,7 +639,7 @@ ttn_src_for_file_and_index(struct ttn_compile *c, unsigned file, unsigned index,
>         load = nir_intrinsic_instr_create(b->shader, op);
>   
>         load->num_components = 4;
> -      if (dim) {
> +      if (dim && (dim->Index > 0 || dim->Indirect)) {
>            if (dimind) {
>               load->src[srcn] =
>                  ttn_src_for_file_and_index(c, dimind->File, dimind->Index,
> 


-- 
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.


More information about the mesa-dev mailing list