brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.2 KiB · 0c69f11 Raw
48 lines · cpp
1// RUN: %clangxx_msan -std=c++11 -O0 -g %s -o %t2// RUN: %run %t __3// RUN: not %run %t A_ 2>&1 | FileCheck %s4// RUN: not %run %t AH 2>&1 | FileCheck %s5// RUN: not %run %t B_ 2>&1 | FileCheck %s6// RUN: not %run %t BH 2>&1 | FileCheck %s7// RUN: not %run %t C_ 2>&1 | FileCheck %s8// RUN: not %run %t CH 2>&1 | FileCheck %s9 10#include <assert.h>11#include <signal.h>12#include <string.h>13#include <sys/time.h>14#include <unistd.h>15 16#include <sanitizer/msan_interface.h>17 18void handler(int) {}19void action(int, siginfo_t *, void *) {}20 21int main(int argc, char **argv) {22  char T = argv[1][0];23  char H = argv[1][1];24  struct sigaction sa;25  memset(&sa, 0, sizeof(sa));26  if (H == 'H') {27    sa.sa_handler = handler;28  } else {29    sa.sa_sigaction = action;30    sa.sa_flags = SA_SIGINFO;31  }32 33  if (T == 'A') {34    if (H == 'H')35      __msan_poison(&sa.sa_handler, sizeof(sa.sa_handler));36    else37      __msan_poison(&sa.sa_sigaction, sizeof(sa.sa_sigaction));38  }39  if (T == 'B')40    __msan_poison(&sa.sa_flags, sizeof(sa.sa_flags));41  if (T == 'C')42    __msan_poison(&sa.sa_mask, sizeof(sa.sa_mask));43  // CHECK: use-of-uninitialized-value44  int res = sigaction(SIGUSR1, &sa, nullptr);45  assert(res == 0);46  return 0;47}48