[Mesa-dev] [PATCH] prog_parameter.c ASAN Patch
Myles C. Maxfield
myles.maxfield at gmail.com
Fri Jun 28 12:04:19 PDT 2013
Friendly ping regarding this patch :-)
--Myles
On Wed, Jun 19, 2013 at 12:47 AM, Myles C. Maxfield <
myles.maxfield at gmail.com> wrote:
> Any word on this?
>
> Thanks,
> Myles
>
>
> On Mon, Jun 17, 2013 at 12:09 PM, Myles C. Maxfield <
> myles.maxfield at gmail.com> wrote:
>
>> Sure. I was under the impression that |size| couldn't be both greater
>> than 4 and a non-multiple of 4, but I've reworked the patch to incorporate
>> this and to be a little more straightforward.
>>
>> Is the only way to replace "ASAN" with "Address Sanitizer" to change the
>> subject of this email thread?
>>
>> Anyway, here's a similar but modified patch:
>>
>> From: Myles C. Maxfield <mymax at amazon.com>
>> Date: Mon, 17 Jun 2013 11:50:05 -0700
>> Subject: [PATCH] Appeasing Address Sanitizer
>>
>> ---
>> src/mesa/program/prog_parameter.c | 13 ++++++++++++-
>> 1 file changed, 12 insertions(+), 1 deletion(-)
>>
>> diff --git a/src/mesa/program/prog_parameter.c
>> b/src/mesa/program/prog_parameter.c
>> index 95b153e..1d46476 100644
>> --- a/src/mesa/program/prog_parameter.c
>> +++ b/src/mesa/program/prog_parameter.c
>> @@ -155,7 +155,18 @@ _mesa_add_parameter(struct gl_program_parameter_list
>> *paramList,
>> p->Size = size;
>> p->DataType = datatype;
>> if (values) {
>> - COPY_4V(paramList->ParameterValues[oldNum + i], values);
>> + if (size >= (i+1)*4) {
>> + COPY_4V(paramList->ParameterValues[oldNum + i], values);
>> + } else {
>> + /* silence asan */
>> + for (j = 0; j < 4; j++) {
>> + if (i*4+j < size) {
>> + paramList->ParameterValues[oldNum + i][j] =
>> values[i*4+j];
>> + } else {
>> + paramList->ParameterValues[oldNum + i][j].f =
>> 0.0f;
>> + }
>> + }
>> + }
>> values += 4;
>> p->Initialized = GL_TRUE;
>> }
>> --
>> 1.7.12.4 (Apple Git-37)
>>
>>
>> On Mon, Jun 17, 2013 at 8:13 AM, Brian Paul <brianp at vmware.com> wrote:
>>
>>> On 06/14/2013 05:12 PM, Myles C. Maxfield wrote:
>>>
>>>> Sorry for the triple post; I received a bounce email the first time and
>>>> got sent to the spam folder the second time, so I'm trying a third time.
>>>>
>>>> Hello, all. I was running Mesa with Address Sanitizer [1] turned on,
>>>> and found one place where ASAN pointed out a read-before-initialized
>>>> problem. In particular, in _mesa_add_parameter, in prog_parameter.c,
>>>> |values| represents an array holding a variable number of values. These
>>>> values get copied out of the array 4 at a time with the COPY_4V macro,
>>>> however, the array might only contain a single element. In this case, ASAN
>>>> reports a read-before-initialize because the last 3 of the 4 elements
>>>> haven't been written to yet. I was hoping to contribute a patch that will
>>>> silence this problem that ASAN reports. I'm happy to incorporate any
>>>> feedback anyone has into this patch.
>>>>
>>>> Thanks,
>>>> Myles C. Maxfield
>>>>
>>>> [1]https://code.google.com/p/**address-sanitizer/<https://code.google.com/p/address-sanitizer/>
>>>>
>>>> diff --git a/src/mesa/program/prog_**parameter.c
>>>> b/src/mesa/program/prog_**parameter.c
>>>> index 2018fa5..63915fb 100644
>>>> --- a/src/mesa/program/prog_**parameter.c
>>>> +++ b/src/mesa/program/prog_**parameter.c
>>>> @@ -158,7 +158,17 @@ _mesa_add_parameter(struct
>>>> gl_program_parameter_list *paramList,
>>>> p->DataType = datatype;
>>>> p->Flags = flags;
>>>> if (values) {
>>>> - COPY_4V(paramList->**ParameterValues[oldNum + i], values);
>>>> + if (size & 3) {
>>>> + for (j = 0; j < size; j++) {
>>>> + paramList->ParameterValues[**oldNum + i][j] =
>>>> values[j];
>>>> + }
>>>> + /* silence asan */
>>>> + for (j = size; j < 4; j++) {
>>>> + paramList->ParameterValues[**oldNum + i][j].f = 0;
>>>> + }
>>>> + } else {
>>>> + COPY_4V(paramList->**ParameterValues[oldNum + i],
>>>> values);
>>>> + }
>>>> values += 4;
>>>> p->Initialized = GL_TRUE;
>>>> }
>>>>
>>>
>>> The value of 'size' can actually be greater than 4 (IIRC, and the
>>> function comment are still correct). For example, for a matrix, size=16.
>>> So the first for-loop should be fixed, just to be safe.
>>>
>>> In the commit message, let's not use "ASAN" since it's not obvious that
>>> it means Address Sanitizer.
>>>
>>> -Brian
>>>
>>>
>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20130628/32b4178d/attachment.html>
More information about the mesa-dev
mailing list