forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
842 B
48 lines
842 B
// SPDX-License-Identifier: GPL-2.0 |
|
#include <sys/mman.h> |
|
#include <stdio.h> |
|
#include <unistd.h> |
|
#include <string.h> |
|
#include <sys/time.h> |
|
#include <sys/resource.h> |
|
|
|
#ifndef MCL_ONFAULT |
|
#define MCL_ONFAULT (MCL_FUTURE << 1) |
|
#endif |
|
|
|
static int test_limit(void) |
|
{ |
|
int ret = 1; |
|
struct rlimit lims; |
|
void *map; |
|
|
|
if (getrlimit(RLIMIT_MEMLOCK, &lims)) { |
|
perror("getrlimit"); |
|
return ret; |
|
} |
|
|
|
if (mlockall(MCL_ONFAULT | MCL_FUTURE)) { |
|
perror("mlockall"); |
|
return ret; |
|
} |
|
|
|
map = mmap(NULL, 2 * lims.rlim_max, PROT_READ | PROT_WRITE, |
|
MAP_PRIVATE | MAP_ANONYMOUS | MAP_POPULATE, -1, 0); |
|
if (map != MAP_FAILED) |
|
printf("mmap should have failed, but didn't\n"); |
|
else { |
|
ret = 0; |
|
munmap(map, 2 * lims.rlim_max); |
|
} |
|
|
|
munlockall(); |
|
return ret; |
|
} |
|
|
|
int main(int argc, char **argv) |
|
{ |
|
int ret = 0; |
|
|
|
ret += test_limit(); |
|
return ret; |
|
}
|
|
|