[Mesa-dev] [PATCH] ilo: Ensure array 'shaders' in fully initialized.
Chia-I Wu
olvaffe at gmail.com
Fri May 31 01:09:19 PDT 2013
On Fri, May 31, 2013 at 3:48 PM, Vinson Lee <vlee at freedesktop.org> wrote:
> On Fri, May 31, 2013 at 12:35 AM, Chia-I Wu <olvaffe at gmail.com> wrote:
>> On Fri, May 31, 2013 at 2:59 PM, Vinson Lee <vlee at freedesktop.org> wrote:
>>> Fixes "Uninitialized pointer read" defect reported by Coverity.
>> This looks like a false alarm, as shaders are not read when
>> num_shaders is zero. Does the report give more details?
>>
I am not sure how to follow the report... I eye-checked the code, and
I failed to spot any uninitialized pointer read. Do you have an
example that the code would read past what it should?
> 1. var_decl: Declaring variable "shaders" without initializer.
> 86 struct ilo_shader *shaders[PIPE_SHADER_TYPES];
> 87 int num_shaders = 0, i;
> 88
> 2. Condition "i < 4", taking true branch
> 5. Condition "i < 4", taking true branch
> 8. Condition "i < 4", taking false branch
> 89 for (i = 0; i < PIPE_SHADER_TYPES; i++) {
> 90 /* no state bound */
> 3. Condition "!sh[i].state", taking true branch
> 6. Condition "!sh[i].state", taking true branch
> 91 if (!sh[i].state)
> 4. Continuing loop
> 7. Continuing loop
> 92 continue;
> 93
> 94 /* switch variant if the shader or the states it depends on changed */
> 95 if (ilo->dirty & (sh[i].dirty | sh[i].deps)) {
> 96 struct ilo_shader_variant variant;
> 97
> 98 ilo_shader_variant_init(&variant, &sh[i].state->info, ilo);
> 99 ilo_shader_state_use_variant(sh[i].state, &variant);
> 100 }
> 101
> 102 shaders[num_shaders++] = sh[i].state->shader;
> 103 }
> 104
> Uninitialized pointer read (UNINIT)
> 9. uninit_use_in_call: Using uninitialized element of array
> "shaders" when calling "ilo_shader_cache_set(struct ilo_shader_cache
> *, struct ilo_shader **, int)".
> 105 ilo_shader_cache_set(ilo->shader_cache, shaders, num_shaders);
> /src/gallium/drivers/ilo/ilo_shader.c
> 556ilo_shader_cache_set(struct ilo_shader_cache *shc,
> 557 struct ilo_shader **shaders,
> 558 int num_shaders)
> 559{
> 560 int new_cur, i;
> 561
> 562 /* calculate the space needed */
> 563 new_cur = shc->cur;
> 1. Condition "i < num_shaders", taking true branch
> 564 for (i = 0; i < num_shaders; i++) {
> 2. read_parm: Reading a parameter value.
> 565 if (shaders[i]->cache_seqno != shc->seqno)
> 566 new_cur = align(new_cur, 64) + shaders[i]->kernel_size;
> 567 }
>
>
>>> Signed-off-by: Vinson Lee <vlee at freedesktop.org>
>>> ---
>>> src/gallium/drivers/ilo/ilo_state.c | 2 +-
>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/src/gallium/drivers/ilo/ilo_state.c b/src/gallium/drivers/ilo/ilo_state.c
>>> index 33da429..f071292 100644
>>> --- a/src/gallium/drivers/ilo/ilo_state.c
>>> +++ b/src/gallium/drivers/ilo/ilo_state.c
>>> @@ -83,7 +83,7 @@ finalize_shader_states(struct ilo_context *ilo)
>>> .deps = 0,
>>> },
>>> };
>>> - struct ilo_shader *shaders[PIPE_SHADER_TYPES];
>>> + struct ilo_shader *shaders[PIPE_SHADER_TYPES] = { 0 };
>>> int num_shaders = 0, i;
>>>
>>> for (i = 0; i < PIPE_SHADER_TYPES; i++) {
>>> --
>>> 1.8.2.1
>>>
>>> _______________________________________________
>>> mesa-dev mailing list
>>> mesa-dev at lists.freedesktop.org
>>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>>
>>
>>
>> --
>> olv at LunarG.com
--
olv at LunarG.com
More information about the mesa-dev
mailing list