dwww Home | Manual pages | Find package

PR_SET_SYSCALL_USER_DISPATCH(2const)       PR_SET_SYSCALL_USER_DISPATCH(2const)

NAME
       PR_SET_SYSCALL_USER_DISPATCH  - set the system-call user dispatch mecha-
       nism for the calling thread

LIBRARY
       Standard C library (libc, -lc)

SYNOPSIS
       #include <linux/prctl.h>  /* Definition of PR_* constants */
       #include <sys/prctl.h>

       int prctl(PR_SET_SYSCALL_USER_DISPATCH, long op, ...);

       int prctl(PR_SET_SYSCALL_USER_DISPATCH, PR_SYS_DISPATCH_ON,
                 unsigned long off, unsigned long size, int8_t *switch);
       int prctl(PR_SET_SYSCALL_USER_DISPATCH, PR_SYS_DISPATCH_OFF, 0L, 0L, 0L);

DESCRIPTION
       Configure the Syscall User Dispatch mechanism for  the  calling  thread.
       This  mechanism  allows  an  application to selectively intercept system
       calls so that they can be handled within the application itself.  Inter-
       ception takes the form of a thread-directed SIGSYS signal that is deliv-
       ered to the thread when it makes a system  call.   If  intercepted,  the
       system call is not executed by the kernel.

       PR_SYS_DISPATCH_ON
              Enable this mechanism.

              Once  enabled,  further  system  calls will be selectively inter-
              cepted, depending on a control variable provided by  user  space.
              In  this  case, off and size respectively identify the offset and
              size of a single contiguous memory region in the process  address
              space  from where system calls are always allowed to be executed,
              regardless of the control variable.  (Typically, this area  would
              include the area of memory containing the C library.)

              switch  points to a variable that is a fast switch to allow/block
              system call execution without the overhead of doing another  sys-
              tem  call  to  re-configure  Syscall User Dispatch.  This control
              variable can either be set  to  SYSCALL_DISPATCH_FILTER_BLOCK  to
              block  system  calls  from  executing or to SYSCALL_DISPATCH_FIL-
              TER_ALLOW to temporarily allow them to be executed.   This  value
              is  checked by the kernel on every system call entry, and any un-
              expected value will raise an uncatchable  SIGSYS  at  that  time,
              killing the application.

              When  a system call is intercepted, the kernel sends a thread-di-
              rected SIGSYS signal to the triggering  thread.   Various  fields
              will be set in the siginfo_t structure (see sigaction(2)) associ-
              ated with the signal:

              •  si_signo will contain SIGSYS.

              •  si_call_addr will show the address of the system call instruc-
                 tion.

              •  si_syscall and si_arch will indicate which system call was at-
                 tempted.

              •  si_code will contain SYS_USER_DISPATCH.

              •  si_errno will be set to 0.

              The  program  counter  will be as though the system call happened
              (i.e., the program counter will not point to the system call  in-
              struction).

              When  the  signal  handler returns to the kernel, the system call
              completes immediately and returns to the calling thread,  without
              actually  being executed.  If necessary (i.e., when emulating the
              system call on user space.), the signal handler  should  set  the
              system call return value to a sane value, by modifying the regis-
              ter  context  stored  in the ucontext argument of the signal han-
              dler.  See sigaction(2), sigreturn(2), and getcontext(3) for more
              information.

       PR_SYS_DISPATCH_OFF
              Syscall User Dispatch is disabled for that thread.

       The setting is not preserved across fork(2), clone(2), or execve(2).

RETURN VALUE
       On success, 0 is returned.  On error, -1 is returned, and errno  is  set
       to indicate the error.

ERRORS
       EFAULT switch is an invalid address.

       EINVAL op  is  PR_SYS_DISPATCH_ON and the memory range specified is out-
              side the address space of the process.

       EINVAL op is invalid.

STANDARDS
       Linux.  x86 only.

HISTORY
       Linux 5.11 (x86).

SEE ALSO
       prctl(2)

       For more information,  see  the  kernel  source  file  Documentation/ad-
       min-guide/syscall-user-dispatch.rst

Linux man-pages 6.9.1              2024-06-PR_SET_SYSCALL_USER_DISPATCH(2const)

Generated by dwww version 1.16 on Tue Dec 16 04:26:38 CET 2025.