for (i = 0; i < cnt; i++) { unsignedint offset = i * sizeof(unsignedlong);
/* * Check register before and after uretprobe_regs_trigger call * that triggers the uretprobe.
*/ switch (offset) { case offsetof(struct pt_regs, rax):
ASSERT_EQ(pa[i], 0xdeadbeef, "return value"); break; default: if (!ASSERT_EQ(pb[i], pa[i], "register before-after value check"))
fprintf(stdout, "failed register offset %u\n", offset);
}
/* * Check register seen from bpf program and register after * uretprobe_regs_trigger call
*/ switch (offset) { /* * These values will be different (not set in uretprobe_regs), * we don't care.
*/ case offsetof(struct pt_regs, orig_rax): case offsetof(struct pt_regs, rip): case offsetof(struct pt_regs, cs): case offsetof(struct pt_regs, rsp): case offsetof(struct pt_regs, ss): break; default: if (!ASSERT_EQ(pp[i], pa[i], "register prog-after value check"))
fprintf(stdout, "failed register offset %u\n", offset);
}
}
/* * Borrowed from tools/testing/selftests/x86/test_shadow_stack.c. * * For use in inline enablement of shadow stack. * * The program can't return from the point where shadow stack gets enabled * because there will be no address on the shadow stack. So it can't use * syscall() for enablement, since it is a function. * * Based on code from nolibc.h. Keep a copy here because this can't pull * in all of nolibc.h.
*/ #define ARCH_PRCTL(arg1, arg2) \
({ \ long _ret; \ registerlong _num asm("eax") = __NR_arch_prctl; \ registerlong _arg1 asm("rdi") = (long)(arg1); \ registerlong _arg2 asm("rsi") = (long)(arg2); \
\ asmvolatile ( \ "syscall\n" \
: "=a"(_ret) \
: "r"(_arg1), "r"(_arg2), \ "0"(_num) \
: "rcx", "r11", "memory", "cc" \
); \
_ret; \
})
void test_uprobe_syscall(void)
{ if (test__start_subtest("uretprobe_regs_equal"))
test_uretprobe_regs_equal(); if (test__start_subtest("uretprobe_regs_change"))
test_uretprobe_regs_change(); if (test__start_subtest("uretprobe_syscall_call"))
test_uretprobe_syscall_call(); if (test__start_subtest("uretprobe_shadow_stack"))
test_uretprobe_shadow_stack();
}
Messung V0.5
¤ Dauer der Verarbeitung: 0.22 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.