Mercurial > hg > CbC > CbC_llvm
view compiler-rt/test/hwasan/TestCases/many-threads-uaf.c @ 252:1f2b6ac9f198 llvm-original
LLVM16-1
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 18 Aug 2023 09:04:13 +0900 |
parents | 79ff65ed7e25 |
children |
line wrap: on
line source
// RUN: %clang_hwasan %s -o %t && not %env_hwasan_opts=verbose_threads=1 %run %t 2>&1 | FileCheck %s #include <pthread.h> #include <stdlib.h> #include <stdio.h> #include <sanitizer/hwasan_interface.h> void *BoringThread(void *arg) { char * volatile x = (char*)malloc(10); x[5] = 0; free(x); return NULL; } // CHECK: Creating : T0 // CHECK: Creating : T1 // CHECK: Destroying: T1 // CHECK: Creating : T1100 // CHECK: Destroying: T1100 // CHECK: Creating : T1101 void *UAFThread(void *arg) { char * volatile x = (char*)malloc(10); fprintf(stderr, "ZZZ %p\n", x); free(x); x[5] = 42; // CHECK: ERROR: HWAddressSanitizer: tag-mismatch on address // CHECK: WRITE of size 1 // CHECK: many-threads-uaf.c:[[@LINE-3]] // CHECK: Thread: T1101 return NULL; } int main() { __hwasan_enable_allocator_tagging(); pthread_t t; for (int i = 0; i < 1100; i++) { pthread_create(&t, NULL, BoringThread, NULL); pthread_join(t, NULL); } pthread_create(&t, NULL, UAFThread, NULL); pthread_join(t, NULL); }