From 87005aea8e3d84e34a9d41c1baad4303def74aca Mon Sep 17 00:00:00 2001 From: Evgeniy Stepanov Date: Thu, 16 Aug 2018 23:17:14 +0000 Subject: Revert "Revert "[hwasan] Add __hwasan_handle_longjmp."" This reapplies commit r339935 with the following changes: * make longjmp test C, not C++, to avoid dependency on libc++/libstdc++ * untag pointer in memset interceptor x86_64 does not have TBI, so hwasan barely works there. Tests must be carefully written in a way that does not leak tagged pointer to system libraries. git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@339963 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/sanitizer/hwasan_interface.h | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'include') diff --git a/include/sanitizer/hwasan_interface.h b/include/sanitizer/hwasan_interface.h index 9ca73bc10..78644aa9d 100644 --- a/include/sanitizer/hwasan_interface.h +++ b/include/sanitizer/hwasan_interface.h @@ -40,6 +40,13 @@ extern "C" { /// Set pointer tag. Previous tag is lost. void *__hwasan_tag_pointer(const volatile void *p, unsigned char tag); + // Set memory tag from the current SP address to the given address to zero. + // This is meant to annotate longjmp and other non-local jumps. + // This function needs to know the (almost) exact destination frame address; + // clearing shadow for the entire thread stack like __asan_handle_no_return + // does would cause false reports. + void __hwasan_handle_longjmp(const void *sp_dst); + // Print shadow and origin for the memory range to stderr in a human-readable // format. void __hwasan_print_shadow(const volatile void *x, size_t size); -- cgit v1.2.1