mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-26 01:56:06 +00:00

Summary contains one line and should point to user code instead of internal compiler-rt location. TSAN already does that.
40 lines
988 B
C++
40 lines
988 B
C++
// RUN: %clangxx_hwasan %s -o %t && not %run %t 2>&1 | FileCheck %s
|
|
|
|
#include <sanitizer/hwasan_interface.h>
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <sys/mman.h>
|
|
#include <unistd.h>
|
|
|
|
int main(int argc, char **argv) {
|
|
const size_t kPS = sysconf(_SC_PAGESIZE);
|
|
|
|
void *r = nullptr;
|
|
int res = posix_memalign(&r, kPS, 2 * kPS);
|
|
if (res) {
|
|
perror("Failed to mmap: ");
|
|
abort();
|
|
}
|
|
|
|
r = __hwasan_tag_pointer(r, 0);
|
|
__hwasan_tag_memory(r, 1, 2 * kPS);
|
|
|
|
// Disable access to the page just after tag-mismatch report address.
|
|
res = mprotect((char*)r + kPS, kPS, PROT_NONE);
|
|
if (res) {
|
|
perror("Failed to mprotect: ");
|
|
abort();
|
|
}
|
|
|
|
// Trigger tag-mismatch report.
|
|
return *((char*)r + kPS - 1);
|
|
}
|
|
|
|
// CHECK: ERROR: HWAddressSanitizer: tag-mismatch on address
|
|
// CHECK: Memory tags around the buggy address
|
|
// CHECK: Tags for short granules around
|
|
|
|
// Check that report is complete.
|
|
// CHECK: SUMMARY: HWAddressSanitizer: tag-mismatch {{.*}} in main
|