[cfe-dev] AddressSanitizer suppressions enhancement

Gaurav Malhotra malhotrag at gmail.com
Tue May 12 02:53:36 PDT 2015


Thanks Alexey. It might be a few days before I'm able to send the review
out.

~Gaurav

On Tue, May 12, 2015 at 4:17 AM, Alexey Samsonov <vonosmas at gmail.com> wrote:

> Hi Gaurav,
>
> Yes, I think this change makes sense. Please follow the process described
> in http://llvm.org/docs/Phabricator.html.
> You can list me (samsonov) as a reviewer, and cc llvm-commits in the
> review. Make sure to add a test case.
>
>
> On Mon, May 11, 2015 at 7:09 AM, Gaurav Malhotra <malhotrag at gmail.com>
> wrote:
>
>> Hi,
>>
>> I've very recently started looking at clang+ASan to sanitize my
>> application. I discovered that the run time suppressions support added by
>> http://reviews.llvm.org/D6280 does not suppress memcpy-param-overlap
>> (and other *-param-overlap) errors. I want to suppress these errors from a
>> library that I cannot recompile.
>>
>> I looked at the code in asan_interceptors.cc and it seems to me that the
>> suppressions mechanism used for ASAN_READ_RANGE and ASAN_WRITE_RANGE can
>> easily be extended to CHECK_RANGES_OVERLAP. I made those code changes and
>> recompiled clang and everything seems to be working as I expected. The
>> essence of my changes is listed at the bottom of this email.
>>
>> Is this change appropriate? If yes, what is the process to get this code
>> committed?
>>
>> Thanks and Regards,
>> Gaurav Malhotra
>>
>> P.S. Here is the code change I made to CHECK_RANGES_OVERLAP. This was
>> accompanied by changes to all the callers of this macro to pass the
>> AsanInterceptorContext pointer that they already have.
>>
>> --- a/lib/asan/asan_interceptors.cc
>> +++ b/lib/asan/asan_interceptors.cc
>> @@ -82,13 +82,24 @@ static inline bool RangesOverlap(const char *offset1,
>> uptr length1,
>>                                   const char *offset2, uptr length2) {
>>    return !((offset1 + length1 <= offset2) || (offset2 + length2 <=
>> offset1));
>>  }
>> -#define CHECK_RANGES_OVERLAP(name, _offset1, length1, _offset2, length2)
>> do { \
>> +#define CHECK_RANGES_OVERLAP(ctx, name, _offset1, length1, _offset2,
>> length2) do { \
>>    const char *offset1 = (const char*)_offset1; \
>>    const char *offset2 = (const char*)_offset2; \
>>    if (RangesOverlap(offset1, length1, offset2, length2)) { \
>> -    GET_STACK_TRACE_FATAL_HERE; \
>> -    ReportStringFunctionMemoryRangesOverlap(name, offset1, length1, \
>> -                                            offset2, length2, &stack); \
>> +      AsanInterceptorContext *_ctx = (AsanInterceptorContext *)ctx;     \
>> +      bool suppressed = false;                                          \
>> +      if (_ctx) {                                                       \
>> +        suppressed = IsInterceptorSuppressed(_ctx->interceptor_name);   \
>> +        if (!suppressed && HaveStackTraceBasedSuppressions()) {         \
>> +          GET_STACK_TRACE_FATAL_HERE;                                   \
>> +          suppressed = IsStackTraceSuppressed(&stack);                  \
>> +        }                                                               \
>> +      }                                                                 \
>> +      if (!suppressed) {                                                \
>> +        GET_STACK_TRACE_FATAL_HERE;                                     \
>> +        ReportStringFunctionMemoryRangesOverlap(name, offset1, length1, \
>> +                                             offset2, length2, &stack); \
>> +      }                                                                 \
>>
>
> Looks like a lot of this code is copied from the ACCESS_MEMORY_RANGE
> implementation. You would
> probably want to reduce a copy-paste by pulling out functionality to a
> separate macro.
>
>
>>    } \
>>  } while (0)
>>
>>
>>
>> _______________________________________________
>> cfe-dev mailing list
>> cfe-dev at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>>
>>
>
>
> --
> Alexey Samsonov
> vonosmas at gmail.com
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20150512/a8eb0ca0/attachment.html>


More information about the cfe-dev mailing list