summaryrefslogtreecommitdiffstats
path: root/compiler-rt/lib/cfi
Commit message (Collapse)AuthorAgeFilesLines
* Improve error message when '=' is missing in {ASAN,...}_OPTIONS.Vitaly Buka2019-06-151-2/+2
| | | | | | | | | | | | | | | | | | Summary: It's handling isses as described here: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89832 Patch by Martin Liška. Reviewers: kcc, vitalybuka Reviewed By: vitalybuka Subscribers: cryptoad, kubamracek Differential Revision: https://reviews.llvm.org/D59876 llvm-svn: 363480
* cfi: Rename source file from cc to cppNico Weber2019-02-282-2/+4
| | | | | | See discussion on https://reviews.llvm.org/D58620 for the review. llvm-svn: 355144
* [sanitizer] Decorate /proc/self/maps better.Evgeniy Stepanov2019-02-061-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | Summary: Refactor the way /proc/self/maps entries are annotated to support most (all?) posix platforms, with a special implementation for Android. Extend the set of decorated Mmap* calls. Replace shm_open with internal_open("/dev/shm/%s"). Shm_open is problematic because it calls libc open() which may be intercepted. Generic implementation has limits (max number of files under /dev/shm is 64K on my machine), which can be conceivably reached when sanitizing multiple programs at once. Android implemenation is essentially free, and enabled by default. The test in sanitizer_common is copied to hwasan and not reused directly because hwasan fails way too many common tests at the moment. Reviewers: pcc, vitalybuka Subscribers: srhines, kubamracek, jfb, llvm-commits, kcc Differential Revision: https://reviews.llvm.org/D57720 llvm-svn: 353255
* Update the file headers across all of the LLVM projects in the monorepoChandler Carruth2019-01-191-4/+3
| | | | | | | | | | | | | | | | | to reflect the new license. We understand that people may be surprised that we're moving the header entirely to discuss the new license. We checked this carefully with the Foundation's lawyer and we believe this is the correct approach. Essentially, all code in the project is now made available by the LLVM project under our new license, so you will see that the license headers include that license only. Some of our contributors have contributed code under our old license, and accordingly, we have retained a copy of our old license notice in the top-level files in each project and repository. llvm-svn: 351636
* Unbreak linux cfi buildDavid Carlier2018-10-011-0/+1
| | | | llvm-svn: 343512
* [Cfi] Compiling cfi library on FreeBSD and NetBSDDavid Carlier2018-10-012-7/+34
| | | | | | | | | | | | Making the library slighty more portable. Reviewers: vitalybuka, krytarowski Reviewed By: vitalybuka Differential Revision: https://reviews.llvm.org/D51682 llvm-svn: 343510
* cfi: Remove blacklist entries for libc++.Peter Collingbourne2018-08-151-4/+2
| | | | | | | These functions have had no-CFI annotations in the source code for a while now. llvm-svn: 339800
* Fix warnings in a static assert added to CFI.Chandler Carruth2018-07-161-1/+2
| | | | llvm-svn: 337178
* [cfi] Don't pass a uint16_t to memset. Make sure the 16-bit constant is ↵Filipe Cabecinhas2018-07-161-1/+4
| | | | | | | | | | | | appropriate for us. Reviewers: eugenis, pcc, kcc Subscribers: delcypher, #sanitizers, llvm-commits Differential Revision: https://reviews.llvm.org/D49252 llvm-svn: 337170
* [sanitizer] Build failures fixes post D45457Kostya Kortchinsky2018-04-161-0/+1
| | | | | | | | | | Summary: Adding a couple missed RTSanitizerCommonSymbolizer in makefiles. Subscribers: kubamracek, mgorny, delcypher, llvm-commits, #sanitizers Differential Revision: https://reviews.llvm.org/D45694 llvm-svn: 330134
* [sanitizer] Split coverage into separate RT in sanitizer_commonKostya Kortchinsky2018-03-221-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Summary: `sanitizer_common`'s coverage support is fairly well separated, and libcdep by default. Several sanitizers don't make use of coverage, and as far as I can tell do no benefit from the extra dependencies pulled in by the coverage public interface functions. The following sanitizers call `InitializeCoverage` explicitely: MSan, ASan, LSan, HWAsan, UBSan. On top of this, any sanitizer bundling RTUBSan should add the coverage RT as well: ASan, Scudo, UBSan, CFI (diag), TSan, MSan, HWAsan. So in the end the following have no need: DFSan, ESan, CFI, SafeStack (nolibc anyway), XRay, and the upcoming Scudo minimal runtime. I tested this with all the sanitizers check-* with gcc & clang, and in standalone on Linux & Android, and there was no issue. I couldn't test this on Mac, Fuchsia, BSDs, & Windows for lack of an environment, so adding a bunch of people for additional scrunity. I couldn't test HWAsan either. Reviewers: eugenis, vitalybuka, alekseyshl, flowerhack, kubamracek, dberris, rnk, krytarowski Reviewed By: vitalybuka, alekseyshl, flowerhack, dberris Subscribers: mgorny, delcypher, #sanitizers, llvm-commits Differential Revision: https://reviews.llvm.org/D44701 llvm-svn: 328204
* [cfi] Lazy initialization of CFI interceptorsVitaly Buka2018-02-241-3/+18
| | | | | | | | | | | | | | Summary: Interceptors initialization may need to allocate memory. So if we initialize too early we can crash in non initialized allocator. Reviewers: pcc, eugenis Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D43669 llvm-svn: 326025
* cfi: Add a blacklist entry for MSVC's std::get_temporary_buffer function.Peter Collingbourne2018-01-171-1/+3
| | | | | | Differential Revision: https://reviews.llvm.org/D42150 llvm-svn: 322607
* (NFC) Rename GetMax{,User}VirtualAddress.Evgeniy Stepanov2017-11-071-1/+1
| | | | | | | Future change will introduce GetMaxVirtualAddress that will not take the kernel area into account. llvm-svn: 317638
* Limit CFI blacklist entries to specific CFI modeVlad Tsyrklevich2017-10-091-0/+1
| | | | | | | | | | | | | | | | | Summary: Since D37924 and D37925 were merged, it's now possible to specify individual sanitizers or CFI modes in sanitizer blacklists. Update the CFI blacklist entries to only apply to cfi-unrelated-cast checks. Reviewers: eugenis, pcc Reviewed By: eugenis Subscribers: kcc Differential Revision: https://reviews.llvm.org/D38385 llvm-svn: 315216
* Make the cfi target available on more platforms.Peter Collingbourne2017-10-091-29/+31
| | | | | | | | On non-Linux targets it just installs the blacklist. Differential Revision: https://reviews.llvm.org/D38661 llvm-svn: 315215
* CFI: Move STL allocator blacklist to clangVlad Tsyrklevich2017-08-041-6/+0
| | | | | | | | | | | | | | | | | Summary: The regular expression to match STL allocators can't easily account for C++ mangling compression and fails to match some valid instances of STL allocators. Perform this logic in clang instead. Motivated by crbug.com/751385. Reviewers: pcc, kcc, llvm-commits Reviewed By: pcc Differential Revision: https://reviews.llvm.org/D36291 llvm-svn: 310109
* Remove STL/microsoft-specific CFI blacklist entriesPeter Collingbourne2017-07-311-9/+0
| | | | | | | | Patch by Vlad Tsyrklevich! Differential Revision: https://reviews.llvm.org/D35855 llvm-svn: 309617
* CFI: Add a blacklist entry for ↵Peter Collingbourne2017-05-051-0/+5
| | | | | | | | | std::_Sp_counted_ptr_inplace::_Sp_counted_ptr_inplace(). This ctor is used by std::make_shared and needs to cast to uninitialized T* in order to call std::allocator_traits<T>::construct. llvm-svn: 302272
* [cfi] Accept weak definition of __cfi_check.Evgeniy Stepanov2017-04-071-1/+2
| | | | | | | https://reviews.llvm.org/D31796 results in LLD emitting __cfi_check as a weak symbol, while Gold keeps it strong. Accept both. llvm-svn: 299804
* [cfi] Fix symbol lookup hack in cross-dso cfi to handle LLD binaries.Evgeniy Stepanov2017-04-061-2/+9
| | | | llvm-svn: 299604
* Revert "[sancov] moving sancov rt to sancov/ directory"Mike Aizatsky2017-01-121-2/+0
| | | | | | | | This reverts commit https://reviews.llvm.org/rL291734 Reason: mac breakage http://lab.llvm.org:8080/green//job/clang-stage1-configure-RA_build/28798/consoleFull#1657087648e9a0fee5-ebcc-4238-a641-c5aa112c323e llvm-svn: 291736
* [sancov] moving sancov rt to sancov/ directoryMike Aizatsky2017-01-121-0/+2
| | | | | | | | Subscribers: kubabrecka, mgorny Differential Revision: https://reviews.llvm.org/D28541 llvm-svn: 291734
* [compiler-rt] Do not introduce __sanitizer namespace globallyAnna Zaks2016-09-151-0/+2
| | | | | | | | | | | | The definitions in sanitizer_common may conflict with definitions from system headers because: The runtime includes the system headers after the project headers (as per LLVM coding guidelines). lib/sanitizer_common/sanitizer_internal_defs.h pollutes the namespace of everything defined after it, which is all/most of the sanitizer .h and .cc files and the included system headers with: using namespace __sanitizer; // NOLINT This patch solves the problem by introducing the namespace only within the sanitizer namespaces as proposed by Dmitry. Differential Revision: https://reviews.llvm.org/D21947 llvm-svn: 281657
* [CMake] Connect Compiler-RT targets to LLVM Runtimes directoryChris Bieneman2016-08-261-3/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | This patch builds on LLVM r279776. In this patch I've done some cleanup and abstracted three common steps runtime components have in their CMakeLists files, and added a fourth. The three steps I abstract are: (1) Add a top-level target (i.e asan, msan, ...) (2) Set the target properties for sorting files in IDE generators (3) Make the compiler-rt target depend on the top-level target The new step is to check if a command named "runtime_register_component" is defined, and to call it with the component name. The runtime_register_component command is defined in llvm/runtimes/CMakeLists.txt, and presently just adds the component to a list of sub-components, which later gets used to generate target mappings. With this patch a new workflow for runtimes builds is supported. The new workflow when building runtimes from the LLVM runtimes directory is: > cmake [...] > ninja runtimes-configure > ninja asan The "runtimes-configure" target builds all the dependencies for configuring the runtimes projects, and runs CMake on the runtimes projects. Running the runtimes CMake generates a list of targets to bind into the top-level CMake so subsequent build invocations will have access to some of Compiler-RT's targets through the top-level build. Note: This patch does exclude some top-level targets from compiler-rt libraries because they either don't install files (sanitizer_common), or don't have a cooresponding `check` target (stats). llvm-svn: 279863
* [compiler-rt] Fix VisualStudio virtual folders layoutEtienne Bergeron2016-07-111-0/+1
| | | | | | | | | | | | | | | | | | | | Summary: This patch is a refactoring of the way cmake 'targets' are grouped. It won't affect non-UI cmake-generators. Clang/LLVM are using a structured way to group targets which ease navigation through Visual Studio UI. The Compiler-RT projects differ from the way Clang/LLVM are grouping targets. This patch doesn't contain behavior changes. Reviewers: kubabrecka, rnk Subscribers: wang0109, llvm-commits, kubabrecka, chrisha Differential Revision: http://reviews.llvm.org/D21952 llvm-svn: 275111
* [sancov] common flags initialization.Mike Aizatsky2016-03-181-1/+1
| | | | | | | | | | | | Summary: Introducing InitializeCommonFlags accross all sanitizers to simplify common flags management. Setting coverage=1 when html_cov_report is requested. Differential Revision: http://reviews.llvm.org/D18273 llvm-svn: 263820
* [CMake] Assign components and dependencies during add_compiler_rt_resource_fileChris Bieneman2016-02-231-2/+1
| | | | | | This makes it so that component-based installations will include resource files (i.e. blacklists). My next patch will add support for component-based installations. llvm-svn: 261699
* [cfi] Safe handling of unaddressable vtable pointers (compiler-rt).Evgeniy Stepanov2016-02-031-1/+1
| | | | | | | | | | | Avoid crashing when printing diagnostics for vtable-related CFI errors. In diagnostic mode, the frontend does an additional check of the vtable pointer against the set of all known vtable addresses and lets the runtime handler know if it is safe to inspect the vtable. http://reviews.llvm.org/D16824 llvm-svn: 259717
* Cast the fifth arg to mremap to void *Alexey Samsonov2016-02-021-1/+1
| | | | | | | | | | | | | | | | | | | | | | Summary: Since the prototype of mremap is ``` void *mremap(void *old_address, size_t old_size, size_t new_size, int flags, ... /* void *new_address*/); ``` we need to cast new_address to void * when calling mremap. Otherwise, the wrong value will be passed to mremap on x32. Patch by H.J Lu! Reviewers: kcc, eugenis, samsonov Subscribers: samsonov, llvm-commits Differential Revision: http://reviews.llvm.org/D16805 llvm-svn: 259540
* [cfi] Simplify the code in CfiSlowPathCommon.Evgeniy Stepanov2016-01-281-7/+2
| | | | llvm-svn: 259085
* [cfi] Fix recovery from out-of-bounds vtable error.Evgeniy Stepanov2016-01-281-3/+6
| | | | llvm-svn: 259007
* [cfi] Fix gcc build.Evgeniy Stepanov2016-01-271-12/+14
| | | | llvm-svn: 258977
* [cfi] Exclude __cfi_slowpath_diag from the non-diag rtl.Evgeniy Stepanov2016-01-261-1/+3
| | | | | | | Calls to __cfi_slowpath_diag are only emitted when building with diagnostics, and linking the diag rtl. llvm-svn: 258881
* [cfi] Better handling of wild target address.Evgeniy Stepanov2016-01-261-25/+56
| | | | | | | | | | | | | This change enables diagnostics when the target address for a CFI check is out of bounds of any known library, or even not in the limits of the address space. This happens when casting pointers to uninitialized memory. Ubsan code does not yet handle some of these situations correctly, so it is still possible to see a segmentation fault instead of a proper diagnostic message once in a while. llvm-svn: 258879
* [cfi] Hide runtime implementation in a namespace.Evgeniy Stepanov2016-01-261-55/+60
| | | | | | | | Move all internal stuff into namespace __cfi. Remove the double underscore prefix from anything that's now inside the namespace. llvm-svn: 258859
* [cfi] Support for dlopen and dlclose.Evgeniy Stepanov2016-01-261-41/+136
| | | | | | Add dlopen/dlclose interceptors to update CFI shadow for loaded/unloaded libraries. llvm-svn: 258857
* [cfi] Cross-DSO CFI diagnostic mode (compiler-rt part)Evgeniy Stepanov2016-01-252-7/+22
| | | | | | | | | | | | | | | * add __cfi_slowpath_diag with a 3rd parameter which is a pointer to the diagnostic info for the ubsan handlers. *__cfi_check gets a 3rd parameter as well. * unify vcall/cast/etc and icall diagnostic info format, and merge the handlers to have a single entry point (actually two points due to abort/noabort variants). * tests Note that this comes with a tiny overhead in the non-diag mode: cfi_slowpath must pass 0 as the 3rd argument to cfi_check. llvm-svn: 258744
* [cfi] Fix __cfi_slowpath and __cfi_check signature.Evgeniy Stepanov2016-01-081-3/+3
| | | | | | The first argument is uint64_t, not uintptr_t. llvm-svn: 257233
* [cfi] Fix handling of uninstrumented libraries.Evgeniy Stepanov2015-12-221-1/+1
| | | | | | CFI shadow for non-CFI libraries should be "unchecked", not "invalid". llvm-svn: 256285
* [cfi] Exclude ubsan runtime library from non-diag CFI builds.Evgeniy Stepanov2015-12-162-3/+21
| | | | | | | Split the CFI runtime in two: cfi and cfi_diag. The latter includes UBSan runtime to allow printing diagnostics. llvm-svn: 255735
* [cfi] Fix GCC build.Evgeniy Stepanov2015-12-161-2/+2
| | | | llvm-svn: 255733
* [cfi] Fix shadow sanity check.Evgeniy Stepanov2015-12-161-4/+5
| | | | | | | The current check may break if the starting address in fill_shadow is not page-aligned. llvm-svn: 255725
* Cross-DSO control flow integrity (compiler-rt part).Evgeniy Stepanov2015-12-152-0/+288
| | | | | | | | | | | | | | | | | | This is an initial version of the runtime cross-DSO CFI support library. It contains a number of FIXMEs, ex. it does not support the diagnostic mode nor dlopen/dlclose, but it works and can be tested. Diagnostic mode, in particular, would require some refactoring (we'd like to gather all CFI hooks in the UBSan library into one function so that we could easier pass the diagnostic information down to __cfi_check). It will be implemented later. Once the diagnostic mode is in, I plan to create a second test configuration to run all existing tests in both modes. For now, this patch includes only a few new cross-DSO tests. llvm-svn: 255695
* CFI: Make the cfi target a dependency of compiler-rt.Peter Collingbourne2015-09-021-0/+1
| | | | | | This causes the blacklist to be copied into place as a default build step. llvm-svn: 246617
* CFI: Add blacklist entries for various standard library functions.Peter Collingbourne2015-09-011-0/+18
| | | | llvm-svn: 246602
* CFI: Add a default blacklist.Peter Collingbourne2015-07-152-0/+11
Differential Revision: http://reviews.llvm.org/D11095 llvm-svn: 242287
OpenPOWER on IntegriCloud