brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.4 KiB · 6b44104 Raw
45 lines · cpp
1// RUN: %clangxx_hwasan -O0 %s -o %t2// RUN: %env_hwasan_opts=allocator_may_return_null=0 not %run %t m1 2>&1 | FileCheck %s3// RUN: %env_hwasan_opts=allocator_may_return_null=1     %run %t m1 2>&1 | FileCheck %s --check-prefix=CHECK-NULL4// RUN: %env_hwasan_opts=allocator_may_return_null=0 not %run %t psm1 2>&1 | FileCheck %s5// RUN: %env_hwasan_opts=allocator_may_return_null=1     %run %t psm1 2>&1 | FileCheck %s --check-prefix=CHECK-NULL6 7// UNSUPPORTED: android8 9// Checks that pvalloc overflows are caught. If the allocator is allowed to10// return null, the errno should be set to ENOMEM.11 12#include <assert.h>13#include <errno.h>14#include <malloc.h>15#include <stdint.h>16#include <string.h>17#include <unistd.h>18 19int main(int argc, char *argv[]) {20  assert(argc == 2);21  const char *action = argv[1];22 23  const size_t page_size = sysconf(_SC_PAGESIZE);24 25  void *p = nullptr;26  if (!strcmp(action, "m1")) {27    p = pvalloc((uintptr_t)-1);28  } else if (!strcmp(action, "psm1")) {29    p = pvalloc((uintptr_t)-(page_size - 1));30  } else {31    assert(0);32  }33 34  fprintf(stderr, "errno: %d\n", errno);35 36  return p != nullptr;37}38 39// CHECK: {{ERROR: HWAddressSanitizer: pvalloc parameters overflow: size .* rounded up to system page size .* cannot be represented in type size_t}}40// CHECK: {{#0 0x.* in .*pvalloc}}41// CHECK: {{#1 0x.* in main .*pvalloc-overflow.cpp:}}42// CHECK: SUMMARY: HWAddressSanitizer: pvalloc-overflow {{.*}} in main43 44// CHECK-NULL: errno: 1245