[Mesa-dev] [PATCH] radeon: fixed division by zero

Marek Olšák maraeo at gmail.com
Wed May 18 16:16:48 UTC 2016


I guess Coverity doesn't know that rand() can't return a negative number.

Marek

On Wed, May 18, 2016 at 4:08 PM, Nicolai Hähnle <nhaehnle at gmail.com> wrote:
> On 18.05.2016 08:17, Jakob Sinclair wrote:
>>
>> In the function r600_test_dma the max_width and max_height can be set to
>> zero.
>
>
> Thanks for looking into that. Can they really? I see
>
>         max_width = MIN2(tsrc.width0, tdst.width0);
>         max_height = MIN2(tsrc.height0, tdst.height0);
>
> and
>
>         tsrc.width0 = (rand() % max_tex_side_gen) + 1;
>
> and similarly for tdst.
>
> Given that, I'd prefer instead an assert(max_width > 0 && max_height > 0) to
> help Coverity out.
>
> Thanks,
> Nicolai
>
>
>> These variables are later used to do a modulo operation which can
>> lead to unexpected behavior if they are zero. This patch corrects that
>> by first checking if the max_width or max_height are zero and if they
>> are it sets width or height to one. Issue was discoverd by Coverity.
>>
>> CID: 1361542, 1361543
>>
>> Signed-off-by: Jakob Sinclair <sinclair.jakob at openmailbox.org>
>> ---
>>   src/gallium/drivers/radeon/r600_test_dma.c | 11 +++++++++--
>>   1 file changed, 9 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/gallium/drivers/radeon/r600_test_dma.c
>> b/src/gallium/drivers/radeon/r600_test_dma.c
>> index c203b4d..37d6202 100644
>> --- a/src/gallium/drivers/radeon/r600_test_dma.c
>> +++ b/src/gallium/drivers/radeon/r600_test_dma.c
>> @@ -345,8 +345,15 @@ void r600_test_dma(struct r600_common_screen
>> *rscreen)
>>                                         dstx = rand() % (tdst.width0 -
>> width + 1) & ~0x7;
>>                                         dsty = rand() % (tdst.height0 -
>> height + 1) & ~0x7;
>>                                 } else {
>> -                                       width = (rand() % max_width) + 1;
>> -                                       height = (rand() % max_height) +
>> 1;
>> +                                       if (max_width == 0)
>> +                                               width = 1;
>> +                                       else
>> +                                               width = (rand() %
>> max_width) + 1;
>> +
>> +                                       if (max_height == 0)
>> +                                               height = 1;
>> +                                       else
>> +                                               height = (rand() %
>> max_height) + 1;
>>
>>                                         srcx = rand() % (tsrc.width0 -
>> width + 1);
>>                                         srcy = rand() % (tsrc.height0 -
>> height + 1);
>>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list