i965/vec4: Fix hypothetical use of uninitialized data in attribute_map[].
authorPaul Berry <stereotype441@gmail.com>
Tue, 16 Apr 2013 19:49:51 +0000 (12:49 -0700)
committerPaul Berry <stereotype441@gmail.com>
Thu, 18 Apr 2013 00:41:55 +0000 (17:41 -0700)
commit417d8917d4924652f1cd0c64dbf3677d4eddbf8c
tree06feb20a80ee06ef15c17d0981c5fd328abd99d2
parent47bd6e46fe89e1cce61b11bcaa7b81f807011c23
i965/vec4: Fix hypothetical use of uninitialized data in attribute_map[].

Fixes issue identified by Klocwork analysis:

    'attribute_map' array elements might be used uninitialized in this
    function (vec4_visitor::lower_attributes_to_hw_regs).

The attribute_map array contains the mapping from shader input
attributes to the hardware registers they are stored in.
vec4_vs_visitor::setup_attributes() only populates elements of this
array which, according to core Mesa, are actually used by the shader.
Therefore, when vec4_visitor::lower_attributes_to_hw_regs() accesses
the array to lower a register access in the shader, it should in
principle only access elements of attribute_map that contain valid
data.  However, if a bug ever caused the driver back-end to access an
input that was not flagged as used by core Mesa, then
lower_attributes_to_hw_regs() would access uninitialized memory, which
could cause illegal instructions to get generated, resulting in a
possible GPU hang.

This patch makes the situation more robust by using memset() to
pre-initialize the attribute_map array to zero, so that if such a bug
ever occurred, lower_attributes_to_hw_regs() would generate a (mostly)
harmless access to r0.  In addition, it adds assertions to
lower_attributes_to_hw_regs() so that if we do have such a bug, we're
likely to discover it quickly.

Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
src/mesa/drivers/dri/i965/brw_vec4.cpp