Daniel Borkmann | fe8d662 | 2018-02-26 22:34:32 +0100 | [diff] [blame] | 1 | #include <sys/resource.h> |
| 2 | #include <stdio.h> |
| 3 | |
| 4 | static __attribute__((constructor)) void bpf_rlimit_ctor(void) |
| 5 | { |
| 6 | struct rlimit rlim_old, rlim_new = { |
| 7 | .rlim_cur = RLIM_INFINITY, |
| 8 | .rlim_max = RLIM_INFINITY, |
| 9 | }; |
| 10 | |
| 11 | getrlimit(RLIMIT_MEMLOCK, &rlim_old); |
| 12 | /* For the sake of running the test cases, we temporarily |
| 13 | * set rlimit to infinity in order for kernel to focus on |
| 14 | * errors from actual test cases and not getting noise |
| 15 | * from hitting memlock limits. The limit is on per-process |
| 16 | * basis and not a global one, hence destructor not really |
| 17 | * needed here. |
| 18 | */ |
| 19 | if (setrlimit(RLIMIT_MEMLOCK, &rlim_new) < 0) { |
| 20 | perror("Unable to lift memlock rlimit"); |
| 21 | /* Trying out lower limit, but expect potential test |
| 22 | * case failures from this! |
| 23 | */ |
| 24 | rlim_new.rlim_cur = rlim_old.rlim_cur + (1UL << 20); |
| 25 | rlim_new.rlim_max = rlim_old.rlim_max + (1UL << 20); |
| 26 | setrlimit(RLIMIT_MEMLOCK, &rlim_new); |
| 27 | } |
| 28 | } |