12d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %clangxx_asan -O0 %s -o %t && not %run %t 2>&1 | FileCheck %s 22d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %clangxx_asan -O3 %s -o %t && not %run %t 2>&1 | FileCheck %s 32d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 42d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include <assert.h> 52d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include <sys/wait.h> 62d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include <unistd.h> 72d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 82d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesint main(int argc, char **argv) { 92d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines pid_t pid = fork(); 102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines if (pid) { // parent 112d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines int x[3]; 122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines int *status = x + argc * 3; 132d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines int res; 142d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 152d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines siginfo_t *si = (siginfo_t*)(x + argc * 3); 162d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines res = waitid(P_ALL, 0, si, WEXITED | WNOHANG); 172d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines // CHECK: stack-buffer-overflow 182d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines // CHECK: {{WRITE of size .* at 0x.* thread T0}} 192d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines // CHECK: {{in .*waitid}} 202d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines // CHECK: {{in main .*waitid.cc:}} 212d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines // CHECK: is located in stack of thread T0 at offset 222d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines // CHECK: {{in main}} 232d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines return res != -1; 242d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines } 252d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines // child 262d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines return 0; 272d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines} 28