[compiler-rt] r204897 - [asan] Do not sanitize kernel area on 32-bit targets, patch by Yuri Gribov

Kostya Serebryany kcc at google.com
Thu Mar 27 01:58:04 PDT 2014


Indeed, thanks!  r204903.



On Thu, Mar 27, 2014 at 12:45 PM, Alexey Samsonov <samsonov at google.com>wrote:

> Did you forget to "svn add" the new test case?
>
>
> On Thu, Mar 27, 2014 at 11:36 AM, Kostya Serebryany <kcc at google.com>wrote:
>
>> Author: kcc
>> Date: Thu Mar 27 02:36:26 2014
>> New Revision: 204897
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=204897&view=rev
>> Log:
>> [asan] Do not sanitize kernel area on 32-bit targets, patch by Yuri Gribov
>>
>> Modified:
>>     compiler-rt/trunk/lib/asan/asan_mapping.h
>>     compiler-rt/trunk/lib/asan/asan_rtl.cc
>>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc
>>     compiler-rt/trunk/test/asan/lit.cfg
>>
>> Modified: compiler-rt/trunk/lib/asan/asan_mapping.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_mapping.h?rev=204897&r1=204896&r2=204897&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/asan/asan_mapping.h (original)
>> +++ compiler-rt/trunk/lib/asan/asan_mapping.h Thu Mar 27 02:36:26 2014
>> @@ -43,13 +43,22 @@
>>  // || `[0x00007fff8000, 0x00008fff6fff]` || LowShadow  ||
>>  // || `[0x000000000000, 0x00007fff7fff]` || LowMem     ||
>>  //
>> -// Default Linux/i386 mapping:
>> +// Default Linux/i386 mapping on x86_64 machine:
>>  // || `[0x40000000, 0xffffffff]` || HighMem    ||
>>  // || `[0x28000000, 0x3fffffff]` || HighShadow ||
>>  // || `[0x24000000, 0x27ffffff]` || ShadowGap  ||
>>  // || `[0x20000000, 0x23ffffff]` || LowShadow  ||
>>  // || `[0x00000000, 0x1fffffff]` || LowMem     ||
>>  //
>> +// Default Linux/i386 mapping on i386 machine
>> +// (addresses starting with 0xc0000000 are reserved
>> +// for kernel and thus not sanitized):
>> +// || `[0x38000000, 0xbfffffff]` || HighMem    ||
>> +// || `[0x27000000, 0x37ffffff]` || HighShadow ||
>> +// || `[0x24000000, 0x26ffffff]` || ShadowGap  ||
>> +// || `[0x20000000, 0x23ffffff]` || LowShadow  ||
>> +// || `[0x00000000, 0x1fffffff]` || LowMem     ||
>> +//
>>  // Default Linux/MIPS mapping:
>>  // || `[0x2aaa8000, 0xffffffff]` || HighMem    ||
>>  // || `[0x0fffd000, 0x2aaa7fff]` || HighShadow ||
>>
>> Modified: compiler-rt/trunk/lib/asan/asan_rtl.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_rtl.cc?rev=204897&r1=204896&r2=204897&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/asan/asan_rtl.cc (original)
>> +++ compiler-rt/trunk/lib/asan/asan_rtl.cc Thu Mar 27 02:36:26 2014
>> @@ -565,6 +565,7 @@ static void AsanInitInternal() {
>>      ReserveShadowMemoryRange(kHighShadowBeg, kHighShadowEnd);
>>      // protect the gap.
>>      ProtectGap(kShadowGapBeg, kShadowGapEnd - kShadowGapBeg + 1);
>> +    CHECK_EQ(kShadowGapEnd, kHighShadowBeg - 1);
>>    } else if (kMidMemBeg &&
>>        MemoryRangeIsAvailable(shadow_start, kMidMemBeg - 1) &&
>>        MemoryRangeIsAvailable(kMidMemEnd + 1, kHighShadowEnd)) {
>>
>> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc?rev=204897&r1=204896&r2=204897&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc (original)
>> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc Thu Mar 27
>> 02:36:26 2014
>> @@ -22,6 +22,10 @@
>>
>>  #include <sys/mman.h>
>>
>> +#if SANITIZER_LINUX
>> +#include <sys/utsname.h>
>> +#endif
>> +
>>  namespace __sanitizer {
>>
>>  // ------------- sanitizer_common.h
>> @@ -29,6 +33,21 @@ uptr GetMmapGranularity() {
>>    return GetPageSize();
>>  }
>>
>> +#if SANITIZER_WORDSIZE == 32
>> +// Take care of unusable kernel area in top gigabyte
>> +static uptr GetKernelStartAddress() {
>> +#if SANITIZER_LINUX
>> +  // 64-bit Linux provides 32-bit apps with full address space
>> +  struct utsname uname_info;
>> +  return 0 == uname(&uname_info) && !internal_strstr(uname_info.machine,
>> "64")
>> +    ? 1ULL << 30
>> +    : 0;
>> +#else
>> +  return 0;
>> +#endif  // SANITIZER_LINUX
>> +}
>> +#endif  // SANITIZER_WORDSIZE == 32
>> +
>>  uptr GetMaxVirtualAddress() {
>>  #if SANITIZER_WORDSIZE == 64
>>  # if defined(__powerpc64__)
>> @@ -44,8 +63,10 @@ uptr GetMaxVirtualAddress() {
>>    return (1ULL << 47) - 1;  // 0x00007fffffffffffUL;
>>  # endif
>>  #else  // SANITIZER_WORDSIZE == 32
>> -  // FIXME: We can probably lower this on Android?
>> -  return (1ULL << 32) - 1;  // 0xffffffff;
>> +  uptr res = (1ULL << 32) - 1;  // 0xffffffff;
>> +  res -= GetKernelStartAddress();
>> +  CHECK_LT(reinterpret_cast<uptr>(&res), res);
>> +  return res;
>>  #endif  // SANITIZER_WORDSIZE
>>  }
>>
>>
>> Modified: compiler-rt/trunk/test/asan/lit.cfg
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/asan/lit.cfg?rev=204897&r1=204896&r2=204897&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/test/asan/lit.cfg (original)
>> +++ compiler-rt/trunk/test/asan/lit.cfg Thu Mar 27 02:36:26 2014
>> @@ -60,8 +60,15 @@ if not os.path.exists(asan_symbolize):
>>  python_exec = get_required_attr(config, "python_executable")
>>  config.substitutions.append( ("%asan_symbolize", python_exec + " " +
>> asan_symbolize + " ") )
>>
>> +# Determine kernel bitness
>> +if config.host_arch.find('64') != -1 and config.android != "TRUE":
>> +  kernel_bits = '64'
>> +else:
>> +  kernel_bits = '32'
>> +
>>  # Define CHECK-%os to check for OS-dependent output.
>>  config.substitutions.append( ('CHECK-%os', ("CHECK-" + config.host_os)))
>> +config.substitutions.append( ('CHECK-%kernel_bits', ("CHECK-kernel-" +
>> kernel_bits + "-bits")))
>>
>>  config.available_features.add("asan-" + config.bits + "-bits")
>>
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
>
>
>
> --
> Alexey Samsonov, MSK
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140327/656bdd87/attachment.html>


More information about the llvm-commits mailing list