48 lines
1.1 KiB
C
48 lines
1.1 KiB
C
|
|
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||
|
|
/*
|
||
|
|
* Copyright (c) 2019 Linux Test Project
|
||
|
|
*/
|
||
|
|
|
||
|
|
#ifndef LTP_BPF_COMMON_H
|
||
|
|
#define LTP_BPF_COMMON_H
|
||
|
|
|
||
|
|
#define BPF_MEMLOCK_ADD (256*1024)
|
||
|
|
|
||
|
|
void rlimit_bump_memlock(void)
|
||
|
|
{
|
||
|
|
struct rlimit memlock_r;
|
||
|
|
|
||
|
|
SAFE_GETRLIMIT(RLIMIT_MEMLOCK, &memlock_r);
|
||
|
|
memlock_r.rlim_cur += BPF_MEMLOCK_ADD;
|
||
|
|
tst_res(TINFO, "Raising RLIMIT_MEMLOCK to %ld",
|
||
|
|
(long)memlock_r.rlim_cur);
|
||
|
|
|
||
|
|
if (memlock_r.rlim_cur <= memlock_r.rlim_max) {
|
||
|
|
SAFE_SETRLIMIT(RLIMIT_MEMLOCK, &memlock_r);
|
||
|
|
} else if ((geteuid() == 0)) {
|
||
|
|
memlock_r.rlim_max += BPF_MEMLOCK_ADD;
|
||
|
|
SAFE_SETRLIMIT(RLIMIT_MEMLOCK, &memlock_r);
|
||
|
|
} else {
|
||
|
|
tst_res(TINFO, "Can't raise RLIMIT_MEMLOCK, test may fail "
|
||
|
|
"due to lack of max locked memory");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
int bpf_map_create(union bpf_attr *attr)
|
||
|
|
{
|
||
|
|
TEST(bpf(BPF_MAP_CREATE, attr, sizeof(*attr)));
|
||
|
|
if (TST_RET == -1) {
|
||
|
|
if (TST_ERR == EPERM) {
|
||
|
|
tst_res(TCONF, "Hint: check also /proc/sys/kernel/unprivileged_bpf_disabled");
|
||
|
|
tst_brk(TCONF | TTERRNO,
|
||
|
|
"bpf() requires CAP_SYS_ADMIN on this system");
|
||
|
|
} else {
|
||
|
|
tst_brk(TBROK | TTERRNO, "Failed to create array map");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return TST_RET;
|
||
|
|
}
|
||
|
|
|
||
|
|
#endif
|