long syscall_trace_enter(struct pt_regs *regs, long syscall, unsignedlong work)
{ long ret = 0;
/* *HandleSyscallUserDispatch.Thismustcomesfirst,since *theABIherecanbesomethingthatdoesn'tmakesensefor *othersyscall_workfeatures.
*/ if (work & SYSCALL_WORK_SYSCALL_USER_DISPATCH) { if (syscall_user_dispatch(regs)) return -1L;
}
/* Handle ptrace */ if (work & (SYSCALL_WORK_SYSCALL_TRACE | SYSCALL_WORK_SYSCALL_EMU)) {
ret = ptrace_report_syscall_entry(regs); if (ret || (work & SYSCALL_WORK_SYSCALL_EMU)) return -1L;
}
/* Do seccomp after ptrace, to catch any tracer changes. */ if (work & SYSCALL_WORK_SECCOMP) {
ret = __secure_computing(); if (ret == -1L) return ret;
}
/* Either of the above might have changed the syscall number */
syscall = syscall_get_nr(current, regs);
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.