unplugged-vendor/external/ltp/testcases/kernel/syscalls/bpf/bpf_common.h

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