mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-09 07:51:16 -04:00
Merge branch 'skip-callback-tests-if-jit-is-disabled-in-test_verifier'
Tiezhu Yang says:
====================
Skip callback tests if jit is disabled in test_verifier
Thanks very much for the feedbacks from Eduard, John, Jiri, Daniel,
Hou Tao, Song Liu and Andrii.
v7:
-- Add an explicit flag F_NEEDS_JIT_ENABLED for checking,
thanks Andrii.
v6:
-- Copy insn_is_pseudo_func() into testing_helpers,
thanks Andrii.
v5:
-- Reuse is_ldimm64_insn() and insn_is_pseudo_func(),
thanks Song Liu.
v4:
-- Move the not-allowed-checking into "if (expected_ret ...)"
block, thanks Hou Tao.
-- Do some small changes to avoid checkpatch warning
about "line length exceeds 100 columns".
v3:
-- Rebase on the latest bpf-next tree.
-- Address the review comments by Hou Tao,
remove the second argument "0" of open(),
check only once whether jit is disabled,
check fd_prog, saved_errno and jit_disabled to skip.
====================
Link: https://lore.kernel.org/r/20240123090351.2207-1-yangtiezhu@loongson.cn
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
This commit is contained in:
@@ -547,24 +547,6 @@ int bpf_find_map(const char *test, struct bpf_object *obj, const char *name)
|
||||
return bpf_map__fd(map);
|
||||
}
|
||||
|
||||
static bool is_jit_enabled(void)
|
||||
{
|
||||
const char *jit_sysctl = "/proc/sys/net/core/bpf_jit_enable";
|
||||
bool enabled = false;
|
||||
int sysctl_fd;
|
||||
|
||||
sysctl_fd = open(jit_sysctl, 0, O_RDONLY);
|
||||
if (sysctl_fd != -1) {
|
||||
char tmpc;
|
||||
|
||||
if (read(sysctl_fd, &tmpc, sizeof(tmpc)) == 1)
|
||||
enabled = (tmpc != '0');
|
||||
close(sysctl_fd);
|
||||
}
|
||||
|
||||
return enabled;
|
||||
}
|
||||
|
||||
int compare_map_keys(int map1_fd, int map2_fd)
|
||||
{
|
||||
__u32 key, next_key;
|
||||
|
||||
@@ -67,6 +67,7 @@
|
||||
|
||||
#define F_NEEDS_EFFICIENT_UNALIGNED_ACCESS (1 << 0)
|
||||
#define F_LOAD_WITH_STRICT_ALIGNMENT (1 << 1)
|
||||
#define F_NEEDS_JIT_ENABLED (1 << 2)
|
||||
|
||||
/* need CAP_BPF, CAP_NET_ADMIN, CAP_PERFMON to load progs */
|
||||
#define ADMIN_CAPS (1ULL << CAP_NET_ADMIN | \
|
||||
@@ -74,6 +75,7 @@
|
||||
1ULL << CAP_BPF)
|
||||
#define UNPRIV_SYSCTL "kernel/unprivileged_bpf_disabled"
|
||||
static bool unpriv_disabled = false;
|
||||
static bool jit_disabled;
|
||||
static int skips;
|
||||
static bool verbose = false;
|
||||
static int verif_log_level = 0;
|
||||
@@ -1524,6 +1526,13 @@ static void do_test_single(struct bpf_test *test, bool unpriv,
|
||||
__u32 pflags;
|
||||
int i, err;
|
||||
|
||||
if ((test->flags & F_NEEDS_JIT_ENABLED) && jit_disabled) {
|
||||
printf("SKIP (requires BPF JIT)");
|
||||
skips++;
|
||||
sched_yield();
|
||||
return;
|
||||
}
|
||||
|
||||
fd_prog = -1;
|
||||
for (i = 0; i < MAX_NR_MAPS; i++)
|
||||
map_fds[i] = -1;
|
||||
@@ -1844,6 +1853,8 @@ int main(int argc, char **argv)
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
jit_disabled = !is_jit_enabled();
|
||||
|
||||
/* Use libbpf 1.0 API mode */
|
||||
libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
|
||||
|
||||
|
||||
@@ -457,3 +457,21 @@ int get_xlated_program(int fd_prog, struct bpf_insn **buf, __u32 *cnt)
|
||||
*buf = NULL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
bool is_jit_enabled(void)
|
||||
{
|
||||
const char *jit_sysctl = "/proc/sys/net/core/bpf_jit_enable";
|
||||
bool enabled = false;
|
||||
int sysctl_fd;
|
||||
|
||||
sysctl_fd = open(jit_sysctl, O_RDONLY);
|
||||
if (sysctl_fd != -1) {
|
||||
char tmpc;
|
||||
|
||||
if (read(sysctl_fd, &tmpc, sizeof(tmpc)) == 1)
|
||||
enabled = (tmpc != '0');
|
||||
close(sysctl_fd);
|
||||
}
|
||||
|
||||
return enabled;
|
||||
}
|
||||
|
||||
@@ -52,5 +52,6 @@ struct bpf_insn;
|
||||
*/
|
||||
int get_xlated_program(int fd_prog, struct bpf_insn **buf, __u32 *cnt);
|
||||
int testing_prog_flags(void);
|
||||
bool is_jit_enabled(void);
|
||||
|
||||
#endif /* __TESTING_HELPERS_H */
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
.expected_insns = { PSEUDO_CALL_INSN() },
|
||||
.unexpected_insns = { HELPER_CALL_INSN() },
|
||||
.prog_type = BPF_PROG_TYPE_TRACEPOINT,
|
||||
.flags = F_NEEDS_JIT_ENABLED,
|
||||
.result = ACCEPT,
|
||||
.runs = 0,
|
||||
.func_info = { { 0, MAIN_TYPE }, { 12, CALLBACK_TYPE } },
|
||||
@@ -90,6 +91,7 @@
|
||||
.expected_insns = { HELPER_CALL_INSN() },
|
||||
.unexpected_insns = { PSEUDO_CALL_INSN() },
|
||||
.prog_type = BPF_PROG_TYPE_TRACEPOINT,
|
||||
.flags = F_NEEDS_JIT_ENABLED,
|
||||
.result = ACCEPT,
|
||||
.runs = 0,
|
||||
.func_info = { { 0, MAIN_TYPE }, { 16, CALLBACK_TYPE } },
|
||||
@@ -127,6 +129,7 @@
|
||||
.expected_insns = { HELPER_CALL_INSN() },
|
||||
.unexpected_insns = { PSEUDO_CALL_INSN() },
|
||||
.prog_type = BPF_PROG_TYPE_TRACEPOINT,
|
||||
.flags = F_NEEDS_JIT_ENABLED,
|
||||
.result = ACCEPT,
|
||||
.runs = 0,
|
||||
.func_info = {
|
||||
@@ -165,6 +168,7 @@
|
||||
.expected_insns = { PSEUDO_CALL_INSN() },
|
||||
.unexpected_insns = { HELPER_CALL_INSN() },
|
||||
.prog_type = BPF_PROG_TYPE_TRACEPOINT,
|
||||
.flags = F_NEEDS_JIT_ENABLED,
|
||||
.result = ACCEPT,
|
||||
.runs = 0,
|
||||
.func_info = {
|
||||
@@ -235,6 +239,7 @@
|
||||
},
|
||||
.unexpected_insns = { HELPER_CALL_INSN() },
|
||||
.prog_type = BPF_PROG_TYPE_TRACEPOINT,
|
||||
.flags = F_NEEDS_JIT_ENABLED,
|
||||
.result = ACCEPT,
|
||||
.func_info = {
|
||||
{ 0, MAIN_TYPE },
|
||||
@@ -252,6 +257,7 @@
|
||||
.unexpected_insns = { HELPER_CALL_INSN() },
|
||||
.result = ACCEPT,
|
||||
.prog_type = BPF_PROG_TYPE_TRACEPOINT,
|
||||
.flags = F_NEEDS_JIT_ENABLED,
|
||||
.func_info = { { 0, MAIN_TYPE }, { 16, CALLBACK_TYPE } },
|
||||
.func_info_cnt = 2,
|
||||
BTF_TYPES
|
||||
|
||||
Reference in New Issue
Block a user