llvm-project/compiler-rt/lib/sanitizer_common
Filipe Cabecinhas b7692bc3e9 [UBSan] Fix isDerivedFromAtOffset on iOS ARM64
Summary:
iOS on ARM64 doesn't unique RTTI.
Ref: clang's iOS64CXXABI::shouldRTTIBeUnique()

Due to this, pointer-equality will not necessarily work in this
architecture, across dylib boundaries.

dynamic_cast<>() will (as expected) still work, since Apple ships with
one prepared for this, but we can't rely on the type names being
pointer-equal.

I've limited the expensive strcmp check to the specific architecture
which needs it.

Example which triggers this bug:

lib.h:
  struct X {
    virtual ~X() {}
  };
  X *libCall();

lib.mm:
  X *libCall() {
    return new X;
  }

prog.mm:
  int main() {
    X *px = libCall();
    delete px;
  }

Expected output: Nothing
Actual output:
<unknown>: runtime error: member call on address 0x00017001ef50 which does not point to an object of type 'X'
0x00017001ef50: note: object is of type 'X'
 00 00 00 00  60 00 0f 00 01 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00
              ^~~~~~~~~~~~~~~~~~~~~~~
              vptr for ‘X’

Reviewers: kubabrecka, samsonov, eugenis, rsmith

Subscribers: aemerson, llvm-commits, rengolin

Differential Revision: http://reviews.llvm.org/D11502

