//===----------------------------------------------------------------------===//
#include "hwasan.h"
+#include "hwasan_checks.h"
#include "hwasan_thread.h"
#include "interception/interception.h"
#include "sanitizer_common/sanitizer_linux.h"
return A.callback(A.param);
}
+# define COMMON_SYSCALL_PRE_READ_RANGE(p, s) __hwasan_loadN((uptr)p, (uptr)s)
+# define COMMON_SYSCALL_PRE_WRITE_RANGE(p, s) \
+ __hwasan_storeN((uptr)p, (uptr)s)
+# define COMMON_SYSCALL_POST_READ_RANGE(p, s) \
+ do { \
+ (void)(p); \
+ (void)(s); \
+ } while (false)
+# define COMMON_SYSCALL_POST_WRITE_RANGE(p, s) \
+ do { \
+ (void)(p); \
+ (void)(s); \
+ } while (false)
+# include "sanitizer_common/sanitizer_common_syscalls.inc"
+# include "sanitizer_common/sanitizer_syscalls_netbsd.inc"
+
INTERCEPTOR(int, pthread_create, void *th, void *attr, void *(*callback)(void*),
void * param) {
EnsureMainThreadIDIsCorrect();
--- /dev/null
+// RUN: %clangxx_hwasan -O0 %s -o %t && not %env_hwasan_opts=symbolize=0 %run %t 2>&1 | FileCheck %s
+// RUN: %clangxx_hwasan -O3 %s -o %t && not %env_hwasan_opts=symbolize=0 %run %t 2>&1 | FileCheck %s
+
+// UNSUPPORTED: android
+
+#include <assert.h>
+#include <errno.h>
+#include <glob.h>
+#include <malloc.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <sanitizer/hwasan_interface.h>
+#include <sanitizer/linux_syscall_hooks.h>
+
+/* Test the presence of __sanitizer_syscall_ in the tool runtime, and general
+ sanity of their behaviour. */
+
+int main(int argc, char *argv[]) {
+ // lit.cfg.py currently sets 'disable_allocator_tagging=1'
+ __hwasan_enable_allocator_tagging();
+
+ char *buf = (char *)malloc(1000);
+ assert(buf != NULL);
+
+ __sanitizer_syscall_pre_recvmsg(0, buf - 1, 0);
+ // CHECK: HWAddressSanitizer: tag-mismatch on address [[PTR:0x[a-f0-9]+]]
+ // CHECK: Cause: heap-buffer-overflow
+ // CHECK: [[PTR]] is located 1 bytes before a 1000-byte region
+
+ free(buf);
+ return 0;
+}