[Mesa-dev] [PATCH] svga: fix invalid memory reference in needs_to_create_zero()
Jose Fonseca
jfonseca at vmware.com
Thu Jul 26 13:39:38 PDT 2012
Looks good.
While we're at it, we could ensure the whole key, including num_textures, gets zeroed. The bulk of Mesa/Gallium code assumes structures are zeroed at initialization, which makes it extremely easy to overlook those few places where that's isn't true.
Jose
----- Original Message -----
> The emit->key.fkey info is only valid if we're generating a fragment
> shader.
> We should not look at it if we're generating a vertex shader.
>
> When generating a vertex shader, the value of
> emit->key.fkey.num_textures was
> garbage and the loop over num_textures would read invalid data. At
> best
> this would cause us to emit an unused constant. At worse, we could
> segfault.
> Just by dumb luck, fkey.num_textures was usually a smallish integer.
>
> NOTE: This is a candidate for the 8.0 branch.
> ---
> src/gallium/drivers/svga/svga_tgsi_insn.c | 10 +++++-----
> 1 files changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/src/gallium/drivers/svga/svga_tgsi_insn.c
> b/src/gallium/drivers/svga/svga_tgsi_insn.c
> index ba10fa7..4770816 100644
> --- a/src/gallium/drivers/svga/svga_tgsi_insn.c
> +++ b/src/gallium/drivers/svga/svga_tgsi_insn.c
> @@ -3126,6 +3126,11 @@ needs_to_create_zero( struct
> svga_shader_emitter *emit )
> emit->key.fkey.tex[i].swizzle_a > PIPE_SWIZZLE_ALPHA)
> return TRUE;
> }
> +
> + for (i = 0; i < emit->key.fkey.num_textures; i++) {
> + if (emit->key.fkey.tex[i].compare_mode ==
> PIPE_TEX_COMPARE_R_TO_TEXTURE)
> + return TRUE;
> + }
> }
>
> if (emit->unit == PIPE_SHADER_VERTEX) {
> @@ -3150,11 +3155,6 @@ needs_to_create_zero( struct
> svga_shader_emitter *emit )
> emit->info.opcode_count[TGSI_OPCODE_KILP] >= 1)
> return TRUE;
>
> - for (i = 0; i < emit->key.fkey.num_textures; i++) {
> - if (emit->key.fkey.tex[i].compare_mode ==
> PIPE_TEX_COMPARE_R_TO_TEXTURE)
> - return TRUE;
> - }
> -
> return FALSE;
> }
>
> --
> 1.7.3.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
More information about the mesa-dev
mailing list