Scroll to navigation

PR_SET_SYSCALL_USER_DISPATCH(2const) PR_SET_SYSCALL_USER_DISPATCH(2const)

NUME

PR_SET_SYSCALL_USER_DISPATCH - stabilește mecanismul de dispecerizare a utilizatorului apelului de sistem pentru firul apelant

BIBLIOTECA

Biblioteca C standard (libc, -lc)

SINOPSIS

#include <linux/prctl.h>  /* Definirea constantelor PR_* */
#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);

DESCRIERE

Configurează mecanismul Syscall User Dispatch pentru firul apelant. Acest mecanism permite unei aplicații să intercepteze selectiv apelurile sistemului astfel încât acestea să poată fi gestionate în cadrul aplicației. Interceptarea ia forma unui semnal SIGSYS direcționat către fir care este transmis firului atunci când acesta efectuează un apel de sistem. Dacă este interceptat, apelul de sistem nu este executat de către nucleu.

Activează acest mecanism.
Odată activate, alte apeluri sistem vor fi interceptate selectiv, în funcție de o variabilă de control furnizată de spațiul utilizatorului. În acest caz, off și, respectiv, size identifică poziția și dimensiunea unei singure regiuni de memorie contigue din spațiul de adrese al procesului, din care se permite întotdeauna executarea apelurilor sistem, indiferent de variabila de control. (De obicei, această zonă ar include zona de memorie care conține biblioteca C).
switch indică o variabilă care este un comutator rapid pentru a permite/bloca executarea apelurilor de sistem fără a mai fi nevoie de un alt apel de sistem pentru a reconfigura Syscall User Dispatch. Această variabilă de control poate fi definită fie la SYSCALL_DISPATCH_FILTER_BLOCK pentru a bloca executarea apelurilor sistemului, fie la SYSCALL_DISPATCH_FILTER_ALLOW pentru a permite temporar executarea acestora. Această valoare este verificată de nucleu la fiecare intrare a apelului de sistem, iar orice valoare neașteptată va genera un SIGSYS de neatins în acel moment, omorând aplicația.
Atunci când un apel sistem este interceptat, nucleul trimite un semnal SIGSYS direcționat către firul declanșator. Diverse câmpuri vor fi definite în structura siginfo_t (a se vedea sigaction(2)) asociată cu semnalul:
si_signo va conține SIGSYS.
si_call_addr va afișa adresa instrucțiunii apelului de sistem.
si_syscall și si_arch vor indica ce apel de sistem a fost încercat.
si_code va conține SYS_USER_DISPATCH.
si_errno va fi stabilită la 0.
Contorul de program va fi ca și cum apelul de sistem ar fi avut loc (adică, contorul de program nu va indica instrucțiunea de apel de sistem).
Atunci când gestionarul de semnal returnează la nucleu, apelul de sistem se finalizează imediat și returnează la firul apelant, fără a fi executat efectiv. Dacă este necesar (de exemplu, la emularea apelului de sistem în spațiul utilizator), gestionarul de semnal ar trebui să definească valoarea de returnare a apelului de sistem la o valoare corectă, prin modificarea contextului registrului stocat în argumentul ucontext al gestionarului de semnal. Consultați sigaction(2), sigreturn(2) și getcontext(3) pentru mai multe informații.
Syscall User Dispatch este dezactivat pentru acest fir.

Parametrul nu este păstrat în fork(2), clone(2) sau execve(2).

VALOAREA RETURNATĂ

În caz de succes, se returnează 0. În caz de eroare, se returnează -1, iar errno este configurată pentru a indica eroarea.

ERORI-IEȘIRE

switch nu este o adresă validă.
op este PR_SYS_DISPATCH_ON și intervalul de memorie specificat este în afara spațiului de adrese al procesului.
op nu este valid.

STANDARDE

Linux. Doar x86.

ISTORIC

Linux 5.11 (x86).

CONSULTAȚI ȘI

prctl(2)

Pentru mai multe informații, consultați fișierul sursă al nucleului Documentation/admin-guide/syscall-user-dispatch.rst

TRADUCERE

Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.

1 iunie 2024 Pagini de manual de Linux 6.9.1