llvm-svn: 262147
2016-02-27 19:57:44 +00:00
..
scripts [asan] Tweak gen_dynamic_list.py to work with both Py2 and Py3. 2015-10-01 18:27:28 +00:00
tests [Sanitizer] Introduce ListOfModules object and use it to replace GetListOfModules(). 2016-02-22 18:52:51 +00:00
.clang-format Tell clang-format that (most) sanitizers are written using Google style guide. 2015-11-19 22:11:10 +00:00
.clang-tidy fixed clang-tidy config 2016-01-25 19:43:55 +00:00
CMakeLists.txt Revert r252683 - "Sancov in C++." 2015-11-11 15:54:31 +00:00
sanitizer_addrhashmap.h [sanitizer] Fix Clang-tidy modernize-use-nullptr warnings in lib/sanitizer_common headers, unify closing inclusion guards. Patch by Eugene Zelenko 2015-09-29 18:23:36 +00:00
sanitizer_allocator.cc [sanitizer_common] Apply modernize-use-nullptr, other minor fixes 2015-09-30 23:52:54 +00:00
sanitizer_allocator.h [sanitizer] Fix Clang-tidy modernize-use-nullptr warnings in lib/sanitizer_common headers, unify closing inclusion guards. Patch by Eugene Zelenko 2015-09-29 18:23:36 +00:00
sanitizer_allocator_interface.h Generalize sanitizer allocator public interface. 2014-07-07 17:39:31 +00:00
sanitizer_allocator_internal.h [sanitizer] Fix Clang-tidy modernize-use-nullptr warnings in lib/sanitizer_common headers, unify closing inclusion guards. Patch by Eugene Zelenko 2015-09-29 18:23:36 +00:00
sanitizer_asm.h [tsan] Port tsan_rtl_amd64.S to OS X to add support for setjmp/longjmp 2015-11-28 12:44:23 +00:00
sanitizer_atomic.h tsan: speed up race deduplication 2015-09-03 11:20:46 +00:00
sanitizer_atomic_clang.h
sanitizer_atomic_clang_other.h
sanitizer_atomic_clang_x86.h
sanitizer_atomic_msvc.h Re-apply r241217 with build fixes: 2015-07-02 01:44:34 +00:00
sanitizer_bitvector.h Revert "Apply modernize-use-default to compiler-rt." 2015-10-30 18:52:31 +00:00
sanitizer_bvgraph.h
sanitizer_common.cc [sanitizers] extracted process management functions 2016-01-26 20:10:01 +00:00
sanitizer_common.h [Sanitizer] Protect against compiler-inserted memcpy() in InternalMmapVector::push_back(). 2016-02-25 18:12:30 +00:00
sanitizer_common_interceptors.inc [sanitizer] Fix third parameter in COMMON_INTERCEPTOR_WRITE_RANGE in recv and recvfrom interceptors. 2016-02-25 17:07:38 +00:00
sanitizer_common_interceptors_format.inc [sanitizer] Fix Clang-tidy modernize-use-nullptr warnings in lib/sanitizer_common headers, unify closing inclusion guards. Patch by Eugene Zelenko 2015-09-29 18:23:36 +00:00
sanitizer_common_interceptors_ioctl.inc [asan] Add iOS support. 2016-02-02 02:01:17 +00:00
sanitizer_common_libcdep.cc [sanitizers] Log all output to CrashReport on OS X 2016-01-06 23:15:01 +00:00
sanitizer_common_nolibc.cc Follow-up fix for r256988 to unbreak the Linux buildbot. 2016-01-07 09:14:41 +00:00
sanitizer_common_syscalls.inc [MSan] Enable MSAN for aarch64 2015-09-16 15:12:25 +00:00
sanitizer_coverage_libcdep.cc [Sanitizer] Introduce ListOfModules object and use it to replace GetListOfModules(). 2016-02-22 18:52:51 +00:00
sanitizer_coverage_mapping_libcdep.cc [Sanitizer] Introduce ListOfModules object and use it to replace GetListOfModules(). 2016-02-22 18:52:51 +00:00
sanitizer_deadlock_detector.h tsan: fix deadlock reporting 2014-12-18 14:05:34 +00:00
sanitizer_deadlock_detector1.cc [sanitizer_common] Apply modernize-use-nullptr, other minor fixes 2015-09-30 23:52:54 +00:00
sanitizer_deadlock_detector2.cc tsan: remove unnecessary line split 2014-07-08 13:07:23 +00:00
sanitizer_deadlock_detector_interface.h [sanitizer] Fix Clang-tidy modernize-use-nullptr warnings in lib/sanitizer_common headers, unify closing inclusion guards. Patch by Eugene Zelenko 2015-09-29 18:23:36 +00:00
sanitizer_flag_parser.cc [sanitizer] Implement include_if_exists with process name substitution. 2015-07-21 23:03:13 +00:00
sanitizer_flag_parser.h [sanitizer] Implement include_if_exists with process name substitution. 2015-07-21 23:03:13 +00:00
sanitizer_flags.cc Introduce stats and stats_client libraries. 2016-01-16 00:31:29 +00:00
sanitizer_flags.h Introduce stats and stats_client libraries. 2016-01-16 00:31:29 +00:00
sanitizer_flags.inc [sanitizers] generating html report on coverage dump 2016-01-27 23:51:36 +00:00
sanitizer_freebsd.h Support getting process maps for sanitizers needs on FreeBSD in 32-bit mode 2014-08-08 06:21:09 +00:00
sanitizer_interface_internal.h Asan: utility function to determine first wrongly poisoned byte in 2015-11-04 19:56:03 +00:00
sanitizer_internal_defs.h [sanitizers] extracted process management functions 2016-01-26 20:10:01 +00:00
sanitizer_lfstack.h [sanitizer] Fix Clang-tidy modernize-use-nullptr warnings in lib/sanitizer_common headers, unify closing inclusion guards. Patch by Eugene Zelenko 2015-09-29 18:23:36 +00:00
sanitizer_libc.cc [compiler-rt] Add internal implementations for strlcat and strlcpy 2015-11-20 18:42:05 +00:00
sanitizer_libc.h [compiler-rt] Add internal implementations for strlcat and strlcpy 2015-11-20 18:42:05 +00:00
sanitizer_libignore.cc Reapply r251918 ("[tsan] Fix build errors for TSan on OS X"). 2015-11-03 14:33:39 +00:00
sanitizer_libignore.h [Sanitizer] Drop LibIgnore dependency on SuppressionContext. NFC. 2015-02-19 22:56:49 +00:00
sanitizer_linux.cc [asan] Fix build on Windows and PowerPC. 2016-02-09 00:28:57 +00:00
sanitizer_linux.h Revert "[sanitizers] extracted process management functions" 2016-01-25 19:52:25 +00:00
sanitizer_linux_libcdep.cc [Sanitizer] Introduce ListOfModules object and use it to replace GetListOfModules(). 2016-02-22 18:52:51 +00:00
sanitizer_list.h Unbreak Windows build. 2016-01-15 02:51:26 +00:00
sanitizer_mac.cc [Sanitizer] Introduce ListOfModules object and use it to replace GetListOfModules(). 2016-02-22 18:52:51 +00:00
sanitizer_mac.h [sanitizers] Log all output to CrashReport on OS X 2016-01-06 23:15:01 +00:00
sanitizer_malloc_mac.inc [libsanitizer] Fix bugs and wiki links to point to GitHub. 2015-12-04 17:50:03 +00:00
sanitizer_mutex.h [Sanitizer] Make BlockingMutex really linker initialized. 2015-01-30 06:20:43 +00:00
sanitizer_persistent_allocator.cc
sanitizer_persistent_allocator.h [sanitizer] Fix Clang-tidy modernize-use-nullptr warnings in lib/sanitizer_common headers, unify closing inclusion guards. Patch by Eugene Zelenko 2015-09-29 18:23:36 +00:00
sanitizer_placement_new.h
sanitizer_platform.h [UBSan] Fix isDerivedFromAtOffset on iOS ARM64 2016-02-27 19:57:44 +00:00
sanitizer_platform_interceptors.h [sanitizer] Disable recv and recvfrom interceptors on Windows. 2016-02-25 09:36:20 +00:00
sanitizer_platform_limits_linux.cc [asan] i686-linux-android support. 2014-07-03 14:20:56 +00:00
sanitizer_platform_limits_posix.cc [asan] Old Linux kernels (< 3.0) don't define ARM_VFPREGS_SIZE that leads to 2015-11-30 09:19:22 +00:00
sanitizer_platform_limits_posix.h [compiler-rt] Enable ptrace sanitizer for arm 2015-10-26 18:15:14 +00:00
sanitizer_posix.cc [asan] Implement SEGV read vs write detection for ARM and AArch64. 2016-02-08 22:50:25 +00:00
sanitizer_posix.h [sanitizers] extracted process management functions 2016-01-26 20:10:01 +00:00
sanitizer_posix_libcdep.cc [asan] Add iOS support. 2016-02-02 02:01:17 +00:00
sanitizer_printf.cc [sanitizers] Log all output to CrashReport on OS X 2016-01-06 23:15:01 +00:00
sanitizer_procmaps.h [Sanitizer] Introduce ListOfModules object and use it to replace GetListOfModules(). 2016-02-22 18:52:51 +00:00
sanitizer_procmaps_common.cc [Sanitizer] Introduce ListOfModules object and use it to replace GetListOfModules(). 2016-02-22 18:52:51 +00:00
sanitizer_procmaps_freebsd.cc Support getting process maps for sanitizers needs on FreeBSD in 32-bit mode 2014-08-08 06:21:09 +00:00
sanitizer_procmaps_linux.cc [libsanitizer] Fix bugs and wiki links to point to GitHub. 2015-12-04 17:50:03 +00:00
sanitizer_procmaps_mac.cc [Sanitizer] Introduce ListOfModules object and use it to replace GetListOfModules(). 2016-02-22 18:52:51 +00:00
sanitizer_quarantine.h [sanitizer] Fix Clang-tidy modernize-use-nullptr warnings in lib/sanitizer_common headers, unify closing inclusion guards. Patch by Eugene Zelenko 2015-09-29 18:23:36 +00:00
sanitizer_report_decorator.h
sanitizer_stackdepot.cc [sanitizer_common] Apply modernize-use-nullptr, other minor fixes 2015-09-30 23:52:54 +00:00
sanitizer_stackdepot.h [sanitizer] Fix Clang-tidy modernize-use-nullptr warnings in lib/sanitizer_common headers, unify closing inclusion guards. Patch by Eugene Zelenko 2015-09-29 18:23:36 +00:00
sanitizer_stackdepotbase.h [sanitizer] Fix Clang-tidy modernize-use-nullptr warnings in lib/sanitizer_common headers, unify closing inclusion guards. Patch by Eugene Zelenko 2015-09-29 18:23:36 +00:00
sanitizer_stacktrace.cc [Sanitizer] Increase kPcThreshold in slow unwinder after r254395. 2015-12-01 20:58:44 +00:00
sanitizer_stacktrace.h [libsanitizer] Fix bugs and wiki links to point to GitHub. 2015-12-04 17:50:03 +00:00
sanitizer_stacktrace_libcdep.cc [sanitizer] add #ifdefs around slow unwinder to fix OS X debug build 2015-07-02 13:56:37 +00:00
sanitizer_stacktrace_printer.cc [sanitizer_common] Apply modernize-use-nullptr, other minor fixes 2015-09-30 23:52:54 +00:00
sanitizer_stacktrace_printer.h [sanitizer_common] Added VS-style output for source locations 2015-06-04 01:20:06 +00:00
sanitizer_stoptheworld.h asan: fix comment formatting 2015-03-06 08:43:44 +00:00
sanitizer_stoptheworld_linux_libcdep.cc [LSan] Print more helpful error message if LSan crashes during leak detection. 2016-02-12 20:20:51 +00:00
sanitizer_suppressions.cc [TSan] Try harder to avoid compiler-generated memset calls. 2015-12-09 18:48:10 +00:00
sanitizer_suppressions.h [UBSan] Implement runtime suppressions (PR25066). 2015-12-18 19:56:42 +00:00
sanitizer_symbolizer.cc [Sanitizer] Introduce ListOfModules object and use it to replace GetListOfModules(). 2016-02-22 18:52:51 +00:00
sanitizer_symbolizer.h [Sanitizer] Introduce ListOfModules object and use it to replace GetListOfModules(). 2016-02-22 18:52:51 +00:00
sanitizer_symbolizer_internal.h Support inline functions symbolization in Addr2Line symbolizer. 2015-09-14 23:56:42 +00:00
sanitizer_symbolizer_libbacktrace.cc Symbolizer refactoring: Turn FillAddressAndModuleInfo into FillModuleInfo 2015-03-03 09:18:44 +00:00
sanitizer_symbolizer_libbacktrace.h Provide missing Internal{Alloc, Free} declarations for libbacktrace symbolizer. 2015-10-07 23:13:28 +00:00
sanitizer_symbolizer_libcdep.cc [Sanitizer] Introduce ListOfModules object and use it to replace GetListOfModules(). 2016-02-22 18:52:51 +00:00
sanitizer_symbolizer_mac.cc [sanitizer] Detect an invalid answer in AtosSymbolizer 2015-11-30 14:12:47 +00:00
sanitizer_symbolizer_mac.h Adding the implementation of atos and dladdr symbolizers for OS X. 2015-03-12 10:53:18 +00:00
sanitizer_symbolizer_posix_libcdep.cc [sanitizers] extracted process management functions 2016-01-26 20:10:01 +00:00
sanitizer_symbolizer_win.cc Sanitizer: define WIN32_LEAN_AND_MEAN 2015-10-29 20:36:55 +00:00
sanitizer_syscall_generic.inc Unix/BSD system calls are prefixed with SYS_ on FreeBSD and Mac 2015-02-22 22:01:09 +00:00
sanitizer_syscall_linux_aarch64.inc [compiler-rt] [sanitizers] Add aarch64 syscall optimization support 2015-08-21 14:50:36 +00:00
sanitizer_syscall_linux_x86_64.inc
sanitizer_thread_registry.cc tsan: address comments in r214912 2014-09-02 09:34:34 +00:00
sanitizer_thread_registry.h [sanitizer] Fix Clang-tidy modernize-use-nullptr warnings in lib/sanitizer_common headers, unify closing inclusion guards. Patch by Eugene Zelenko 2015-09-29 18:23:36 +00:00
sanitizer_tls_get_addr.cc Implement some TLS support for PowerPC64. 2015-11-11 15:37:47 +00:00
sanitizer_tls_get_addr.h [sanitizer] Recognize static TLS in __tls_get_addr interceptor. 2015-05-16 00:34:15 +00:00
sanitizer_unwind_linux_libcdep.cc One more change required to build the sanitizers for iOS. 2015-06-24 20:13:44 +00:00
sanitizer_win.cc [Sanitizer] Introduce ListOfModules object and use it to replace GetListOfModules(). 2016-02-22 18:52:51 +00:00