llvm-project/compiler-rt/lib/asan
Etienne Bergeron 58ee3b786d [compiler-rt][asan] Fix overlaping parameters for memmove/memcpy on windows.
Summary:
On windows, memmove and memcpy may be the same functions (on 64-bits).

```
-- f:\dd\vctools\crt\vcruntime\src\string\amd64\memcpy.asm --------------------

        OPTION PROLOGUE:NONE, EPILOGUE:NONE

        memmove = memcpy
        mov     r11, rcx                ; save destination address
```


This is causing ASAN to report overlaping parameters when instrumenting chromium.

```
D:\src\chromium\src>out\asan64\chrome.exe --no-sandbox
[8956:6208:1121/162511:ERROR:entry.cc(167)] Entry::Deserialize: dictionary has no interface_provider_specs key
[8956:11560:1121/162511:ERROR:external_registry_loader_win.cc(130)] Missing value path for key Software\Google\Chrome\Ex
tensions\doeiiacdhfmpdeckdaifnjaemmkkdlkf.
=================================================================
==5132==ERROR: AddressSanitizer: memcpy-param-overlap: memory ranges [0x000000237ee8,0x000000237eea) and [0x000000237ee9
, 0x000000237eeb) overlap
```

The error triggered on chromium:
```
Child-SP          RetAddr           Call Site
00000000`00166520 00000001`400a4886 chrome!__asan::ReportStringFunctionMemoryRangesOverlap+0x23 [d:\src\llvm\llvm\projects\compiler-rt\lib\asan\asan_report.cc @ 305]
*** WARNING: Unable to verify checksum for D:\src\chromium\src\out\asan64dynamic\libglesv2.dll
00000000`001672a0 000007fe`e1859607 chrome!__asan_wrap_memcpy+0xf6 [d:\src\llvm\llvm\projects\compiler-rt\lib\asan\asan_interceptors.cc @ 458]
00000000`00167b30 000007fe`e184bcbc libglesv2!__acrt_fp_strflt_to_string+0xb7 [d:\th\minkernel\crts\ucrt\src\appcrt\convert\_fptostr.cpp @ 86]
(Inline Function) --------`-------- libglesv2!fp_format_f+0x57 [d:\th\minkernel\crts\ucrt\src\appcrt\convert\cvt.cpp @ 578]
00000000`00167b60 000007fe`e182e2a2 libglesv2!__acrt_fp_format+0x180 [d:\th\minkernel\crts\ucrt\src\appcrt\convert\cvt.cpp @ 722]
00000000`00167bf0 000007fe`e182ce80 libglesv2!__crt_stdio_output::output_processor<char,__crt_stdio_output::stream_output_adapter<char>,__crt_stdio_output::format_validation_
```


This bug is similar to: https://llvm.org/bugs/show_bug.cgi?id=16362

Reviewers: rnk, zaks.anna, filcab

Subscribers: filcab, kubabrecka, chrisha, llvm-commits, dberris

Differential Revision: https://reviews.llvm.org/D27052

llvm-svn: 289063
2016-12-08 15:53:33 +00:00
..
scripts [asan] Fix asan-rt bitness issues in asan_device_setup on Android. 2016-11-08 00:59:58 +00:00
tests [asan] Allow re-exec in instrumented unit tests on Darwin (fix unit tests on macOS <=10.10) 2016-11-30 00:46:04 +00:00
.clang-format Tell clang-format that (most) sanitizers are written using Google style guide. 2015-11-19 22:11:10 +00:00
CMakeLists.txt [asan/win] Fix incremental linking vs. global registration 2016-11-23 17:37:00 +00:00
README.txt [ASan] Fix the links to bugs and wikipages. 2015-12-04 17:37:40 +00:00
asan.syms.extra [ASan] ASan can be combined with LSan and UBSan, so export symbol from them as well. 2013-10-23 15:36:22 +00:00
asan_activation.cc Return memory to OS right after free (not in the async thread). 2016-11-29 00:22:50 +00:00
asan_activation.h [ASan] Change activation strategy. 2014-12-19 20:35:53 +00:00
asan_activation_flags.inc Return memory to OS right after free (not in the async thread). 2016-11-29 00:22:50 +00:00
asan_allocator.cc Return memory to OS right after free (not in the async thread). 2016-11-29 00:22:50 +00:00
asan_allocator.h Return memory to OS right after free (not in the async thread). 2016-11-29 00:22:50 +00:00
asan_blacklist.txt Ignore stack-buffer-overflow in std::_Find_elem<*> / std::num_get<...>::_Getifld 2014-05-07 14:40:23 +00:00
asan_debugging.cc [asan] Add a new AddressDescription structure, which can describe any type of address. 2016-09-09 20:43:20 +00:00
asan_descriptions.cc [asan] Fix GlobalAddressDescription::Print() 2016-09-20 20:33:18 +00:00
asan_descriptions.h [asan] Reify ErrorGeneric 2016-09-21 20:18:18 +00:00
asan_errors.cc [asan] Provide bug descriptions for all reports (not just ErrorGeneric) 2016-11-28 21:18:15 +00:00
asan_errors.h [asan] Provide bug descriptions for all reports (not just ErrorGeneric) 2016-11-28 21:18:15 +00:00
asan_fake_stack.cc fix random typos [NFC] 2016-08-05 18:49:08 +00:00
asan_fake_stack.h fix random typos [NFC] 2016-08-05 18:49:08 +00:00
asan_flags.cc [sanitizer] Add strchr* to the common interceptors 2016-03-21 21:36:17 +00:00
asan_flags.h [Sanitizer] Change InitializeFlags() signatures. NFC. 2015-02-12 00:36:42 +00:00
asan_flags.inc [asan] Add a "dump_registers" flag to print out CPU registers after a SIGSEGV 2016-11-26 00:50:08 +00:00
asan_globals.cc [asan/win] Skip incremental linker padding during unregistration 2016-11-23 18:28:04 +00:00
asan_globals_win.cc [asan/win] Check assumptions about the incremental linker more 2016-11-23 18:02:16 +00:00
asan_globals_win.h [asan] Create a .ASAN$G(A-Z) section for global registration 2016-11-17 19:02:53 +00:00
asan_init_version.h [asan] Add runtime support for __asan_(un)register_image_globals 2016-03-28 20:28:17 +00:00
asan_interceptors.cc [compiler-rt][asan] Fix overlaping parameters for memmove/memcpy on windows. 2016-12-08 15:53:33 +00:00
asan_interceptors.h [asan] Add __strdup interceptor. 2016-04-20 22:45:23 +00:00
asan_interface_internal.h [compiler-rt] Add support for the dynamic shadow allocation 2016-09-30 17:47:34 +00:00
asan_internal.h [asan] Reify ErrorDeadlySignal 2016-09-08 12:58:15 +00:00
asan_linux.cc [asan] Add exception handler to map memory on demand on Win64. 2016-07-11 21:40:59 +00:00
asan_lock.h
asan_mac.cc [asan] Add exception handler to map memory on demand on Win64. 2016-07-11 21:40:59 +00:00
asan_malloc_linux.cc [asan, msan] Fix reallocation logic when IsInDlsymAllocPool(ptr) is true. 2016-09-26 08:11:21 +00:00
asan_malloc_mac.cc [ASan] Retire mac_ignore_invalid_free, remove some dead code. 2015-12-04 16:17:55 +00:00
asan_malloc_win.cc Fix _recalloc redefinition link error in ASan RTL 2016-10-11 23:13:13 +00:00
asan_mapping.h [asan] Reapply: Switch to using dynamic shadow offset on iOS 2016-10-05 20:33:59 +00:00
asan_memory_profile.cc [asan] minor fix in the asan memory profile 2016-08-23 18:13:51 +00:00
asan_new_delete.cc [asan] Add C++17 aligned new/delete entrypoints. Patch by Jakub Jelinek, see https://reviews.llvm.org/D24771 2016-09-20 21:27:10 +00:00
asan_poisoning.cc Release memory to OS only when the requested range covers the entire page 2016-11-30 20:41:59 +00:00
asan_poisoning.h Release memory to OS only when the requested range covers the entire page 2016-11-30 20:41:59 +00:00
asan_posix.cc [asan] Handle SIGBART signal description. (found by buildbot) 2016-09-08 13:28:26 +00:00
asan_preinit.cc [asan] Revert r221882. 2014-11-14 13:02:28 +00:00
asan_report.cc [asan] Provide bug descriptions for all reports (not just ErrorGeneric) 2016-11-28 21:18:15 +00:00
asan_report.h [asan] Add a new AddressDescription structure, which can describe any type of address. 2016-09-09 20:43:20 +00:00
asan_rtl.cc [asan] Refactor shadow memory initialization out of AsanInitInternal [NFC] 2016-11-28 21:40:41 +00:00
asan_scariness_score.h Split ScarinessScore between its "storage" (POD), and an initializing object. 2016-08-30 17:08:47 +00:00
asan_stack.cc [ASan] Allow to atomically modify malloc_context_size at runtime. 2014-12-16 01:23:03 +00:00
asan_stack.h [LSAN] Fix test swapcontext.cc on MIPS 2016-05-18 06:09:26 +00:00
asan_stats.cc [ASan] Clean up obsolete stats. 2015-06-26 19:18:02 +00:00
asan_stats.h [ASan] Clean up obsolete stats. 2015-06-26 19:18:02 +00:00
asan_suppressions.cc [scan-build] fix logic error warning emitted on compiler-rt code base 2016-05-02 19:07:20 +00:00
asan_suppressions.h [asan] add suppressions for odr violations 2015-02-25 00:49:12 +00:00
asan_thread.cc [ASAN] Pass previous stack information through __sanitizer_finish_switch_fiber 2016-09-28 12:28:16 +00:00
asan_thread.h [ASAN] Pass previous stack information through __sanitizer_finish_switch_fiber 2016-09-28 12:28:16 +00:00
asan_win.cc [asan] Create a .ASAN$G(A-Z) section for global registration 2016-11-17 19:02:53 +00:00
asan_win_dll_thunk.cc [sanitizers] __sanitizer_get_module_and_offset_for_pc interface function 2016-12-05 21:45:14 +00:00
asan_win_dynamic_runtime_thunk.cc [asan] Create a .ASAN$G(A-Z) section for global registration 2016-11-17 19:02:53 +00:00

README.txt

AddressSanitizer RT
================================
This directory contains sources of the AddressSanitizer (ASan) runtime library.

Directory structure:
README.txt       : This file.
Makefile.mk      : File for make-based build.
CMakeLists.txt   : File for cmake-based build.
asan_*.{cc,h}    : Sources of the asan runtime library.
scripts/*        : Helper scripts.
tests/*          : ASan unit tests.

Also ASan runtime needs the following libraries:
lib/interception/      : Machinery used to intercept function calls.
lib/sanitizer_common/  : Code shared between various sanitizers.

ASan runtime currently also embeds part of LeakSanitizer runtime for
leak detection (lib/lsan/lsan_common.{cc,h}).

ASan runtime can only be built by CMake. You can run ASan tests
from the root of your CMake build tree:

make check-asan

For more instructions see:
https://github.com/google/sanitizers/wiki/AddressSanitizerHowToBuild