35 lines
776 B
C++
35 lines
776 B
C++
|
// RUN: %clang_hwasan -O0 %s -o %t && %run %t 2>&1
|
||
|
|
||
|
// REQUIRES: aarch64-target-arch || x86_64-target-arch || riscv64-target-arch
|
||
|
// REQUIRES: pointer-tagging
|
||
|
|
||
|
#include <assert.h>
|
||
|
#include <pthread.h>
|
||
|
#include <sanitizer/hwasan_interface.h>
|
||
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <sys/types.h>
|
||
|
#include <sys/wait.h>
|
||
|
#include <unistd.h>
|
||
|
|
||
|
void *volatile sink;
|
||
|
|
||
|
int main(int argc, char **argv) {
|
||
|
pthread_atfork(nullptr, nullptr, []() {
|
||
|
alarm(5);
|
||
|
sink = malloc(10);
|
||
|
});
|
||
|
int pid = fork();
|
||
|
if (pid) {
|
||
|
int wstatus;
|
||
|
do {
|
||
|
waitpid(pid, &wstatus, 0);
|
||
|
} while (!WIFEXITED(wstatus) && !WIFSIGNALED(wstatus));
|
||
|
if (!WIFEXITED(wstatus) || WEXITSTATUS(wstatus)) {
|
||
|
fprintf(stderr, "abnormal exit\n");
|
||
|
return 1;
|
||
|
}
|
||
|
}
|
||
|
return 0;
|
||
|
}
|