[PATCH] D56673: [HWASAN/compiler-rt] Instrument globals

Eugene Leviant via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 14 10:25:24 PST 2019


evgeny777 created this revision.
evgeny777 added reviewers: kcc, eugenis.
Herald added subscribers: dberris, kubamracek.

This is compiler-rt part of D56672 <https://reviews.llvm.org/D56672>


https://reviews.llvm.org/D56673

Files:
  lib/hwasan/hwasan.cc
  lib/hwasan/hwasan_interface_internal.h
  test/hwasan/TestCases/globals.c


Index: test/hwasan/TestCases/globals.c
===================================================================
--- test/hwasan/TestCases/globals.c
+++ test/hwasan/TestCases/globals.c
@@ -0,0 +1,15 @@
+// RUN: %clang_hwasan %s -mllvm -hwasan-instrument-globals -o %t && not %run %t 2>&1 | FileCheck %s
+// REQUIRES: stable-runtime
+
+#include <string.h>
+long Q = 42;
+
+int main() {
+  memset(&Q, 0, 32);
+  // CHECK: ERROR: HWAddressSanitizer: tag-mismatch on address
+  // CHECK: WRITE of size 32 at {{.*}} tags: [[PTR_TAG:..]]/[[MEM_TAG:..]] (ptr/mem)
+  // CHECK: Offset to first bad byte is in range [16, 32)
+  // CHECK: Memory tags around the buggy address (one tag corresponds to 16 bytes):
+  // CHECK: =>{{.*}}[[PTR_TAG]]{{[[:space:]]\[}}[[MEM_TAG]]
+  return 0;
+}
Index: lib/hwasan/hwasan_interface_internal.h
===================================================================
--- lib/hwasan/hwasan_interface_internal.h
+++ lib/hwasan/hwasan_interface_internal.h
@@ -201,6 +201,10 @@
 void *__hwasan_memset(void *s, int c, uptr n);
 SANITIZER_INTERFACE_ATTRIBUTE
 void *__hwasan_memmove(void *dest, const void *src, uptr n);
+SANITIZER_INTERFACE_ATTRIBUTE
+void __hwasan_register_globals(void *globals, uptr count);
+SANITIZER_INTERFACE_ATTRIBUTE
+void __hwasan_unregister_globals(void *globals, uptr count);
 }  // extern "C"
 
 #endif  // HWASAN_INTERFACE_INTERNAL_H
Index: lib/hwasan/hwasan.cc
===================================================================
--- lib/hwasan/hwasan.cc
+++ lib/hwasan/hwasan.cc
@@ -449,6 +449,23 @@
   return AddTagToPointer(p, tag);
 }
 
+struct GlobalInfo {
+  uptr addr;
+  uptr size;
+  uptr tag;
+};
+
+void __hwasan_register_globals(void *globals, uptr count) {
+  GlobalInfo *gi = static_cast<GlobalInfo *>(globals);
+  for (uptr i = 0; i < count; ++i)
+    TagMemoryAligned(gi[i].addr, gi[i].size, gi[i].tag);
+}
+
+void __hwasan_unregister_globals(void *globals, uptr count) {
+  GlobalInfo *gi = static_cast<GlobalInfo *>(globals);
+  for (uptr i = 0; i < count; ++i) TagMemoryAligned(gi[i].addr, gi[i].size, 0);
+}
+
 void __hwasan_handle_longjmp(const void *sp_dst) {
   uptr dst = (uptr)sp_dst;
   // HWASan does not support tagged SP.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D56673.181586.patch
Type: text/x-patch
Size: 2195 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190114/13521d06/attachment.bin>


More information about the llvm-commits mailing list