xref: /llvm-project/compiler-rt/test/hwasan/TestCases/Linux/vfork.c (revision 847fa84b3d346313bbad31d4c76b0f70d73827aa)
1f46a52b5SEvgeniy Stepanov // https://github.com/google/sanitizers/issues/925
2f46a52b5SEvgeniy Stepanov // RUN: %clang_hwasan -O0 %s -o %t && %run %t 2>&1
3f46a52b5SEvgeniy Stepanov 
4*847fa84bSAlexey Baturo // REQUIRES: aarch64-target-arch || x86_64-target-arch || riscv64-target-arch
5b7d1ab75SMatt Morehouse // REQUIRES: pointer-tagging
696a4167bSMatt Morehouse 
7f46a52b5SEvgeniy Stepanov #include <assert.h>
8f46a52b5SEvgeniy Stepanov #include <sys/types.h>
9f46a52b5SEvgeniy Stepanov #include <sys/wait.h>
10f46a52b5SEvgeniy Stepanov #include <unistd.h>
11f46a52b5SEvgeniy Stepanov #include <stdio.h>
12f46a52b5SEvgeniy Stepanov #include <sanitizer/hwasan_interface.h>
13f46a52b5SEvgeniy Stepanov 
child()14f46a52b5SEvgeniy Stepanov __attribute__((noinline, no_sanitize("hwaddress"))) void child() {
15f46a52b5SEvgeniy Stepanov   char x[10000];
16f46a52b5SEvgeniy Stepanov   __hwasan_tag_memory(x, 0xAA, sizeof(x));
17f46a52b5SEvgeniy Stepanov   _exit(0);
18f46a52b5SEvgeniy Stepanov }
19f46a52b5SEvgeniy Stepanov 
parent()20f46a52b5SEvgeniy Stepanov __attribute__((noinline, no_sanitize("hwaddress"))) void parent() {
21f46a52b5SEvgeniy Stepanov   char x[10000];
22f46a52b5SEvgeniy Stepanov   __hwasan_print_shadow(&x, sizeof(x));
23f46a52b5SEvgeniy Stepanov   assert(__hwasan_test_shadow(x, sizeof(x)) == -1);
24f46a52b5SEvgeniy Stepanov }
25f46a52b5SEvgeniy Stepanov 
main(int argc,char ** argv)26f46a52b5SEvgeniy Stepanov int main(int argc, char **argv) {
27f46a52b5SEvgeniy Stepanov   if (vfork())
28f46a52b5SEvgeniy Stepanov     parent();
29f46a52b5SEvgeniy Stepanov   else
30f46a52b5SEvgeniy Stepanov     child();
31f46a52b5SEvgeniy Stepanov 
32f46a52b5SEvgeniy Stepanov   return 0;
33f46a52b5SEvgeniy Stepanov }
34