1 #include <sys/mman.h> 2 #include <stdio.h> 3 #include <unistd.h> 4 #include <string.h> 5 #include <sys/time.h> 6 #include <sys/resource.h> 7 8 #ifndef MCL_ONFAULT 9 #define MCL_ONFAULT (MCL_FUTURE << 1) 10 #endif 11 12 static int test_limit(void) 13 { 14 int ret = 1; 15 struct rlimit lims; 16 void *map; 17 18 if (getrlimit(RLIMIT_MEMLOCK, &lims)) { 19 perror("getrlimit"); 20 return ret; 21 } 22 23 if (mlockall(MCL_ONFAULT | MCL_FUTURE)) { 24 perror("mlockall"); 25 return ret; 26 } 27 28 map = mmap(NULL, 2 * lims.rlim_max, PROT_READ | PROT_WRITE, 29 MAP_PRIVATE | MAP_ANONYMOUS | MAP_POPULATE, 0, 0); 30 if (map != MAP_FAILED) 31 printf("mmap should have failed, but didn't\n"); 32 else { 33 ret = 0; 34 munmap(map, 2 * lims.rlim_max); 35 } 36 37 munlockall(); 38 return ret; 39 } 40 41 int main(int argc, char **argv) 42 { 43 int ret = 0; 44 45 ret += test_limit(); 46 return ret; 47 } 48