PR_SET_SYSCALL_USER_DISPATCH(2const)

BEZEICHNUNG
PR_SET_SYSCALL_USER_DISPATCH - Setzt den Systemaufruf-Benutzer-Verteilungsmechanismus für den aufrufenden Thread

BIBLIOTHEK
Standard-C-Bibliothek (libc, -lc)

ÜBERSICHT
#include <linux/prctl.h>  /* Definition der PR_*-Konstanten */
#include <sys/prctl.h>

int prctl(PR_SET_SYSCALL_USER_DISPATCH, long Aktion, …);

int prctl(PR_SET_SYSCALL_USER_DISPATCH, PR_SYS_DISPATCH_ON,
          unsigned long Versatz, unsigned long Größe, int8_t *Schalter);
int prctl(PR_SET_SYSCALL_USER_DISPATCH, PR_SYS_DISPATCH_OFF, 0L, 0L, 0L);

BESCHREIBUNG
Konfiguriert den Systemaufruf-Benutzer-Verteilungsmechanismus für den aufrufenden Thread. Dieser Mechanismus ermöglicht es einer Anwendung, ausgewählt Systemaufrufe abzufangen, so dass diese in der Anwendung selbst bearbeitet werden können. Die Abfangung hat die Form eines auf den Thread gerichteten Signals SIGSYS, der an den Thread ausgeliefert wird, wenn er einen Systemaufruf ausführt. Falls der Systemaufruf abgefangen wird, wird er nicht vom Kernel ausgeführt.

PR_SYS_DISPATCH_ON
    Aktiviert diesen Mechanismus.

    Sobald er aktiviert ist, werden weitere Systemaufrufe ausgewählt abgefangen, abhängig von der vom Anwendungsraum bereitgestellten Steuervariable. In diesem Fall identifizieren Versatz bzw. Größe den Versatz und die Größe einer einzelnen, fortlaufenden Speicherregion im Prozess-Adressraum, aus dem die Ausführung von Systemaufrufen immer erlaubt ist, unabhängig von der Steuervariablen. (Normalerweise würde dieser Bereich den Speicherbereich enthalten, in dem sich die C-Bibliothek befindet.)

    Schalter zeigt auf eine Variable, die ein schneller Schalter zum Erlauben/Blockieren von Systemaufrufausführungen ist, ohne den Extraaufwand, der von Ausführung eines weiteren Systemaufrufs benötigt wird, um die Systemaufruf-Benutzerverteilung neu zu konfigurieren. Diese Steuervariable kann entweder auf SYSCALL_DISPATCH_FILTER_BLOCK gesetzt werden, um die Ausführung von Systemaufrufen zu blockieren oder auf SYSCALL_DISPATCH_FILTER_ALLOW, um temporär deren Ausführung zu erlauben. Diese Variable wird vom Kernel bei jedem Eintritt in Systemaufrufe überprüft und jeder unerwartete Wert wird zu diesem Zeitpunkt einen nicht abfangbaren SIGSYS auslösen, der die Anwendung beendet.

    Wenn ein Systemaufruf abgefangen wurde, sendet der Kernel ein an den auslösenden Thread gerichtetes Signal SIGSYS. In der Struktur siginfo_t werden verschiedene, dem Signal zugeordnete Felder gesetzt (Informationen hierzu in sigaction(2)):

    •   si_signo wird SIGSYS enthalten.

    •   si_call_addr wird die Adresse der Systemaufrufanweisung enthalten.

    •   si_syscall und si_arch werden anzeigen, welcher Systemaufruf versucht wurde.

    •   si_code wird SYS_USER_DISPATCH enthalten.

    •   si_errno wird auf 0 gesetzt.

    Der Programmzähler verhält sich so, als ob der Aufruf stattfand (d.h. der Programmzähler wird nicht auf die Systemaufrufanweisung zeigen).

    Wenn der Signal-Handler in den Kernel zurückkehrt, wird der Systemaufruf sofort abgeschlossen und zu dem aufrufenden Thread zurückgekehrt, ohne dass er tatsächlich ausgeführt wird. Falls notwendig (d.h. bei der Emulierung eines Systemaufrufs im Benutzerraum) sollte der Signal-Handler den Rückgabewert des Systemaufrufs auf einen vernünftigen Wert setzen, indem er den im Argument ucontext des Signal-Handlers gespeicherten Registerkontext verändert. Weitere Informationen hierzu finden Sie in sigaction(2), sigreturn(2) und getcontext(3).

PR_SYS_DISPATCH_OFF
    Der Systemaufruf-Benutzer-Verteilungsmechanismus ist für diesen Thread deaktiviert.

Diese Einstellung wird nicht über fork(2), clone(2) oder execve(2) hinweg erhalten.

RÜCKGABEWERT
Bei Erfolg wird 0 zurückgegeben. Bei einem Fehler wird -1 zurückgegeben und errno gesetzt, um den Fehler anzuzeigen.

FEHLER

EFAULT
    Schalter ist eine ungültige Adresse.

EINVAL
    Aktion ist PR_SYS_DISPATCH_ON und der angegebene Speicherbereich ist außerhalb des Adressraums des Prozesses.

EINVAL
    Aktion ist ungültig.

STANDARDS
Linux. Nur X86.

GESCHICHTE
Linux 5.11 (X86).

SIEHE AUCH
prctl(2)

Weitere Informationen finden Sie in der Kernelquelldatei Documentation/admin-guide/syscall-user-dispatch.rst.

ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Helge Kreutzmann <debian@helgefjell.de> erstellt.

Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 (https://www.gnu.org/licenses/gpl-3.0.html) oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.

Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Übersetzer (debian-l10n-german@lists.debian.org).