[Mesa-dev] [PATCH] llvmpipe: fix overflow bug in total texture size computation

Brian Paul brianp at vmware.com
Wed Sep 19 15:53:28 PDT 2012


The particular failing case was a 1024^3 3D texture.  1024*1024*1024*4 
(RGBA) = 4GB which overflows to zero in a 32-bit uint.

The limit used to be 512^3 but Jose bumped it up in commit bc8509b4.

I think we could look if the img_stride is > 1024 then do an alternate 
computation in kilobytes instead of bytes...

-Brian


On 09/19/2012 04:47 PM, Roland Scheidegger wrote:
> Good catch.
> I'm not sure though using size_t casts (and size_t sized total_value)
> is good enough since this could also be hit on archs using 32bit size_t?
> Though i guess using 64bit arithmetic on 32bit would be sort of slow...
>
> Roland
>
>
> Am 19.09.2012 21:30, schrieb Brian Paul:
>> Add size_t casts when multiplying slice size by number of slices to
>> avoid 32-bit uint overflow.  This bug has been here for a long time.
>> But before the recent proxy texture changes, core Mesa was detecting
>> that the texture was too large and we never got this far.
>>
>> Fixes https://bugs.freedesktop.org/show_bug.cgi?id=55117
>> ---
>>   src/gallium/drivers/llvmpipe/lp_texture.c |    4 +++-
>>   1 files changed, 3 insertions(+), 1 deletions(-)
>>
>> diff --git a/src/gallium/drivers/llvmpipe/lp_texture.c b/src/gallium/drivers/llvmpipe/lp_texture.c
>> index c0a612c..0aa1299 100644
>> --- a/src/gallium/drivers/llvmpipe/lp_texture.c
>> +++ b/src/gallium/drivers/llvmpipe/lp_texture.c
>> @@ -172,7 +172,9 @@ llvmpipe_texture_layout(struct llvmpipe_screen *screen,
>>            }
>>         }
>>
>> -      total_size += lpr->num_slices_faces[level] * lpr->img_stride[level];
>> +      total_size += (size_t) lpr->num_slices_faces[level]
>> +                  * (size_t) lpr->img_stride[level];
>> +
>>         if (total_size>  LP_MAX_TEXTURE_SIZE) {
>>            goto fail;
>>         }
>>
>
> _______________________________________________
> 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