DOKK / manpages / debian 10 / freebsd-manpages / SYSCALL_INIT_HELPER.9freebsd.en
SYSCALL_HELPER_REGISTER(9) Kernel Developer's Manual SYSCALL_HELPER_REGISTER(9)

syscall_helper_register, syscall_helper_unregisterkernel syscall registration routines

#include <sys/sysent.h>

int
syscall_helper_register(struct syscall_helper_data *sd, int flags);

int
syscall_helper_unregister(struct syscall_helper_data *sd);

struct syscall_helper_data
SYSCALL_INIT_HELPER(syscallname);

struct syscall_helper_data
SYSCALL_INIT_HELPER_F(syscallname, int flags);

struct syscall_helper_data
SYSCALL_INIT_HELPER_COMPAT(syscallname);

struct syscall_helper_data
SYSCALL_INIT_HELPER_COMPAT_F(syscallname, int flags);

The () 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;
};

The only valid flag for the flags argument to () is SY_THR_STATIC. This flag prevents the syscall from being unregistered.

Before use, the structure must be initialized with one of the () macros. In new code, syscall implementation functions shall be named () 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 () 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().

If successful, syscall_helper_register() and syscall_helper_unregister() will return 0. Otherwise, they will return an error.

The syscall_helper_register() call will fail and the syscall will not be registered if:

[]
The flags argument contained a value other than SY_THR_STATIC.
[]
The specified syscall number, sd.syscall_no (SYS_syscallname), was outside of the valid range of system call numbers (zero through SYS_MAXSYSCALL).
[]
The system call table does not have any available slots.
[]
The specified syscall number, sd.syscall_no (SYS_syscallname), was already in use.

SYSCALL_MODULE(9)

February 10, 2018 Debian