Home | History | Annotate | Download | only in vm
      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