@@ -5,6 +5,9 @@ top_srcdir ?= ../../../..
include $(top_srcdir)/include/mk/testcases.mk
+FILTER_OUT_MAKE_TARGETS := bpf_common
CFLAGS += -D_GNU_SOURCE
include $(top_srcdir)/include/mk/generic_leaf_target.mk
+
+$(MAKE_TARGETS): %: bpf_common.o
new file mode 100644
@@ -0,0 +1,45 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * Copyright (c) 2019-2020 Linux Test Project
+ */
+
+#define TST_NO_DEFAULT_MAIN
+#include "tst_test.h"
+#include "lapi/bpf.h"
+#include "bpf_common.h"
+
+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;
+}
@@ -1,6 +1,6 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
- * Copyright (c) 2019 Linux Test Project
+ * Copyright (c) 2019-2020 Linux Test Project
*/
#ifndef LTP_BPF_COMMON_H
@@ -8,40 +8,7 @@
#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;
-}
+void rlimit_bump_memlock(void);
+int bpf_map_create(union bpf_attr *attr);
#endif
Signed-off-by: Martin Doucha <mdoucha@suse.cz> --- Changes since v1: This patch was split off from the v1 BPF fix. Code cleanup to prevent future bugs and make the common code more readable. Changes since v2: None. Changes since v3: Don't generate separate .o files for test programs. testcases/kernel/syscalls/bpf/Makefile | 3 ++ testcases/kernel/syscalls/bpf/bpf_common.c | 45 ++++++++++++++++++++++ testcases/kernel/syscalls/bpf/bpf_common.h | 39 ++----------------- 3 files changed, 51 insertions(+), 36 deletions(-) create mode 100644 testcases/kernel/syscalls/bpf/bpf_common.c