skel = test_log_fixup__open(); if (!ASSERT_OK_PTR(skel, "skel_open")) return;
bpf_program__set_autoload(skel->progs.bad_relo, true);
memset(log_buf, 0, sizeof(log_buf));
bpf_program__set_log_buf(skel->progs.bad_relo, log_buf, log_buf_size ?: sizeof(log_buf));
bpf_program__set_log_level(skel->progs.bad_relo, 1 | 8); /* BPF_LOG_FIXED to force truncation */
err = test_log_fixup__load(skel); if (!ASSERT_ERR(err, "load_fail")) goto cleanup;
ASSERT_HAS_SUBSTR(log_buf, "0: \n" "failed to resolve CO-RE relocation ", "log_buf_part1");
switch (trunc_type) { case TRUNC_NONE:
ASSERT_HAS_SUBSTR(log_buf, "struct task_struct___bad.fake_field (0:1 @ offset 4)\n", "log_buf_part2");
ASSERT_HAS_SUBSTR(log_buf, "max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0\n", "log_buf_end"); break; case TRUNC_PARTIAL: /* we should get full libbpf message patch */
ASSERT_HAS_SUBSTR(log_buf, "struct task_struct___bad.fake_field (0:1 @ offset 4)\n", "log_buf_part2"); /* we shouldn't get full end of BPF verifier log */
ASSERT_NULL(strstr(log_buf, "max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0\n"), "log_buf_end"); break; case TRUNC_FULL: /* we shouldn't get second part of libbpf message patch */
ASSERT_NULL(strstr(log_buf, "struct task_struct___bad.fake_field (0:1 @ offset 4)\n"), "log_buf_part2"); /* we shouldn't get full end of BPF verifier log */
ASSERT_NULL(strstr(log_buf, "max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0\n"), "log_buf_end"); break;
}
if (env.verbosity > VERBOSE_NONE)
printf("LOG: \n=================\n%s=================\n", log_buf);
cleanup:
test_log_fixup__destroy(skel);
}
err = test_log_fixup__load(skel); if (!ASSERT_ERR(err, "load_fail")) goto cleanup;
ASSERT_HAS_SUBSTR(log_buf, "0: \n" "kfunc 'bpf_nonexistent_kfunc' is referenced but wasn't resolved\n", "log_buf");
if (env.verbosity > VERBOSE_NONE)
printf("LOG: \n=================\n%s=================\n", log_buf);
cleanup:
test_log_fixup__destroy(skel);
}
void test_log_fixup(void)
{ if (test__start_subtest("bad_core_relo_trunc_none"))
bad_core_relo(0, TRUNC_NONE /* full buf */); if (test__start_subtest("bad_core_relo_trunc_partial"))
bad_core_relo(300, TRUNC_PARTIAL /* truncate original log a bit */); if (test__start_subtest("bad_core_relo_trunc_full"))
bad_core_relo(240, TRUNC_FULL /* truncate also libbpf's message patch */); if (test__start_subtest("bad_core_relo_subprog"))
bad_core_relo_subprog(); if (test__start_subtest("missing_map"))
missing_map(); if (test__start_subtest("missing_kfunc"))
missing_kfunc();
}
Messung V0.5
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.