diff options
| author | Benjamin Kramer <benny.kra@googlemail.com> | 2017-08-04 07:32:10 +0000 |
|---|---|---|
| committer | Benjamin Kramer <benny.kra@googlemail.com> | 2017-08-04 07:32:10 +0000 |
| commit | 7fba72e97bfce386762b59eeba95d6b4b5d9fb32 (patch) | |
| tree | 17348e9cf7b12743b99ef3e15746ea3ba60f823c | |
| parent | 2f6ae28152154e30aeb0c05b4a195f2dd7d2719b (diff) | |
| download | bcm5719-llvm-7fba72e97bfce386762b59eeba95d6b4b5d9fb32.tar.gz bcm5719-llvm-7fba72e97bfce386762b59eeba95d6b4b5d9fb32.zip | |
[msan] Switch the pvalloc overflow test to a lit test
The test was not passing on targets where allocator_may_return_null
defaults to true. Change the test to a lit test so that we can test both
situations.
Patch by Kostya Kortchinsky!
Differential Revision: https://reviews.llvm.org/D36302
llvm-svn: 310033
| -rw-r--r-- | compiler-rt/lib/msan/tests/msan_test.cc | 6 | ||||
| -rw-r--r-- | compiler-rt/test/msan/pvalloc.cc | 43 |
2 files changed, 43 insertions, 6 deletions
diff --git a/compiler-rt/lib/msan/tests/msan_test.cc b/compiler-rt/lib/msan/tests/msan_test.cc index 0310656d15a..b2d5f7c605e 100644 --- a/compiler-rt/lib/msan/tests/msan_test.cc +++ b/compiler-rt/lib/msan/tests/msan_test.cc @@ -3449,12 +3449,6 @@ TEST(MemorySanitizer, pvalloc) { EXPECT_EQ(0U, (uintptr_t)p % PageSize); EXPECT_EQ(PageSize, __sanitizer_get_allocated_size(p)); free(p); - - // Overflows should be caught. - EXPECT_DEATH(p = pvalloc((uintptr_t)-1), - "allocator is terminating the process instead of returning 0"); - EXPECT_DEATH(p = pvalloc((uintptr_t)-(PageSize - 1)), - "allocator is terminating the process instead of returning 0"); } #endif diff --git a/compiler-rt/test/msan/pvalloc.cc b/compiler-rt/test/msan/pvalloc.cc new file mode 100644 index 00000000000..21b2300b55d --- /dev/null +++ b/compiler-rt/test/msan/pvalloc.cc @@ -0,0 +1,43 @@ +// RUN: %clangxx_msan -O0 %s -o %t +// RUN: MSAN_OPTIONS=allocator_may_return_null=0 not %run %t m1 2>&1 | FileCheck %s +// RUN: MSAN_OPTIONS=allocator_may_return_null=1 %run %t m1 2>&1 +// RUN: MSAN_OPTIONS=allocator_may_return_null=0 not %run %t psm1 2>&1 | FileCheck %s +// RUN: MSAN_OPTIONS=allocator_may_return_null=1 %run %t psm1 2>&1 + +// UNSUPPORTED: win32, freebsd + +// Checks that pvalloc overflows are caught. If the allocator is allowed to +// return null, the errno should be set to ENOMEM. + +#include <assert.h> +#include <errno.h> +#include <malloc.h> +#include <stdint.h> +#include <string.h> +#include <unistd.h> + +int main(int argc, char *argv[]) { + void *p; + size_t page_size; + + assert(argc == 2); + + page_size = sysconf(_SC_PAGESIZE); + // Check that the page size is a power of two. + assert((page_size & (page_size - 1)) == 0); + + if (!strcmp(argv[1], "m1")) { + p = pvalloc((uintptr_t)-1); + assert(!p); + assert(errno == ENOMEM); + } + if (!strcmp(argv[1], "psm1")) { + p = pvalloc((uintptr_t)-(page_size - 1)); + assert(!p); + assert(errno == ENOMEM); + } + + return 0; +} + +// CHECK: MemorySanitizer's allocator is terminating the process |

