Reviewed-by: Albert Freeman <albertwdfree...@gmail.com>

On 27 September 2015 at 09:41, Albert Freeman <albertwdfree...@gmail.com> wrote:
> On 27 September 2015 at 09:35, Ilia Mirkin <imir...@alum.mit.edu> wrote:
>> On Sat, Sep 26, 2015 at 7:29 PM, Albert Freeman
>> <albertwdfree...@gmail.com> wrote:
>>> On 27 September 2015 at 03:46, Ilia Mirkin <imir...@alum.mit.edu> wrote:
>>>> Found by Coverity
>>>>
>>>> Signed-off-by: Ilia Mirkin <imir...@alum.mit.edu>
>>>> ---
>>>>  src/gallium/auxiliary/util/u_blitter.c | 2 +-
>>>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>>>
>>>> diff --git a/src/gallium/auxiliary/util/u_blitter.c 
>>>> b/src/gallium/auxiliary/util/u_blitter.c
>>>> index 2fbf69c..b7b1ece 100644
>>>> --- a/src/gallium/auxiliary/util/u_blitter.c
>>>> +++ b/src/gallium/auxiliary/util/u_blitter.c
>>>> @@ -2065,7 +2065,7 @@ void util_blitter_clear_buffer(struct 
>>>> blitter_context *blitter,
>>>>     struct blitter_context_priv *ctx = (struct 
>>>> blitter_context_priv*)blitter;
>>>>     struct pipe_context *pipe = ctx->base.pipe;
>>>>     struct pipe_vertex_buffer vb = {0};
>>>> -   struct pipe_stream_output_target *so_target;
>>>> +   struct pipe_stream_output_target *so_target = NULL;
>>>>     unsigned offsets[PIPE_MAX_SO_BUFFERS] = {0};
>>>>
>>>>     assert(num_channels >= 1);
>>>> --
>>>> 2.4.9
>>>>
>>>> _______________________________________________
>>>> mesa-dev mailing list
>>>> mesa-dev@lists.freedesktop.org
>>>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>>> "so_target = pipe->create_stream_output_target(pipe, dst, offset,
>>> size);" unconditionally assigns to so_target before first use (unless
>>> I am reading something incorrectly).
>>>
>>
>>    u_upload_data(ctx->upload, 0, num_channels*4, clear_value,
>>                  &vb.buffer_offset, &vb.buffer);
>>    if (!vb.buffer)
>>       goto out;
>> ...
>>    so_target = pipe->create_stream_output_target(pipe, dst, offset, size);
>> ...
>> out:
>> ...
>>    pipe_so_target_reference(&so_target, NULL);
>>
>> If the goto out is taken, then &so_target gets unreferenced. This is
>> done by (roughly speaking) freeing the pointer that gets passed in,
>> and then assigning it to NULL.
>>
>>> Perhaps all function pointers that don't get implemented by a driver
>>> should be zeroed? I am trying to think where this could be done (in
>>> the gallium drivers themselves? (although that doesn’t seem the ideal
>>> solution)). Perhaps in a function that is part of gallium itself
>>> (outside drivers/[state trackers]/etc) that gets called upon driver
>>> shared library load.
>>
>> Most things are calloc'd and are thus initialized to null. Not sure
>> what that has to do with this issue though.
>>
>>   -ilia
> Sorry, I was referencing slightly outdated mesa git code (without the goto).
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to