hwasan: lay groundwork for importing subset of sanitizer_common interceptors [NFC]
authorThurston Dang <thurston@google.com>
Fri, 19 May 2023 23:19:44 +0000 (23:19 +0000)
committerThurston Dang <thurston@google.com>
Tue, 23 May 2023 18:16:46 +0000 (18:16 +0000)
This patch does the bare minimum to import sanitizer_common_interceptors, but
without actually enabling any interceptors or meaningfully defining the
COMMON_INTERCEPT macros.

This will allow selectively enabling sanitizer_common interceptors (if the
appropriate macros are defined), as suggested by Vitaly in D149701.

Reviewed By: vitalybuka

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

compiler-rt/lib/hwasan/hwasan_interceptors.cpp
compiler-rt/lib/hwasan/hwasan_platform_interceptors.h

index 443bfe8..60f262f 100644 (file)
@@ -16,6 +16,7 @@
 
 #include "hwasan.h"
 #include "hwasan_checks.h"
+#include "hwasan_platform_interceptors.h"
 #include "hwasan_thread.h"
 #include "hwasan_thread_list.h"
 #include "interception/interception.h"
@@ -44,6 +45,101 @@ using namespace __hwasan;
 #    include "sanitizer_common/sanitizer_common_syscalls.inc"
 #    include "sanitizer_common/sanitizer_syscalls_netbsd.inc"
 
+#define COMMON_INTERCEPTOR_WRITE_RANGE(ctx, ptr, size) \
+  do {                                                \
+  } while (false)
+
+#define COMMON_INTERCEPTOR_READ_RANGE(ctx, ptr, size) \
+  do {                                                \
+    (void)(ctx);                                      \
+    (void)(ptr);                                      \
+    (void)(size);                                     \
+  } while (false)
+
+#define COMMON_INTERCEPTOR_ENTER(ctx, func, ...) \
+  do {                                           \
+    (void)(ctx);                                 \
+    (void)(func);                                \
+  } while (false)
+
+#define COMMON_INTERCEPTOR_DIR_ACQUIRE(ctx, path) \
+  do {                                            \
+    (void)(ctx);                                  \
+    (void)(path);                                 \
+  } while (false)
+
+#define COMMON_INTERCEPTOR_FD_ACQUIRE(ctx, fd) \
+  do {                                         \
+    (void)(ctx);                               \
+    (void)(fd);                                \
+  } while (false)
+
+#define COMMON_INTERCEPTOR_FD_RELEASE(ctx, fd) \
+  do {                                         \
+    (void)(ctx);                               \
+    (void)(fd);                                \
+  } while (false)
+
+#define COMMON_INTERCEPTOR_FD_SOCKET_ACCEPT(ctx, fd, newfd) \
+  do {                                                      \
+    (void)(ctx);                                            \
+    (void)(fd);                                             \
+    (void)(newfd);                                          \
+  } while (false)
+
+#define COMMON_INTERCEPTOR_SET_THREAD_NAME(ctx, name) \
+  do {                                                \
+    (void)(ctx);                                      \
+    (void)(name);                                     \
+  } while (false)
+
+#define COMMON_INTERCEPTOR_SET_PTHREAD_NAME(ctx, thread, name) \
+  do {                                                         \
+    (void)(ctx);                                               \
+    (void)(thread);                                            \
+    (void)(name);                                              \
+  } while (false)
+
+#define COMMON_INTERCEPTOR_BLOCK_REAL(name) \
+  do {                                      \
+    (void)(name);                           \
+  } while (false)
+
+#define COMMON_INTERCEPTOR_MEMMOVE_IMPL(ctx, to, from, size) \
+  do {                                                       \
+    (void)(ctx);                                             \
+    (void)(to);                                              \
+    (void)(from);                                            \
+    (void)(size);                                            \
+  } while (false)
+
+#define COMMON_INTERCEPTOR_MEMCPY_IMPL(ctx, to, from, size) \
+  do {                                                      \
+    (void)(ctx);                                            \
+    (void)(to);                                             \
+    (void)(from);                                           \
+    (void)(size);                                           \
+  } while (false)
+
+#define COMMON_INTERCEPTOR_MEMSET_IMPL(ctx, block, c, size) \
+  do {                                                      \
+    (void)(ctx);                                            \
+    (void)(block);                                          \
+    (void)(c);                                              \
+    (void)(size);                                           \
+  } while (false)
+
+#define COMMON_INTERCEPTOR_STRERROR() \
+  do {                                \
+  } while (false)
+
+#define COMMON_INTERCEPT_FUNCTION(name) \
+  do {                                  \
+    (void)(name);                       \
+  } while (false)
+
+#include "sanitizer_common/sanitizer_common_interceptors.inc"
+
 struct ThreadStartArg {
   __sanitizer_sigset_t starting_sigset_;
 };
@@ -318,6 +414,10 @@ void InitializeInterceptors() {
   static int inited = 0;
   CHECK_EQ(inited, 0);
 
+  (void)(InitializeCommonInterceptors);
+  (void)(read_iovec);
+  (void)(write_iovec);
+
 #  if HWASAN_WITH_INTERCEPTORS
 #    if defined(__linux__)
   INTERCEPT_FUNCTION(__libc_longjmp);
index 9395744..853cf8b 100644 (file)
 #undef SANITIZER_INTERCEPT_ALIGNED_ALLOC
 #undef SANITIZER_INTERCEPT_MALLOC_USABLE_SIZE
 #undef SANITIZER_INTERCEPT_MCHECK_MPROBE
+#undef SANITIZER_INTERCEPT_WCSLEN
 #undef SANITIZER_INTERCEPT_WCSCAT
 #undef SANITIZER_INTERCEPT_WCSDUP
 #undef SANITIZER_INTERCEPT_SIGNAL_AND_SIGACTION
 #define SANITIZER_INTERCEPT_ALIGNED_ALLOC 0
 #define SANITIZER_INTERCEPT_MALLOC_USABLE_SIZE 0
 #define SANITIZER_INTERCEPT_MCHECK_MPROBE 0
+#define SANITIZER_INTERCEPT_WCSLEN 0
 #define SANITIZER_INTERCEPT_WCSCAT 0
 #define SANITIZER_INTERCEPT_WCSDUP 0
 #define SANITIZER_INTERCEPT_SIGNAL_AND_SIGACTION 0