|  | #include <sys/resource.h> | 
|  | #include <stdio.h> | 
|  |  | 
|  | static  __attribute__((constructor)) void bpf_rlimit_ctor(void) | 
|  | { | 
|  | struct rlimit rlim_old, rlim_new = { | 
|  | .rlim_cur	= RLIM_INFINITY, | 
|  | .rlim_max	= RLIM_INFINITY, | 
|  | }; | 
|  |  | 
|  | getrlimit(RLIMIT_MEMLOCK, &rlim_old); | 
|  | /* For the sake of running the test cases, we temporarily | 
|  | * set rlimit to infinity in order for kernel to focus on | 
|  | * errors from actual test cases and not getting noise | 
|  | * from hitting memlock limits. The limit is on per-process | 
|  | * basis and not a global one, hence destructor not really | 
|  | * needed here. | 
|  | */ | 
|  | if (setrlimit(RLIMIT_MEMLOCK, &rlim_new) < 0) { | 
|  | perror("Unable to lift memlock rlimit"); | 
|  | /* Trying out lower limit, but expect potential test | 
|  | * case failures from this! | 
|  | */ | 
|  | rlim_new.rlim_cur = rlim_old.rlim_cur + (1UL << 20); | 
|  | rlim_new.rlim_max = rlim_old.rlim_max + (1UL << 20); | 
|  | setrlimit(RLIMIT_MEMLOCK, &rlim_new); | 
|  | } | 
|  | } |