Any word on this? Thanks, Myles
On Mon, Jun 17, 2013 at 12:09 PM, Myles C. Maxfield < myles.maxfi...@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 <my...@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 <bri...@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 >> >> >> >> >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev