NAME
syscall_helper_register, syscall_helper_unregister — kernel syscall registration routinesSYNOPSIS
#include <sys/sysent.h> intsyscall_helper_register(struct syscall_helper_data *sd, int flags); int
syscall_helper_unregister(struct syscall_helper_data *sd);
INITIALIZER MACROS
struct syscall_helper_dataSYSCALL_INIT_HELPER(syscallname); struct syscall_helper_data
SYSCALL_INIT_HELPER_F(syscallname, int flags);
COMPATIBILITY INITIALIZER MACROS
struct syscall_helper_dataSYSCALL_INIT_HELPER_COMPAT(syscallname); struct syscall_helper_data
SYSCALL_INIT_HELPER_COMPAT_F(syscallname, int flags);
DESCRIPTION
The syscall_helper_register() registers a system call. This function takes the structure struct syscall_helper_data sd, which specifies the parameters for syscall registration:struct syscall_helper_data { struct sysent new_sysent; struct sysent old_sysent; int syscall_no; int registered; };
SY_THR_STATIC
. This flag prevents the
syscall from being unregistered.
Before use, the structure must be initialized with one of the
SYSCALL_INIT_HELPER*() macros. In new code,
syscall implementation functions shall be named
sys_syscallname() and the regular macros shall be
used.
For legacy syscall functions named without "sys_" prefixes, the
"COMPAT" versions of the macros may be used.
The only valid flag for the flags argument to
the "F" variants of the initializer macros is
SYF_CAPENABLED
. This flag indicates that
the syscall is allowed in capability mode.
The syscall_helper_unregister() unregisters a
system call. This function takes the same structure
struct syscall_helper_data sd that was
previously initialized in the manner described above and used in a successful
invocation of syscall_helper_register().
RETURN VALUES
If successful, syscall_helper_register() and syscall_helper_unregister() will return 0. Otherwise, they will return an error.ERRORS
The syscall_helper_register() call will fail and the syscall will not be registered if:- [
EINVAL
] - The flags argument
contained a value other than
SY_THR_STATIC
. - [
EINVAL
] - The specified syscall number,
sd.syscall_no
(SYS_syscallname
), was outside of the valid range of system call numbers (zero throughSYS_MAXSYSCALL
). - [
ENFILE
] - The system call table does not have any available slots.
- [
EEXIST
] - The specified syscall number,
sd.syscall_no
(SYS_syscallname
), was already in use.
SEE ALSO
SYSCALL_MODULE(9)February 10, 2018 | Debian |