1// Test mmap behavior when map address is below shadow range. 2// With MAP_FIXED, we return EINVAL. 3// Without MAP_FIXED, we ignore the address hint and map somewhere in 4// application range. 5 6// RUN: %clangxx_msan -m64 -O0 -DFIXED=0 %s -o %t && %run %t 7// RUN: %clangxx_msan -m64 -O0 -DFIXED=1 %s -o %t && %run %t 8// RUN: %clangxx_msan -m64 -O0 -DFIXED=0 -D_FILE_OFFSET_BITS=64 %s -o %t && %run %t 9// RUN: %clangxx_msan -m64 -O0 -DFIXED=1 -D_FILE_OFFSET_BITS=64 %s -o %t && %run %t 10 11#include <assert.h> 12#include <errno.h> 13#include <stdint.h> 14#include <sys/mman.h> 15 16int main(void) { 17 // Hint address just below shadow. 18 uintptr_t hint = 0x4f0000000000ULL; 19 const uintptr_t app_start = 0x600000000000ULL; 20 uintptr_t p = (uintptr_t)mmap( 21 (void *)hint, 4096, PROT_WRITE, 22 MAP_PRIVATE | MAP_ANONYMOUS | (FIXED ? MAP_FIXED : 0), -1, 0); 23 if (FIXED) 24 assert(p == (uintptr_t)-1 && errno == EINVAL); 25 else 26 assert(p >= app_start); 27 return 0; 28} 29