oracular (2) prctl.2.gz

Provided by: manpages-fr-dev_4.23.1-1_all bug

NOM

       prctl - Opérations sur un processus ou un thread

BIBLIOTHÈQUE

       Bibliothèque C standard (libc, -lc)

SYNOPSIS

       #include <sys/prctl.h>

       int prctl(int op, ...
                 /* unsigned long arg2, unsigned long arg3,
                 unsigned long arg4, unsigned long arg5 */ );

DESCRIPTION

       prctl() gère divers aspects du comportement du thread ou du processus appelant.

       Notez  qu'une  utilisation  peu  soigneuse de certaines opérations de prctl() peut perdre l'environnement
       d’exécution de l'espace utilisateur, donc il faut les utiliser avec rigueur.

       prctl() est invoqué avec un premier paramètre indiquant ce qu'il faut faire, (ses valeurs  sont  définies
       dans  <linux/prctl.h>),  et  des  paramètres  supplémentaires  dont  la  signification  dépend du premier
       paramètre. Celui-ci peut être :

       PR_CAP_AMBIENT (depuis Linux 4.3)
              Lire ou modifier l'ensemble environnant des capacités  paramétrées  sur  le  thread  appelant,  en
              fonction de la valeur de arg2, qui doit être une des suivantes :

              PR_CAP_AMBIENT_RAISE
                     La  capacité  indiquée  dans arg3 est ajoutée à l'ensemble environnant. Elle doit être déjà
                     présente dans les ensembles environnants autorisés et hérités du processus. Cette opération
                     n'est pas autorisée si le bit de sécurité SECBIT_NO_CAP_AMBIENT_RAISE est positionné.

              PR_CAP_AMBIENT_LOWER
                     La capacité indiquée dans arg3 est supprimée de l'ensemble environnant.

              PR_CAP_AMBIENT_IS_SET
                     L'appel prctl() renvoie 1 si la capacité indiquée dans arg3 est dans l'ensemble environnant
                     et, sinon, 0.

              PR_CAP_AMBIENT_CLEAR_ALL
                     Toutes les capacités seront supprimées de l'ensemble environnant. Cette opération  implique
                     que arg3 soit positionné sur zéro.

              Dans toutes les opérations ci-dessus, arg4 et arg5 doivent valoir 0.

              Des  interfaces  de  plus haut niveau qui constituent la couche au-dessus des opérations ci-dessus
              sont fournies dans la bibliothèque libcap(3) sous la forme cap_get_ambient(3), cap_set_ambient(3),
              et cap_reset_ambient(3).

       PR_CAPBSET_READ (depuis Linux 2.6.25)
              Renvoyer (en résultat de fonction) 1 si la capacité indiquée par arg2 est présente dans l’ensemble
              limitant de capacités du thread appelant ou 0 si elle ne l'est pas. Les constantes  des  capacités
              sont  définies  dans  <linux/capability.h>.  L'ensemble  limitant  les  capacités  contrôle  si le
              processus peut recevoir la capacité par un ensemble de capacités autorisées pour un  fichier  lors
              d'un appel futur à execve(2).

              Si la capacité indiquée dans arg2 n'est pas valable, alors l'appel échoue avec l'erreur EINVAL.

              Une  interface  de  plus  haut niveau constituant la couche par-dessus cette opération est fournie
              dans la bibliothèque libcap(3) sous la forme cap_get_bound(3).

       PR_CAPBSET_DROP (depuis Linux 2.6.25)
              Si le thread appelant a la capacité CAP_SETPCAP dans son espace de noms utilisateur, alors enlever
              la  capacité  indiquée par arg2 dans l'ensemble de limitation de capacités du thread appelant. Les
              enfants du thread appelant hériteront de cette nouvelle limitation de capacités réduite.

              L'appel échoue avec l'erreur EPERM si le thread appelant n'a pas la capacité CAP_SETPCAP ; ou avec
              l'erreur  EINVAL  si arg2 ne représente pas une capacité correcte ; ou avec l'erreur EINVAL si les
              capacités de fichier ne sont pas activées dans le noyau, auquel cas les limitations  ne  sont  pas
              prises en charge par le noyau.

              Une  interface  de plus haut niveau constituant la couche au-dessus de cette opération est fournie
              par la bibliothèque libcap(3) sous la forme cap_drop_bound(3).

       PR_SET_CHILD_SUBREAPER (depuis Linux 3.4)
              Si arg2 ne vaut pas zéro, positionner l'attribut « child subreaper » du  processus  appelant ;  si
              arg2 vaut zéro, déconfigurer l'attribut.

              Un  subreaper (suppresseur) joue le rôle de init(1) pour ses processus enfants. Quand un processus
              devient orphelin (c'est-à-dire, que son parent le plus  proche  se  termine),  ce  processus  sera
              adopté  par  le  subreaper  parent  toujours  vivant  le  plus  proche. Par conséquent, les appels
              getppid(2) dans le processus orphelin renverront désormais l'identifiant de processus du subreaper
              et  quand  l'orphelin  se terminera, c'est le processus subreaper qui recevra le signal SIGCHLD et
              pourra surveiller (wait(2)) le processus pour détecter son état de fin.

              Le paramètre de l'attribut « child subreaper » n'est  pas  récupéré  par  les  enfants  créés  par
              fork(2) et clone(2). Le paramètre est préservé lors d'un execve(2).

              Établir  un  processus  subreaper  est  utile dans les environnements de gestion de sessions où un
              groupe hiérarchique de processus est géré par un processus subreaper qui a besoin de savoir  quand
              un  des  processus  — par  exemple,  un démon forké deux fois — se termine (pour pouvoir peut-être
              redémarrer  ce  processus).  Certains  environnements  init(1)  (comme  systemd(1))  utilisent  un
              processus subreaper pour les mêmes raisons.

       PR_GET_CHILD_SUBREAPER (depuis Linux 3.4)
              Renvoyer  l'état  « child subreaper » du processus appelant, dans l'emplacement pointé par (int *)
              arg2.

       PR_SET_DUMPABLE (depuis Linux 2.3.20)
              Définir l'état de l'attribut « dumpable » qui détermine si les fichiers de vidages  mémoire  (core
              dump) sont produits pour le processus appelant lors de l'envoi du signal, dont le comportement par
              défaut est de produire un fichier d’image mémoire.

              Dans les noyaux jusqu'à 2.6.12 inclus, arg2  doit  valoir  0  (SUID_DUMP_DISABLE,  pas  de  vidage
              mémoire)  ou  1  (SUID_DUMP_USER, vidage possible). Entre les noyaux 2.6.13 et 2.6.17, la valeur 2
              était également autorisée ; elle permettait à un binaire qui  ne  produirait  normalement  pas  de
              fichier de vidage d'en créer un lisible uniquement par root ; cette fonctionnalité a été supprimée
              pour des raisons de sécurité (consultez aussi la description  de  /proc/sys/fs/suid_dumpable  dans
              proc(5)).

              Normalement,  l'attribut  « dumpable »  est  positionné sur 1. Cependant, il est positionné sur la
              valeur actuelle du fichier /proc/sys/fs/suid_dumpable (qui a une valeur de 0 par défaut), dans les
              circonstances suivantes :

              -  L'identifiant d'utilisateur ou de groupe effectif du processus a été modifié.

              -  L'identifiant  d'utilisateur  ou  de  groupe  du système de fichiers du processus a été modifié
                 (voir credentials(7)).

              -  Le processus exécute (execve(2)) un programme set-user-ID ou set-group-ID, ce qui fait  changer
                 l'identifiant d'utilisateur ou de groupe effectif.

              -  Le   processus  exécute  (execve(2))  un  programme  qui  a  les  capacités  de  fichier  (voir
                 capabilities(7)), mais seulement si les capacités acquises ainsi  autorisées  dépassent  celles
                 autorisées pour le processus.

              Les  processus  qui ne génèrent pas de fichier de vidage ne peuvent pas être rattachés à l'aide de
              PTRACE_ATTACH de ptrace(2) ; voir ptrace(2) pour plus de détails.

              Si un processus ne génère pas de fichier de vidage,  l'appartenance  des  fichiers  du  répertoire
              /proc/pid du processus est modifiée comme le décrit proc(5).

       PR_GET_DUMPABLE (depuis Linux 2.3.20)
              Renvoyer (en résultat de fonction) l'état actuel de l'attribut de création de fichier de vidage du
              processus appelant.

       PR_SET_ENDIAN (depuis Linux 2.6.18, seulement sur PowerPC)
              Définir le boutisme (endianness) du processus appelant à la valeur donnée dans arg2, qui doit être
              l'une  des  valeurs  suivantes : PR_ENDIAN_BIG, PR_ENDIAN_LITTLE, ou PR_ENDIAN_PPC_LITTLE (PowerPC
              pseudo petit boutiste).

       PR_GET_ENDIAN (depuis Linux 2.6.18, seulement sur PowerPC)
              Renvoyer le boutisme (endianness) du processus appelant, dans  l'emplacement  pointé  par  (int *)
              arg2.

       PR_SET_FP_MODE (depuis Linux 4.0, seulement sur MIPS)
              Sur  l'architecture  MIPS,  le code en espace utilisateur peut être construit en utilisant une ABI
              qui permet l'édition de liens avec du code ayant des exigences  de  virgule  flottante  (FP)  plus
              restrictives.  Par  exemple,  un  code en espace utilisateur peut être construit pour cibler l'ABI
              FPXX O32 et lié au code construit pour une ou plusieurs ABI plus restrictives FP32 ou FP64.  Quand
              du  code plus restrictif est lié, l'exigence supplémentaire du processus est d'utiliser le mode de
              virgule flottante plus restrictif.

              Le noyau n'ayant aucun moyen de savoir à l'avance  le  mode  dans  lequel  doit  être  exécuté  le
              processus,   et  ces  restrictions  pouvant  changer  durant  la  vie  du  processus,  l'opération
              PR_SET_FP_MODE est fournie pour permettre un contrôle du mode de virgule  flottante  à  partir  de
              l'espace utilisateur.

              L'argument  (unsigned  int)  arg2  est  un  masque  de bits décrivant le mode de virgule flottante
              utilisé :

              PR_FP_MODE_FR
                     Quand le bit est unset (ce qui est appelé le mode FR=0 ou FR0), les registres 32 de virgule
                     flottante ont une taille de 32 bits et ceux 64 bits sont représentés sous forme de paire de
                     registres (numérotés par un nombre pair ou impair, avec  le  registre  pair  contenant  les
                     32 bits de poids faible et celui impair contenant les 32 bits de poids fort).

                     Quand  ce  bit  est  set  (sur  le  matériel  pris  en charge), les registres 32 de virgule
                     flottante ont une taille de 64 bits (ce qui est appelé le mode FR=1 ou FR1). Remarquez  que
                     les implémentations MIPS modernes (MIPS R6 et plus récentes) ne gèrent que le mode FR=1.

                     Les applications qui utilisent l'ABI O32 FP32 ne peuvent fonctionner que lorsque ce bit est
                     unset (FR=0 ; ou elles peuvent être  utilisées  avec  FRE  activé,  voir  ci-dessous).  Les
                     applications  qui  utilisent  l'ABI O32 FP64  (et l'ABI O32 FP64A qui existe pour offrir la
                     capacité d'agir avec le code FP32 existant ; voir ci-dessous) ne peuvent agir que quand  ce
                     bit est set (FR=1). Les applications qui utilisent l'ABI O32 FPXX peuvent agir avec FR=0 ou
                     FR=1.

              PR_FP_MODE_FRE
                     Activer l'émulation du mode flottant 32 bits. Quand  ce  mode  est  activé,  il  émule  les
                     opérations de virgule flottante 32 bits en plaçant une exception d'instruction réservée sur
                     chaque instruction utilisant les  formats  32 bits  et  le  noyau  prend  alors  en  charge
                     l'instruction  au  niveau  logiciel  (c'est  le  problème  du décalage entre la gestion des
                     registres aux numéros pairs , qui sont les 32 bits supérieurs des registres  64 bits  ayant
                     les  numéros  impairs  en  mode  FR=0, et les parties 32 bits de poids faible des registres
                     64 bits de numéros impairs en mode FR=1). L'activation de ce bit  est  nécessaire  pour  du
                     code  dont  l'ABI  O32  FP3 doit agir sur du code ayant des ABI compatibles O32 FPXX ou O32
                     FP64A (ce qui implique le mode FR=1 FPU), ou lorsqu'il est exécuté  sur  du  matériel  plus
                     récent  (après MIPS R6) qui ne prend pas en charge le mode FR=0 quand un binaire avec l'ABI
                     FP32 est utilisé.

                     Remarquez que ce mode n'a de sens que lorsque le FPU est en mode 64 bits (FR=1).

                     Remarquez que l'utilisation de l'émulation a par  nature  des  conséquences  en  termes  de
                     performance et qu’elle doit être évitée si possible.

              Dans  l'ABI  N32/N64,  le  mode de virgule flottante 64 bits est toujours utilisé, l'émulation FPU
              n'est donc pas nécessaire et le mode FPU agit toujours en mode FR=1.

              Cette opération vise principalement les éditeurs de liens dynamiques (ld.so(8)).

              Les paramètres arg3, arg4 et arg5 sont ignorés.

       PR_GET_FP_MODE (depuis Linux 4.0, seulement sur MIPS)
              Renvoyer (comme résultat de la fonction) le mode de virgule flottante actuel (voir la  description
              de PR_SET_FP_MODE pour les détails).

              En  cas  de  succès, l'appel renvoie un masque de bits qui représente le mode de virgule flottante
              actuel.

              Les paramètres arg2, arg3, arg4 et arg5 sont ignorés.

       PR_SET_FPEMU (depuis Linux 2.4.18, 2.5.9, seulement sur ia64)
              Définir les bits de contrôle de l'émulation de virgule flottante à arg2.  Passer  PR_FPEMU_NOPRINT
              pour  émuler  silencieusement  les opérations de virgule flottante, ou PR_FPEMU_SIGFPE pour ne pas
              émuler ces opérations et envoyer SIGFPE.

       PR_GET_FPEMU (depuis Linux 2.4.18, 2.5.9, seulement sur ia64)
              Renvoyer les bits de contrôle de l'émulation de FPU dans l'emplacement vers lequel pointe  (int *)
              arg2.

       PR_SET_FPEXC (depuis Linux 2.4.21, 2.5.32, seulement sur PowerPC)
              Définir le mode d'exception de virgule flottante à arg2. Passer la valeur PR_FP_EXC_SW_ENABLE pour
              utiliser FPEXC pour activer les exceptions  de  flottant,  PR_FP_EXC_DIV  pour  les  divisions  de
              flottant  par  zéro,  PR_FP_EXC_OVF  pour les dépassements de capacité vers le haut, PR_FP_EXC_UND
              pour les dépassements de capacité vers le  bas,  PR_FP_EXC_RES  pour  les  résultats  de  flottant
              inexacts,  PR_FP_EXC_INV  pour  les  opérations  de flottant non valables, PR_FP_EXC_DISABLED pour
              désactiver les exceptions de flottant, PR_FP_EXC_NONRECOV pour le mode d'exception asynchrone  non
              récupérable,  PR_FP_EXC_ASYNC  pour  le mode d'exception asynchrone récupérable, PR_FP_EXC_PRECISE
              pour le mode d'exception de précision.

       PR_GET_FPEXC (depuis Linux 2.4.21, 2.5.32, seulement sur PowerPC)
              Renvoyer le mode d'exception de virgule flottante dans l'emplacement vers  lequel  pointe  (int *)
              arg2.

       PR_SET_IO_FLUSHER (depuis Linux 5.6)
              Si  le  processus  d'un  utilisateur  est  impliqué  dans la couche de blocs ou le chemin d'E/S du
              système de fichiers, et s'il peut allouer de la mémoire en traitant  les  requêtes  E/S,  il  doit
              positionner  arg2  sur  1.  Cela  mettra  le  processus  en état IO_FLUSHER, ce qui lui accorde un
              traitement spécial pour progresser lors de  l'allocation  de  la  mémoire.  Si  arg2  vaut  0,  le
              processus effacera l'état IO_FLUSHER et le comportement par défaut sera utilisé.

              Le processus appelant doit avoir la capacité CAP_SYS_RESOURCE.

              arg3, arg4 et arg5 doivent valoir 0.

              L'état IO_FLUSHER est récupéré par un processus enfant créé à l'aide de fork(2) et il est préservé
              pendant un execve(2).

              Des exemples d'applications IO_FLUSHER sont les démons FUSE,  ceux  d'émulation  de  périphériques
              SCSI et ceux gérant des erreurs comme les applications de récupération de chemins multipath.

       PR_GET_IO_FLUSHER (depuis Linux 5.6)
              Renvoyer  (en  tant  que résultat de la fonction) l'état IO_FLUSHER de l'appelant. Une valeur de 1
              indique que l'appelant est dans l'état IO_FLUSHER ; 0 indique qu'il n'est pas dans cet état.

              Le processus appelant doit avoir la capacité CAP_SYS_RESOURCE.

              arg2, arg3, arg4 et arg5 doivent valoir zéro.

       PR_SET_KEEPCAPS (depuis Linux 2.2.18)
              Définir l'état de l'attribut « keep capabilities » du thread appelant. L'effet de cet attribut est
              décrit  dans  capabilities(7).  arg2  doit valoir soit 0 (effacer l'attribut), soit 1 (positionner
              l'attribut). La valeur de « keep capabilities » sera remise  à  0  lors  des  prochains  appels  à
              execve(2).

       PR_GET_KEEPCAPS (depuis Linux 2.2.18)
              Renvoyer  (en  résultat  de fonction) l'état actuel de l'attribut de conservation des capacités du
              thread appelant. Voir capabilities(7) pour une description de cet attribut.

       PR_MCE_KILL (depuis Linux 2.6.32)
              Définir la politique de suppression de mémoire corrompue de la machine pour le thread  actuel.  Si
              arg2  vaut PR_MCE_KILL_CLEAR, effacer la politique de suppression de mémoire corrompue et utiliser
              la valeur par défaut du système  (qui  est  définie  dans  /proc/sys/vm/memory_failure_early_kill,
              consultez proc(5)). Si arg2 vaut PR_MCE_KILL_SET, utiliser une politique de suppression de mémoire
              corrompue spécifique au thread. Dans ce cas, arg3 définit si la  politique  est  immédiate  (early
              kill  avec PR_MCE_KILL_EARLY), différée (late kill avec PR_MCE_KILL_LATE), ou la valeur par défaut
              du système (PR_MCE_KILL_DEFAULT). Une suppression immédiate  signifie  que  le  thread  reçoit  un
              signal  SIGBUS  dès  que la corruption mémoire matérielle est détectée à l'intérieur de son espace
              d'adressage. En mode différé, le processus n'est tué que lorsqu'il accède à  une  page  corrompue.
              Consultez  sigaction(2) pour plus d'informations sur le signal SIGBUS. Cette politique est héritée
              par les enfants. Les arguments restants de prctl(), non utilisés, doivent être  mis  à  zéro  pour
              préparer la future compatibilité.

       PR_MCE_KILL_GET (depuis Linux 2.6.32)
              Renvoyer  (comme  résultat  de  la fonction) la politique actuelle par processus de suppression de
              mémoire corrompue. Tous les arguments de prctl() non utilisés doivent être zéro

       PR_SET_MM (depuis Linux 3.3)
              Modifier certains champs du descripteur de projection  de  mémoire  du  noyau  pour  le  processus
              appelant.  D'habitude,  ces champs sont déterminés par le noyau et le chargeur de liens dynamiques
              (consultez ld.so(8) pour plus d'informations) et une application normale ne devrait  pas  utiliser
              cette  fonctionnalité.  En revanche, dans certaines situations, telles que celles de programmes se
              modifiant eux-mêmes, un programme pourra trouver utile de pouvoir changer sa propre projection  en
              mémoire.

              Le  processus  appelant  doit  avoir  la  capacité CAP_SYS_RESOURCE. La valeur de arg2 est une des
              options ci-dessous, tandis que arg3 fournit la nouvelle valeur pour l'option.  Les  paramètres  de
              arg4 et de arg5 doivent être de 0 s'ils ne sont pas utilisés.

              Avant  Linux 3.10,  cette  fonctionnalité  n'est  disponible  que  si  le noyau est construit avec
              l'option CONFIG_CHECKPOINT_RESTORE.

              PR_SET_MM_START_CODE
                     Définir l'adresse au dessus de laquelle le texte du programme peut être exécuté. La zone de
                     mémoire  correspondante  doit  être  accessible  en  lecture  et  en exécution, mais pas en
                     écriture et ne doit pas pouvoir être partagée (consultez mprotect(2) et mmap(2)  pour  plus
                     d'informations).

              PR_SET_MM_END_CODE
                     Définir  l'adresse  en dessous de laquelle le texte du programme peut être exécuté. La zone
                     de mémoire correspondante doit être accessible en lecture et  en  exécution,  mais  pas  en
                     écriture et ne doit pas pouvoir être partagée.

              PR_SET_MM_START_DATA
                     Définir  l'adresse au-dessus de laquelle les données initialisées et non initialisées (bss)
                     sont placées. La zone de mémoire correspondante doit  être  accessible  en  lecture  et  en
                     écriture, mais pas en exécution et ne doit pas pouvoir être partagée.

              PR_SET_MM_END_DATA
                     Définir l'adresse en dessous de laquelle les données initialisées et non initialisées (bss)
                     sont placées. La zone de mémoire correspondante doit  être  accessible  en  lecture  et  en
                     écriture, mais pas en exécution et ne doit pas pouvoir être partagée.

              PR_SET_MM_START_STACK
                     Sélectionner  l'adresse  du début de la pile. La région de mémoire correspondante doit être
                     accessible en lecture et en écriture.

              PR_SET_MM_START_BRK
                     Sélectionner l'adresse au-dessus de laquelle le tas du  programme  peut  être  étendu  avec
                     l'appel  brk(2). L'adresse doit être au-dessus de l'adresse terminant le segment de données
                     actuel du programme. De plus, la taille combinée du tas obtenu et du segment de données  ne
                     peut pas dépasser la limite de ressource RLIMIT_DATA (consultez setrlimit(2)).

              PR_SET_MM_BRK
                     Sélectionnez la valeur actuelle de brk(2). Les conditions pour l'adresse sont les mêmes que
                     pour l'option PR_SET_MM_START_BRK.

              Les options suivantes sont disponibles depuis Linux 3.5.

              PR_SET_MM_ARG_START
                     Sélectionner l'adresse au-dessus de laquelle la ligne de commande du programme est placée.

              PR_SET_MM_ARG_END
                     Sélectionner l'adresse en dessous de laquelle la ligne de commande du programme est placée.

              PR_SET_MM_ENV_START
                     Sélectionner l'adresse au-dessus de laquelle l'environnement du programme est placé.

              PR_SET_MM_ENV_END
                     Sélectionner l'adresse en dessous de laquelle l'environnement du programme est placé.

                     L'adresse    transmise    au    moyen    de     PR_SET_MM_ARG_START,     PR_SET_MM_ARG_END,
                     PR_SET_MM_ENV_START  et  de PR_SET_MM_ENV_END doit appartenir à l'espace mémoire d'une pile
                     de processus. Par conséquent,  l'espace  mémoire  correspondant  doit  être  accessible  en
                     lecture,  en  écriture  et  (selon  la  configuration  du  noyau)  disposer  de  l'attribut
                     MAP_GROWSDOWN défini (consultez mmap(2)).

              PR_SET_MM_AUXV
                     Sélectionner le nouveau vecteur auxiliaire. Le paramètre arg3  doit  fournir  l'adresse  du
                     vecteur. Le paramètre arg4 est la taille du vecteur.

              PR_SET_MM_EXE_FILE
                     Remplacer  le  lien  symbolique  /proc/pid/exe par un nouveau lien pointant vers un nouveau
                     fichier exécutable identifié par le descripteur de fichier fourni  à  l'aide  du  paramètre
                     arg3. Le descripteur de fichier peut être obtenu au moyen d'un appel à open(2).

                     Pour  changer  le lien symbolique, il faut supprimer tous les espaces alloués en mémoire et
                     contenant du code exécutable, y compris ceux créés par le noyau (par exemple, le noyau crée
                     en général au moins un espace mémoire d'exécutable pour la section ELF .text).

                     Sur  Linux 4.9  et antérieurs, l'opération PR_SET_MM_EXE_FILE ne peut être effectuée qu'une
                     fois dans la vie d'un processus ; si on l'effectue une seconde fois, elle donnera  l'erreur
                     EPERM.  Cette  restriction  a  été  renforcée pour des raisons de sécurité jugées plus tard
                     curieuses, donc la restriction a été supprimée dans Linux 4.10 car  certaines  applications
                     en espace utilisateur avaient besoin d'effectuer cette opération plus d'une fois.

              Les options suivantes sont disponibles depuis Linux 3.18.

              PR_SET_MM_MAP
                     Fournir  un  accès  unique  à toutes les adresses en passant une struct prctl_mm_map (comme
                     défini dans <linux/prctl.h>). Le paramètre arg4 doit fournir la taille de la structure.

                     Cette fonctionnalité n'est disponible que  si  le  noyau  a  été  construit  avec  l'option
                     CONFIG_CHECKPOINT_RESTORE activée.

              PR_SET_MM_MAP_SIZE
                     Renvoyer  la taille attendue par le noyau de la struct prctl_mm_map. Cela permet à l'espace
                     utilisateur de trouver une structure compatible. Le paramètre arg4 doit  être  un  pointeur
                     vers un entier non signé.

                     Cette  fonctionnalité  n'est  disponible  que  si  le  noyau  a été construit avec l'option
                     CONFIG_CHECKPOINT_RESTORE activée.

       PR_SET_VMA (depuis Linux 5.17)
              Positionner un attribut indiqué dans arg2 pour  les  zones  de  mémoire  virtuelles  commençant  à
              l'adresse  indiquée  dans arg3 et couvrant la taille indiquée dans arg4. arg5 indique la valeur de
              l'attribut à positionner.

              Remarquez que l'affectation d'un attribut à une zone de mémoire virtuelle pourrait  l'empêcher  de
              se fusionner avec les zones adjacentes du fait d'une différence de valeur de cet attribut.

              Actuellement, arg2 doit valoir une des valeurs suivantes :

              PR_SET_VMA_ANON_NAME
                     Définir  un  nom  pour  les zones de mémoire virtuelle anonymes. arg5 doit être un pointeur
                     vers une chaîne se terminant par l’octet NULL contenant le nom. La taille du nom, y compris
                     l'octet  NULL,  ne  peut  pas  dépasser  80 octets.  Si arg5 vaut NULL, le nom des zones de
                     mémoire virtuelle anonymes adéquat sera réinitialisé. Le  nom  ne  peut  contenir  que  des
                     caractères ASCII imprimables (dont des espaces), sauf « [ », « ] », « \ », « $ » et « ` ».

       PR_MPX_ENABLE_MANAGEMENT
       PR_MPX_DISABLE_MANAGEMENT (depuis Linux 3.19, supprimée dans Linux 5.4 ; seulement sur x86)
              Activer  ou  désactiver  la  gestion  par  le  noyau  des  tables de limitations Memory Protection
              eXtensions (MPX). Les paramètres arg2, arg3, arg4 et arg5 doivent valoir zéro.

              MPX est un mécanisme assisté par le matériel pour effectuer  des  contrôles  de  limites  sur  les
              pointeurs.  Il  consiste dans un ensemble de registres stockant les informations des limites et un
              ensemble de préfixes d'instruction spéciaux qui disent au processeur  sur  quelle  instruction  il
              doit  poser  des  limites  renforcées. Il existe un nombre limité de ces registres et quand il y a
              plus de pointeurs que de registres, leur contenu doit être « déversé » (spilled) dans un  ensemble
              de  tables. Ces tables s'appellent des « bounds tables » et les opérations prctl() de MPX décident
              si le noyau gère leur allocation ou leur libération.

              Quand la gestion est activée, le noyau prendra en charge l'allocation et la libération des  tables
              de  limites.  Il  le fait en piégeant les exceptions #BR qui conduisent d’abord à l'utilisation de
              tables de limites manquantes, et au lieu d'envoyer l'exception à l'espace utilisateur,  il  alloue
              la  table  et  remplit  le répertoire des limites avec l'emplacement de la nouvelle table. Pour la
              libération, le noyau vérifie dans les tables de limites la présence de mémoire non allouée et  les
              libère.

              Avant  d'activer  la gestion MPX en utilisant PR_MPX_ENABLE_MANAGEMENT, l'application doit d'abord
              avoir alloué un tampon  dans  l'espace  utilisateur  pour  le  répertoire  de  limites,  et  placé
              l'emplacement de ce répertoire dans le registre bndcfgu.

              Ces  appels  échouent  si  le  processeur ou le noyau ne gèrent pas MPX. La prise en charge par le
              noyau de MPX s'active avec l'option de configuration CONFIG_X86_INTEL_MPX.  Vous  pouvez  vérifier
              que  le processeur prend en charge MPX en recherchant le bit de CPUID mpx, avec une commande telle
              que :

                  cat /proc/cpuinfo | grep ' mpx '

              Il se peut qu'un thread ne bascule pas en ou hors du mode long (64 bits) quand MPX est activé.

              Tous les threads d'un processus sont concernés par ces appels.

              L'enfant d'un fork(2) hérite de l'état de la gestion MPX. Pendant un execve(2), la gestion MPX est
              réinitialisée à un état tel que si PR_MPX_DISABLE_MANAGEMENT avait été appelé.

              Pour  plus d'informations sur le MPX d'Intel, consultez le fichier Documentation/x86/intel_mpx.txt
              dans les sources du noyau.

              Du fait d'un manque de  prise  en  charge  de  l'ensemble  d'outils,  PR_MPX_ENABLE_MANAGEMENT  et
              PR_MPX_DISABLE_MANAGEMENT ne sont pas gérés dans Linux 5.4 et ultérieurs.

       PR_SET_NAME (depuis Linux 2.6.9)
              Définir  le  nom  du  thread  appelant, en utilisant la valeur de l'emplacement vers lequel pointe
              (char *) arg2. Le nom peut avoir jusqu'à 16 octets de long, y compris l’octet NULL final  (en  cas
              de  dépassement,  octet  NULL final inclus, la chaîne est tronquée silencieusement). C’est le même
              attribut qui peut être défini par pthread_setname_np(3) et consulté par pthread_getname_np(3).  On
              peut  également  y  accéder  à  l’aide  de /proc/self/task/tid/comm (voir proc(5)), où tid désigne
              l'identifiant du thread appelant tel que renvoyé par gettid(2).

       PR_GET_NAME (depuis Linux 2.6.11)
              Renvoyer le nom du thread appelant, dans le tampon vers lequel pointe  (char *)  arg2.  Le  tampon
              doit  être  suffisamment  grand  pour  contenir jusqu'à 16 octets ; la chaîne sera terminée par un
              octet NULL.

       PR_SET_NO_NEW_PRIVS (depuis Linux 3.5)
              Affecter au bit no_new_privs du processus appelant la valeur dans arg2. Lorsque no_new_privs a  la
              valeur 1,  execve(2) promet de ne pas donner de droits à quoi que ce soit qui n'aurait pas pu être
              fait sans l'appel  execve(2)  (par  exemple,  rendre  non  fonctionnels  les  bits  de  permission
              set-user-ID  et set-group-ID, ou bien les capacités de fichiers). Une fois affecté, le bit ne peut
              pas être réinitialisé. L'affectation de ce bit est héritée par les enfants créés  par  fork(2)  et
              clone(2) et préservée à travers execve(2).

              Depuis  Linux 4.10,  la  valeur  de  l'attribut no_new_privs d'un thread est visible dans le champ
              NoNewPrivs du fichier /proc/pid/status.

              Pour plus d'informations, consultez le  fichier  Documentation/userspace-api/no_new_privs.rst  (ou
              Documentation/prctl/no_new_privs.txt avant Linux 4.13) dans les sources du noyau. Voir seccomp(2).

       PR_GET_NO_NEW_PRIVS (depuis Linux 3.5)
              Renvoyer  (comme  résultat  de  la  fonction) la valeur du bit no_new_privs du thread appelant. La
              valeur 0 indique le comportement habituel de execve(2).  La  valeur 1  indique  que  execve(2)  va
              opérer dans le mode limiteur de droits décrit ci-dessus.

       PR_PAC_RESET_KEYS (depuis Linux 5.0, seulement sur arm64)
              Réinitialiser  de  manière  sûre les clés d'authentification du pointeur du thread pour rafraîchir
              les valeurs aléatoires générées par le noyau.

              Le jeu de clés à réinitialiser est indiqué avec arg2, qui doit être  un  OU  logique  de  zéro  ou
              plusieurs des valeurs suivantes :

              PR_PAC_APIAKEY
                     clé A d'authentification d'instruction

              PR_PAC_APIBKEY
                     clé B d'authentification d'instruction

              PR_PAC_APDAKEY
                     clé A d'authentification de données

              PR_PAC_APDBKEY
                     clé B d'authentification de données

              PR_PAC_APGAKEY
                     clé “A” d'authentification générique

                     (Oui les amis, il n'y a vraiment pas de clé B générique).

              Il  existe  un  cas  particulier  où si arg2 vaut 0, toutes les clés sont réinitialisées. Comme de
              nouvelles clés pourraient être ajoutées dans le futur, c'est la manière recommandée pour  nettoyer
              les  clés  existantes  pour  créer  un  contexte  d'exécution  propre.  Remarquez  qu'il n'est pas
              nécessaire d'utiliser PR_PAC_RESET_KEYS  pour  préparer  un  appel  execve(2),  puisque  execve(2)
              réinitialise toutes les clés d'authentification des pointeurs.

              Les autres arguments arg3, arg4 et arg5 doivent être nuls.

              Si  les  paramètres  ne  sont pas valables, et notamment si arg2 contient des bits non reconnus ou
              correspondant à une clé indisponible sur cette plateforme, l'appel échoue avec l'erreur EINVAL.

              Attention : le compilateur ou l'environnement d'exécution pouvant  utiliser  tout  ou  partie  des
              clés,  un  PR_PAC_RESET_KEYS  réussi peut faire planter le processus appelant. Les conditions pour
              l'utiliser en toute sécurité sont complexes et dépendent du système. Ne  l'utilisez  pas  sauf  si
              vous savez ce que vous faites.

              Pour  plus d'informations, consultez le fichier Documentation/arm64/pointer-authentication.rst (ou
              Documentation/arm64/pointer-authentication.txt avant Linux 5.3) dans les sources du noyau.

       PR_SET_PDEATHSIG (depuis Linux 2.1.57)
              Configurer le signal de mort du parent du processus appelant avec la valeur arg2 (qui peut être un
              numéro de signal dans l'intervalle [1, NSIG - 1] ou 0 pour effacer le signal). Il s'agit du numéro
              du signal que le processus appelant recevra si son parent meurt.

              Attention : c'est le thread qui est, dans ce cas, considéré comme le  « parent »  qui  a  créé  ce
              processus.  Autrement  dit,  le  signal  sera  envoyé  quand  ce  thread se terminera (à l'aide de
              pthread_exit(3), par exemple) et non après que tous les threads du processus parent ne  se  soient
              terminés.

              Le signal de la mort du parent est envoyé lors de la fin ultérieure du thread parent et lors de la
              fin de chaque processus subreaper (voir la description de PR_SET_CHILD_SUBREAPER ci-dessus) auquel
              l'appelant  est  alors  affilié.  Si  le  thread  parent et tous les subreapers ancêtres sont déjà
              terminés au moment de l'opération PR_SET_PDEATHSIG, aucun signal de la mort du parent n'est envoyé
              à l'appelant.

              Le  signal  de la mort du parent est envoyé au processus (voir signal(7)) et, si l'enfant installe
              un gestionnaire en utilisant l'attribut SA_SIGINFO de sigaction(2), le champ si_pid  du  paramètre
              siginfo_t du gestionnaire contient l'identifiant du processus parent qui se termine.

              Le  paramétrage  de signal de mort du parent est vidé pour l'enfant d'un fork(2). Il est également
              vidé (depuis Linux 2.4.36/2.6.23) lors de l'exécution d'un binaire  Set-UID  ou  Set-GID  ou  d'un
              binaire  qui  a  des capacités associées (voir capabilities(7)) ; sinon cette valeur est préservée
              par execve(2). Le paramétrage du signal de mort du parent est aussi vidé lors  du  changement  des
              droits  suivants  d'un  thread :  l'identifiant  utilisateur  ou de groupe effectif, l'identifiant
              utilisateur ou groupe du système de fichiers.

       PR_GET_PDEATHSIG (depuis Linux 2.3.15)
              Renvoyer la valeur actuelle du signal de mort du processus parent, dans l'emplacement vers  lequel
              pointe (int *) arg2.

       PR_SET_PTRACER (depuis Linux 3.4)
              Cela n'a de sens que lorsque le LSM Yama est actif et en mode 1 ("restricted ptrace", visible dans
              /proc/sys/kernel/yama/ptrace_scope). Lorsqu'un identifiant de processus ptracer (« ptracer process
              ID »)  est  passé  en  argument  arg2, le composant appelant déclare que le processus ptracer peut
              appeler la fonction ptrace(2) appliquée au processus appelant, comme si celui-ci était un  ancêtre
              direct.  Chaque  opération  PR_SET_PTRACER  remplace l'identifiant du processus ptracer précédent.
              L'emploi de PR_SET_PTRACER avec l'argument arg2  égal  à  0  supprime  tous  les  identifiants  de
              processus  ptracer  de  l'appelant. Si arg2 est égal à PR_SET_PTRACER_ANY, les restrictions ptrace
              apportées par Yama sont de fait désactivées pour le processus appelant.

              Pour plus d'informations, consultez le  fichier  Documentation/admin-guide/LSM/Yama.rst  dans  les
              sources du noyau (ou Documentation/security/Yama.txt avant Linux 4.13).

       PR_SET_SECCOMP (depuis Linux 2.6.23)
              Sélectionner le mode de traitement sécurisé (seccomp) pour le thread appelant, afin de limiter les
              appels système disponibles. L'appel système plus récent seccomp(2)  fournit  un  superensemble  de
              fonctions de PR_SET_SECCOMP et il est l'interface privilégiée pour les nouvelles applications.

              Le  mode  de  traitement  sécurisé  est sélectionné par arg2 (les constantes du mode de traitement
              sécurisé sont définies dans <linux/seccomp.h>). Les valeurs suivantes peuvent être indiquées :

              SECCOMP_MODE_STRICT (depuis Linux 2.6.23)
                     Voir la description de SECCOMP_SET_MODE_STRICT dans seccomp(2).

                     Cette fonctionnalité n'est disponible que  si  le  noyau  a  été  construit  avec  l'option
                     CONFIG_SECCOMP activée.

              SECCOMP_MODE_FILTER (depuis Linux 3.5)
                     Les  appels  système  autorisés  sont  définis  par  un  pointeur vers un filtre de paquets
                     Berkeley passé en arg3. Cet argument est un pointeur vers struct sock_fprog ; il peut  être
                     conçu  pour  filtrer  des  appels  système arbitraires et les arguments des appels système.
                     Consulter la description de SECCOMP_SET_MODE_FILTER dans seccomp(2).

                     Cette fonctionnalité n'est disponible que  si  le  noyau  a  été  construit  avec  l'option
                     CONFIG_SECCOMP_FILTER activée.

              Pour plus de détails sur le filtrage seccomp, voir seccomp(2).

       PR_GET_SECCOMP (depuis Linux 2.6.23)
              Renvoyer  (comme  résultat  de  la fonction) le mode de traitement sécurisé du thread appelant. Si
              l'appelant n'est pas dans  un  mode  de  traitement  sécurisé,  cette  opération  renvoie  0 ;  si
              l'appelant  est  dans  le  mode  de  traitement  sécurisé strict, alors l'appel prctl() provoquera
              l'envoi d'un signal SIGKILL au processus. Si l'appelant est dans le mode filtre et que  cet  appel
              système  est  autorisé par les filtres seccomp, cette opération renvoie 2 ; sinon le processus est
              tué avec un signal SIGKILL.

              Cette fonctionnalité n'est disponible que si le noyau a été construit avec l'option CONFIG_SECCOMP
              activée.

              Depuis  Linux  3.8, le champ Seccomp du fichier /proc/pid/status offre une méthode pour obtenir la
              même information sans risquer que le processus ne soit tué ; voir proc(5).

       PR_SET_SECUREBITS (depuis Linux 2.6.26)
              Configurer l'attribut « securebits » du thread appelant à la valeur fournie  par  arg2.  Consultez
              capabilities(7).

       PR_GET_SECUREBITS (depuis Linux 2.6.26)
              Renvoyer  (en résultat de fonction) l'état actuel de l'attribut « securebits » du thread appelant.
              Consultez capabilities(7).

       PR_GET_SPECULATION_CTRL (depuis Linux 4.17)
              Renvoyer (en tant que résultat de la fonction) l'état de la fonction  défectueuse  de  spéculation
              indiquée   dans   arg2.   Actuellement,   la   seule   valeur  autorisée  pour  ce  paramètre  est
              PR_SPEC_STORE_BYPASS (sans quoi l'appel échoue avec l'erreur ENODEV).

              Le code de retour utilise les bits 0 à 3 ayant la signification suivante :

              PR_SPEC_PRCTL
                     L'atténuation peut être contrôlée par thread via PR_SET_SPECULATION_CTRL.

              PR_SPEC_ENABLE
                     La fonction de spéculation est activée, l'atténuation est désactivée.

              PR_SPEC_DISABLE
                     La fonction de spéculation est désactivée, l'atténuation est activée.

              PR_SPEC_FORCE_DISABLE
                     Identique à PR_SPEC_DISABLE mais ne peut pas être annulé.

              PR_SPEC_DISABLE_NOEXEC (depuis Linux 5.1)
                     Identique à PR_SPEC_DISABLE, mais l'état sera vidé pendant un execve(2).

              Si tous les bits valent 0, le processeur  n'est  pas  concerné  par  la  fonction  défectueuse  de
              spéculation.

              Si  PR_SPEC_PRCTL  est  positionné, le contrôle par thread de l'atténuation est disponible. Sinon,
              prctl() échouera pour la fonction défectueuse de spéculation.

              Les paramètres arg3, arg4 et arg5 doivent être indiqués en tant que 0 ; sinon l'appel échoue  avec
              l'erreur EINVAL.

       PR_SET_SPECULATION_CTRL (depuis Linux 4.17)
              Définir  l'état  de  la fonction défectueuse de spéculation indiqué dans arg2. Ces paramètres sont
              des attributs par thread.

              Actuellement, arg2 doit valoir une des valeurs suivantes :

              PR_SPEC_STORE_BYPASS
                     Définir l'état de la fonction défectueuse de contournement de stockage spéculatif.

              PR_SPEC_INDIRECT_BRANCH (depuis Linux 4.20)
                     Positionner l'état de la fonction défectueuse de spéculation de branche indirecte.

              Si arg2 n'a pas une des valeurs ci-dessus, l'appel échoue avec l'erreur ENODEV.

              Le paramètre arg3 est utilisé pour récupérer le code de contrôle, qui peut être un des suivants :

              PR_SPEC_ENABLE
                     La fonction de spéculation est activée, l'atténuation est désactivée.

              PR_SPEC_DISABLE
                     La fonction de spéculation est désactivée, l'atténuation est activée.

              PR_SPEC_FORCE_DISABLE
                     Identique à PR_SPEC_DISABLE, mais ne peut pas être annulé. Un prctl( arg2,  PR_SPEC_ENABLE)
                     ultérieur avec la même valeur pour arg2 échouera avec l'erreur EPERM.

              PR_SPEC_DISABLE_NOEXEC (depuis Linux 5.1)
                     Identique  à PR_SPEC_DISABLE, mais l'état sera vidé lors d'un execve(2). Actuellement, seul
                     arg2 égal à PR_SPEC_STORE_BYPASS est pris en charge.

              Toute valeur non valable de arg3 fera échouer l'appel avec l'erreur ERANGE.

              Les paramètres arg4 et arg5 doivent être indiqués en  tant  que  0 ;  sinon  l'appel  échoue  avec
              l'erreur EINVAL.

              La   fonctionnalité   de   spéculation   peut   aussi   être   gérée   par   l'option   d'amorçage
              spec_store_bypass_disable. Ce paramètre applique une règle de lecture seule qui  fera  échouer  un
              appel   prctl()   avec   une   erreur  ENXIO.  Pour  de  plus  amples  détails,  voir  le  fichier
              Documentation/admin-guide/kernel-parameters.txt des sources du noyau.

       PR_SVE_SET_VL (depuis Linux 4.15, seulement sur arm64)
              Configurer la taille du vecteur SVE du thread comme indiqué dans (int) arg2. Les paramètres  arg3,
              arg4 et arg5 sont ignorés.

              Les  bits  de  arg2  correspondant  à  PR_SVE_VL_LEN_MASK  doivent  être positionnés sur la taille
              souhaitée du vecteur en octets. Elle est  interprétée  comme  une  limite  supérieure :  le  noyau
              sélectionnera la taille de vecteur disponible la plus grande qui ne dépasse pas celle indiquée. En
              particulier, indiquer SVE_VL_MAX (défini dans <asm/sigcontext.h>) pour les bits PR_SVE_VL_LEN_MASK
              exige la taille maximale de vecteur prise en charge.

              En  outre,  les  autres  bits  de arg2 doivent être positionnés sur une des combinaisons suivantes
              d'attributs :

              0      Effectuer les modifications immédiatement. Lors du prochain execve(2) dans  le  thread,  la
                     taille     du     vecteur     sera     réinitialisée     à     celle     configurée    dans
                     /proc/sys/abi/sve_default_vector_length.

              PR_SVE_VL_INHERIT
                     Effectuer les changements immédiatement. Les prochains  appels  execve(2)  préserveront  la
                     nouvelle taille du vecteur.

              PR_SVE_SET_VL_ONEXEC
                     Différer  la modification pour qu'elle soit effectuée au prochain execve(2) dans le thread.
                     Les appels execve(2) suivants réinitialiseront la taille du vecteur à la valeur  configurée
                     dans /proc/sys/abi/sve_default_vector_length.

              PR_SVE_SET_VL_ONEXEC | PR_SVE_VL_INHERIT
                     Différer  la modification pour qu'elle soit effectuée au prochain execve(2) dans le thread.
                     Les prochains appels execve(2) préserveront la nouvelle taille du vecteur.

              Dans tous les cas, toute modification précédemment différée et en attente sera annulée.

              L'appel échoue avec l'erreur EINVAL si SVE n'est pas géré par la plateforme,  si  arg2  n'est  pas
              reconnu  ou n'est pas valable, ou si la valeur des bits de arg2 correspondant à PR_SVE_VL_LEN_MASK
              dépasse la plage SVE_VL_MIN..SVE_VL_MAX ou n'est pas un multiple de 16.

              En cas de succès, une valeur non négative est renvoyée décrivant la configuration de selected.  Si
              PR_SVE_SET_VL_ONEXEC  faisait  partie  de  arg2,  la  configuration  décrite par le code de retour
              prendra effet au  prochain  execve().  Sinon,  la  configuration  s'applique  déjà  quand  l'appel
              PR_SVE_SET_VL  renvoie.  Dans  les deux cas, la valeur est encodée de la même façon que le code de
              retour de PR_SVE_GET_VL. Remarquez qu'il n'y a pas d'attribut explicite dans  le  code  de  retour
              correspondant à PR_SVE_SET_VL_ONEXEC.

              La  configuration  (y  compris  les  modifications  différées  en attente) est récupérée lors d'un
              fork(2) et d'un clone(2).

              Pour plus d'informations, consultez le fichier Documentation/arm64/sve.rst  dans  les  sources  du
              noyau (ou Documentation/arm64/sve.txt avant Linux 5.3).

              Attention :  le  compilateur ou l'environnement d'exécution pouvant utiliser SVE, l'utilisation de
              cet appel sans l'attribut PR_SVE_SET_VL_ONEXEC peut  faire  planter  le  processus  appelant.  Les
              conditions  nécessaires  pour  une  utilisation  sûre  sont  complexes et dépendent du système. Ne
              l'utilisez pas sauf si vous savez vraiment ce que vous faites.

       PR_SVE_GET_VL (depuis Linux 4.15, seulement sur arm64)
              Récupérer la configuration de la taille du vecteur SVE du thread actuel.

              Les paramètres arg2, arg3, arg4 et arg5 sont ignorés.

              Si le noyau et la plateforme gèrent SVE, cette opération réussit toujours, en renvoyant une valeur
              non  négative  qui  décrit  la configuration actuelle. Les bits correspondant à PR_SVE_VL_LEN_MASK
              contiennent la taille du  vecteur  actuellement  configuré  en  octets.  Le  bit  correspondant  à
              PR_SVE_VL_INHERIT indique si la taille du vecteur sera récupérée à travers execve(2).

              Remarquez qu'il n'y a aucun moyen de savoir s'il y a un changement de taille de vecteur en attente
              non encore appliqué.

              Pour plus d'informations, consultez le fichier Documentation/arm64/sve.rst  dans  les  sources  du
              noyau (ou Documentation/arm64/sve.txt avant Linux 5.3).

       PR_SET_SYSCALL_USER_DISPATCH (depuis Linux 5.11, seulement sur x86)
              Configurer  le  mécanisme « Syscall User Dispatch » pour le thread appelant. Ce mécanisme permet à
              une application d'intercepter de manière sélective les appels  système  pour  qu'elle  puisse  les
              gérer  elle-même.  L'interception  prend  la  forme  d'un  signal SIGSYS envoyé au thread quand il
              effectue un appel système. S'il est intercepté, l'appel système n'est pas exécuté par le noyau.

              Pour activer ce mécanisme, arg2 doit être positionné sur PR_SYS_DISPATCH_ON. Les prochains  appels
              système  seront alors sélectivement interceptés selon la valeur d'une variable de contrôle fournie
              dans l'espace utilisateur. Dans ce cas, arg3 et arg4 identifient respectivement la position et  la
              taille d'une zone de mémoire continue dans l'espace d'adressage du processus où les appels système
              sont toujours autorisés à être exécutés, quelle que soit la valeur  de  la  variable  de  contrôle
              (cette zone inclut généralement la zone de mémoire contenant la bibliothèque C).

              arg5  pointe  vers  une  variable  de  taille  caractère  qui  représente un paramètre rapide pour
              autoriser/empêcher l'exécution d'un appel système sans la  contrainte  de  faire  un  autre  appel
              système  visant  à  reconfigurer  Syscall  User  Dispatch.  Cette  variable  de contrôle peut être
              positionnée soit sur SYSCALL_DISPATCH_FILTER_BLOCK pour empêcher les appels système de s'exécuter,
              soit  sur  SYSCALL_DISPATCH_FILTER_ALLOW  pour  les  autoriser  temporairement à s'exécuter. Cette
              valeur est vérifiée par le noyau à chaque nouvelle entrée  d'un  appel  système  et  toute  valeur
              inattendue provoquera un SIGSYS insaisissable à cet instant, ce qui tuera l'application.

              Lorsqu'un  appel  système  est  intercepté,  le  noyau  envoie  un signal SIGSYS adressé au thread
              différé. Divers champs seront définis dans la structure siginfo_t (voir sigaction(2)) associée  au
              signal :

              -  si_signo contiendra SIGSYS.

              -  si_call_addr affichera l'adresse de l'instruction de l'appel système.

              -  si_syscall et si_arch indiqueront l'appel système qui a été tenté.

              -  si_code contiendra SYS_USER_DISPATCH.

              -  si_errno sera positionné à 0.

              Le compteur du programme sera comme si l'appel système se produisait (c'est-à-dire que le compteur
              du programme ne pointera pas vers l'instruction de l'appel système).

              Quand le gestionnaire de signal rend la main au noyau, l'appel système se termine immédiatement et
              rend la main au thread appelant, sans être réellement exécuté. Si nécessaire (c'est-à-dire lors de
              l'émulation de l'appel  système  dans  l'espace  utilisateur),  le  gestionnaire  de  signal  doit
              positionner le code de retour de l'appel système sur une valeur adéquate, en modifiant le contexte
              du registre stocké dans le paramètre  ucontext  du  gestionnaire  de  signal.  Voir  sigaction(2),
              sigreturn(2) et getcontext(3) pour plus d'informations.

              Si  arg2  est  positionné  sur  PR_SYS_DISPATCH_OFF,  Syscall  User Dispatch est désactivé pour ce
              thread. Les autres arguments doivent être positionnés à 0.

              Le paramètre n'est pas préservé à travers un fork(2), un clone(2) ou un execve(2).

              Pour plus d'informations, consultez le fichier Documentation/admin-guide/syscall-user-dispatch.rst
              dans les sources du noyau.

       PR_SET_TAGGED_ADDR_CTRL (depuis Linux 5.4, seulement sur arm64)
              Contrôler  la  gestion  du  passage  d'adresses  labellisées  de  l'espace  utilisateur  au  noyau
              (c'est-à-dire des adresses où les bits 56—63 ne valent pas 0).

              Le niveau de prise en  charge  est  sélectionné  par  arg2,  qui  peut  prendre  une  des  valeurs
              suivantes :

              0      Les  adresses  qui  sont  passées  pour  être  déréférencées  par le noyau doivent être non
                     labellisées.

              PR_TAGGED_ADDR_ENABLE
                     Les  adresses  qui  sont  passées  pour  être  déréférencées  par  le  noyau  doivent  être
                     labellisées, sauf celles résumées ci-dessous.

              Les autres arguments arg3, arg4 et arg5 doivent être nuls.

              En  cas  de  succès, le mode indiqué dans arg2 est positionné sur le thread appelant et le code de
              retour est 0. Si les paramètres ne sont pas valables, le mode indiqué dans arg2 n'est pas reconnu,
              ou  si  la  fonctionnalité n'est pas prise en charge par le noyau ou bien si elle est désactivée à
              l'aide de /proc/sys/abi/tagged_addr_disabled, l'appel échoue avec l'erreur EINVAL.

              En particulier, si prctl(PR_SET_TAGGED_ADDR_CTRL, 0, 0, 0,  0)  échoue  avec  EINVAL,  toutes  les
              adresses transmises au noyau doivent être non labellisées.

              Indépendamment  du  mode  défini,  les adresses transmises à certaines interfaces doivent toujours
              être non labellisées :

              -  brk(2), mmap(2), shmat(2), shmdt(2) et le paramètre new_address de mremap(2).

                 (avant Linux 5.6, ils  acceptaient  les  adresses  labellisées  mais  cela  peut  entraîner  un
                 comportement non prévu. Ne vous y fiez pas).

              -  Les  interfaces  « polymorphic »  (polymorphes)  qui  acceptent  les  pointeurs  vers des types
                 arbitraires changent à void * ou un autre type générique, en particulier prctl(),  ioctl(2)  et
                 généralement setsockopt(2) (seules certaines options spécifiques de setsockopt(2) acceptent les
                 adresses labellisées).

              Cette liste d'exceptions peut diminuer au fil des versions du noyau. Si le noyau peut garantir une
              rétrocompatibilité,  les effets de la transmission d'adresses labellisées à ces interfaces ne sont
              pas spécifiés pour les nouveaux logiciels.

              Le mode défini par cet appel est récupéré à travers fork(2) et clone(2). Le mode est remis à 0 par
              execve(2)   (c'est-à-dire   les  adresses  labellisées  ne  sont  pas  autorisées  dans  l'ABI  de
              l'utilisateur ou du noyau).

              Pour plus d'informations, consultez le fichier Documentation/arm64/tagged-address-abi.rst dans les
              sources du noyau.

              Attention :  cet appel est d'abord conçu pour une utilisation par un environnement d'exécution. Un
              appel PR_SET_TAGGED_ADDR_CTRL réussi peut, ailleurs, faire  planter  le  processus  appelant.  Les
              conditions  pour  une utilisation sûre sont complexes et dépendantes du système. Ne l'utilisez pas
              sauf si vous savez ce que vous faites.

       PR_GET_TAGGED_ADDR_CTRL (depuis Linux 5.4, seulement sur arm64)
              Renvoyer le mode d'adressage étiqueté actuel du thread appelant.

              Les paramètres arg2, arg3, arg4 et arg5 doivent être nuls.

              Si les paramètres ne sont pas valables ou si cette fonctionnalité est désactivée ou non  prise  en
              charge par le noyau, l'appel échoue avec EINVAL. En particulier, si prctl(PR_GET_TAGGED_ADDR_CTRL,
              0, 0, 0, 0) échoue avec EINVAL, cette fonction n'est clairement pas prise en charge ou  désactivée
              avec  /proc/sys/abi/tagged_addr_disabled.  Dans  ce  cas,  toutes les adresses transmises au noyau
              doivent être non labellisées.

              Sinon, l'appel renvoie une valeur non négative décrivant le  mode  d'adressage  labellisé  actuel,
              encodé de la même manière que le paramètre arg2 de PR_SET_TAGGED_ADDR_CTRL.

              Pour plus d'informations, consultez le fichier Documentation/arm64/tagged-address-abi.rst dans les
              sources du noyau.

       PR_TASK_PERF_EVENTS_DISABLE (depuis Linux 2.6.31)
              Désactiver tous les compteurs de performance attachés au  processus  appelant,  indépendamment  du
              fait  que  ces  compteurs  ont  été  créés  par  ce  processus  ou  par un autre. Les compteurs de
              performance créés par le processus appelant pour d'autres processus ne sont  pas  concernés.  Pour
              plus  d'informations  sur les compteurs de performance, consultez le fichier tools/perf/design.txt
              des sources du noyau Linux.

              Initialement appelé PR_TASK_PERF_COUNTERS_DISABLE. Renommé (avec la même  valeur  numérique)  dans
              Linux 2.6.32.

       PR_TASK_PERF_EVENTS_ENABLE (depuis Linux 2.6.31)
              L'inverse  de  PR_TASK_PERF_EVENTS_DISABLE.  Activer  les  compteurs  de  performance  attachés au
              processus appelant.

              Initialement appelé PR_TASK_PERF_COUNTERS_ENABLE. Renommé dans Linux 2.6.32.

       PR_SET_THP_DISABLE (depuis Linux 3.15)
              Affecter l'état de l'attribut « THP disable » pour le  thread  appelant.  Si  arg2  a  une  valeur
              différente de zéro, l'attribut est activé ; dans le cas contraire, il est désactivé. L'utilisation
              de cet attribut fournit un moyen de supprimer les pages de très grande taille correspondant à  des
              travaux  pour  lesquels  le  code  ne  peut  pas être modifié, et dans les cas où le recours à des
              routines malloc associées à des appels madvise(2) n'offre pas de solution (c'est-à-dire  pour  des
              données  allouées  statiquement).  L'activation  de  l'attribut  « THP  disable » est transmis aux
              enfants créés au moyen de fork(2) et est conservé lors d'un appel à execve(2).

       PR_GET_THP_DISABLE (depuis Linux 3.15)
              Renvoyer (en résultat de fonction) le réglage actuel  de  l'attribut  « THP  disable »  du  thread
              appelant, c'est à dire 1 si l'attribut est activé et 0 dans le cas contraire.

       PR_GET_TID_ADDRESS (depuis Linux 3.5)
              Renvoyer   l'adresse   clear_child_tid   configurée   par  set_tid_address(2)  et  par  l'attribut
              CLONE_CHILD_CLEARTID de clone(2), à l'emplacement vers lequel pointe (int **) arg2.  Cette  option
              n'est  disponible que si le noyau est construit avec l'option CONFIG_CHECKPOINT_RESTORE. Notez que
              comme l'appel système prctl() n'a pas d'implémentation compatible pour les ABI AMD64 x32  et  MIPS
              n32,  et  comme  le  noyau  écrit  un  pointeur en utilisant la taille du pointeur du noyau, cette
              opération attend un tampon en espace utilisateur de 8 octets (et non 4) sur ces ABI.

       PR_SET_TIMERSLACK (depuis Linux 2.6.28)
              Chaque thread comporte deux valeurs de temporisation relâchée :  une  valeur  « default »  et  une
              valeur  « current ».  Cette  opération positionne la valeur « current » du temporisateur du thread
              appelant. arg2 est un entier long non signé, la valeur « current » maximale est donc ULONG_MAX  et
              celle  minimale  est  1.  Si  la valeur en nanoseconde fournie dans arg2 est supérieure à zéro, la
              valeur « current » est positionnée sur cette valeur. Si arg2 est égal  à  zéro,  la  temporisation
              « current » est réinitialisée à la valeur « default » du thread.

              La  valeur « current » (actuelle) de temporisation relâchée est utilisée par le noyau pour grouper
              les délais d'expiration des threads appelants qui sont proches les uns des autres. Par conséquent,
              les  délais  d'expiration  des  threads  pourraient être en retard jusqu'au nombre de nanosecondes
              indiqué (mais jamais en avance). Le groupement  des  délais  d'expiration  permet  de  réduire  la
              consommation d'énergie du système en minimisant les réveils du processeur.

              Les  délais  d'expiration  affectés par la temporisation relâchée sont ceux définis par select(2),
              pselect(2), poll(2), ppoll(2), epoll_wait(2), epoll_pwait(2), clock_nanosleep(2), nanosleep(2)  et
              futex(2)   (et   donc   les   fonctions   de   bibliothèque  implémentées  par  futex,  y  compris
              pthread_cond_timedwait(3),       pthread_mutex_timedlock(3),        pthread_rwlock_timedrdlock(3),
              pthread_rwlock_timedwrlock(3) et sem_timedwait(3)).

              La  temporisation  relâchée  ne  s'applique pas aux threads qui sont programmés avec une stratégie
              d'ordonnancement en temps réel (consultez sched_setscheduler(2)).

              Quand un nouveau thread est  créé,  les  deux  valeurs  de  temporisation  relâchée  sont  rendues
              identiques  à  la  valeur  « current »  du thread qui l'a créé. Ensuite, un thread peut ajuster sa
              valeur de temporisation relâchée « current » à l'aide de PR_SET_TIMERSLACK. La valeur  « default »
              ne peut pas être modifiée. Les valeurs de temporisation relâchée d'init (PID 1), l'ancêtre de tous
              les processus, sont  de  50 000 nanosecondes  (50 microsecondes).  Les  valeurs  de  temporisation
              relâchée sont transmises aux enfants créés avec fork(2) et sont préservées à travers execve(2).

              Depuis  Linux  4.6,  la  valeur  « current »  de  temporisation  relâchée d'un processus peut être
              visualisée et modifiée à l'aide du fichier /proc/pid/timerslack_ns. Voir proc(5).

       PR_GET_TIMERSLACK (depuis Linux 2.6.28)
              Renvoyer (comme résultat de la fonction) la valeur « current » de temporisation relâchée du thread
              appelant.

       PR_SET_TIMING (depuis Linux 2.6.0)
              Permettre  de  choisir la méthode de mesure du temps du processus à utiliser, en passant dans arg2
              soit PR_TIMING_STATISTICAL (méthode statistique traditionnelle)  ou  PR_TIMING_TIMESTAMP  (méthode
              exacte  utilisant  des  horodatages).  PR_TIMING_TIMESTAMP  n'est  pas  implémenté  pour l'instant
              (l'utilisation de ce mode renverra l'erreur EINVAL).

       PR_GET_TIMING (depuis Linux 2.6.0)
              Renvoyer (en résultat de fonction) quelle méthode de mesure du temps  du  processus  est  utilisée
              actuellement.

       PR_SET_TSC (depuis Linux 2.6.26, seulement sur x86)
              Configurer  l'état  de  l'attribut  qui  indique  si  le compteur d'horodatage peut être lu par le
              processus. Utiliser PR_TSC_ENABLE pour arg2 permet d'autoriser les lectures ou PR_TSC_SIGSEGV pour
              produire un SIGSEGV quand le processus essaie de lire le compteur d'horodatage.

       PR_GET_TSC (depuis Linux 2.6.26, seulement sur x86)
              Renvoyer,  dans l'emplacement vers lequel pointe (int *) arg2, l'état de l'attribut qui indique si
              le compteur d'horodatage peut être lu.

       PR_SET_UNALIGN
              (Seulement sur :  ia64,  depuis  Linux 2.3.48 ;  parisc,  depuis  Linux 2.6.15 ;  PowerPC,  depuis
              Linux 2.6.18 ;  Alpha,  depuis  Linux 2.6.22 ; sh, depuis Linux 2.6.34 ; tile, depuis Linux 3.12).
              Définir les bits de contrôle pour les accès non  alignés  à  arg2.  La  valeur  PR_UNALIGN_NOPRINT
              signifie  que  les  accès  non  alignés  en  espace  utilisateur sont silencieusement corrigés, et
              PR_UNALIGN_SIGBUS cause l'envoi de SIGBUS lors d'un accès utilisateur non aligné. Alpha gère aussi
              un attribut supplémentaire dont la valeur est 4 et qui n'a pas de constante correspondante nommée,
              qui demande au noyau de corriger les accès non alignés (il revient à utiliser l'attribut UAC_NOFIX
              dans l'opération SSI_NVPAIRS de l'appel système setsysinfo() sur Tru64).

       PR_GET_UNALIGN
              (Consultez  PR_SET_UNALIGN  pour les informations sur les versions et les architectures). Renvoyer
              les bits de contrôle des accès non alignés dans l'emplacement vers lequel pointe (unsigned  int *)
              arg2.

       PR_GET_AUXV (depuis Linux 6.4)
              Récupérer  le vecteur auxiliaire (auxv) dans le tampon vers lequel pointe (void *) arg2 et dont la
              longueur est donnée par arg3. Si le tampon n'est pas suffisamment long pour le vecteur  auxiliaire
              complet,  la  copie  sera tronquée. Renvoyer (comme résultat de la fonction) la longueur totale du
              vecteur auxiliaire. arg4 et arg5 doivent être 0.

       PR_SET_MDWE (depuis Linux 6.3)
              Configurer le masque de protection « Memory-Deny-Write-Execute » (MDWE) du processus appelant. Une
              fois  les  bits de protection définis, ils ne peuvent plus être modifiés. arg2 doit être un masque
              de bits de :

              PR_MDWE_REFUSE_EXEC_GAIN
                     Les nouvelles protections de mappage mémoire ne peuvent pas être accessibles en écriture et
                     exécutables. Les mappages non exécutables ne peuvent pas devenir exécutables.

              PR_MDWE_NO_INHERIT (depuis Linux 6.6)
                     Ne  pas  propager  la  protection  MDWE  aux  processus  enfant sur fork(2). Définir ce bit
                     nécessite de définir également PR_MDWE_REFUSE_EXEC_GAIN.

       PR_GET_MDWE (depuis Linux 6.3)
              Renvoyer (comme résultat de la fonction) le masque de protection « Memory-Deny-Write-Execute »  du
              processus  appelent.  Consultez  PR_SET_MDWE  pour  des  informations  sur  les  bits de masque de
              protection.

VALEUR RENVOYÉE

       En   cas   de   réussite,   PR_CAP_AMBIENT+PR_CAP_AMBIENT_IS_SET,    PR_CAPBSET_READ,    PR_GET_DUMPABLE,
       PR_GET_FP_MODE,     PR_GET_IO_FLUSHER,     PR_GET_KEEPCAPS,     PR_MCE_KILL_GET,     PR_GET_NO_NEW_PRIVS,
       PR_GET_SECUREBITS,  PR_GET_SPECULATION_CTRL,   PR_SVE_GET_VL,   PR_SVE_SET_VL,   PR_GET_TAGGED_ADDR_CTRL,
       PR_GET_THP_DISABLE,  PR_GET_TIMING,  PR_GET_TIMERSLACK, PR_GET_AUXV et (s'il rend la main) PR_GET_SECCOMP
       renvoient les valeurs positives décrites ci-dessus. Toute autre valeur d'op renvoie 0 en cas  de  succès.
       En cas d'erreur, -1 est renvoyé et errno est positionné pour indiquer l'erreur.

ERREURS

       EACCES op  vaut  PR_SET_SECCOMP  et  arg2 vaut SECCOMP_MODE_FILTER, mais le processus n'a pas la capacité
              CAP_SYS_ADMIN ou n'a pas positionné l'attribut no_new_privs (voir le point sur PR_SET_NO_NEW_PRIVS
              ci-dessus).

       EACCES op vaut PR_SET_MM, et arg3 vaut PR_SET_MM_EXE_FILE, le fichier n'est pas exécutable.

       EBADF  op  vaut  PR_SET_MM,  arg3  vaut  PR_SET_MM_EXE_FILE,  et  le descripteur de fichier passé dans le
              paramètre arg4 n'est pas valable.

       EBUSY  op vaut PR_SET_MM, arg3  vaut  PR_SET_MM_EXE_FILE,  et  il  s'agit  de  la  seconde  tentative  de
              modification du lien symbolique /proc/pid/exe, ce qui n'est pas autorisé.

       EFAULT arg2 est une adresse non valable.

       EFAULT op   vaut  PR_SET_SECCOMP,  arg2  vaut  SECCOMP_MODE_FILTER,  le  système  a  été  construit  avec
              CONFIG_SECCOMP_FILTER et arg2 n'est pas une adresse valable.

       EFAULT op vaut PR_SET_SYSCALL_USER_DISPATCH et arg5 a une adresse non valable.

       EINVAL La valeur de op n'est pas reconnue ou n'est pas prise en charge sur ce système.

       EINVAL op vaut PR_MCE_KILL, PR_MCE_KILL_GET ou PR_SET_MM, et les paramètres non utilisés de prctl() n'ont
              pas été réglés à zéro.

       EINVAL arg2 n'est pas une valeur valable pour cette op.

       EINVAL op vaut PR_SET_SECCOMP ou PR_GET_SECCOMP et le noyau n'a pas été configuré avec CONFIG_SECCOMP.

       EINVAL op  vaut  PR_SET_SECCOMP,  arg2  vaut  SECCOMP_MODE_FILTER  et le noyau n'a pas été configuré avec
              CONFIG_SECCOMP_FILTER.

       EINVAL op vaut PR_SET_MM, et l'une des assertions suivantes est vraie :

              -  arg4 ou arg5 est différent de 0 ;

              -  arg3 est strictement plus grand que TASK_SIZE (la limite sur la taille de l'espace  d'adressage
                 utilisateur pour cette architecture) ;

              -  arg2 vaut PR_SET_MM_START_CODE, PR_SET_MM_END_CODE, PR_SET_MM_START_DATA, PR_SET_MM_END_DATA ou
                 PR_SET_MM_START_STACK, et les permissions pour la zone de mémoire correspondante  ne  satisfont
                 pas les conditions requises ;

              -  arg2  vaut  PR_SET_MM_START_BRK  ou  PR_SET_MM_BRK,  et  arg3 est inférieur ou égal à la fin du
                 segment de données, ou indique une  valeur  qui  causerait  le  dépassement  de  la  limite  de
                 ressource RLIMIT_DATA.

       EINVAL op  vaut  PR_SET_PTRACER  et  arg2  ne  vaut ni 0, ni PR_SET_PTRACER_ANY, ni le PID d'un processus
              existant.

       EINVAL op vaut PR_SET_PDEATHSIG et arg2 n'est pas un numéro de signal valable.

       EINVAL op vaut PR_SET_DUMPABLE et arg2 ne vaut ni SUID_DUMP_DISABLE, ni SUID_DUMP_USER.

       EINVAL op vaut PR_SET_TIMING et arg2 n'a pas la valeur PR_TIMING_STATISTICAL.

       EINVAL op vaut PR_SET_NO_NEW_PRIVS et arg2 ne vaut pas 1, ou arg3, arg4 ou arg5 est différent de zéro.

       EINVAL op vaut PR_GET_NO_NEW_PRIVS et arg2, arg3, arg4 ou arg5 est différent de zéro.

       EINVAL op vaut PR_SET_THP_DISABLE et arg3, arg4 ou arg5 est différent de zéro.

       EINVAL op vaut PR_GET_THP_DISABLE et arg2, arg3, arg4 ou arg5 est différent de zéro.

       EINVAL op  vaut  PR_CAP_AMBIENT  et  un  paramètre  inutilisé  (arg4,   arg5   ou,   dans   le   cas   de
              PR_CAP_AMBIENT_CLEAR_ALL, arg3) ne vaut pas zéro ; ou bien arg2 a une valeur non valable ; ou arg2
              vaut PR_CAP_AMBIENT_LOWER, PR_CAP_AMBIENT_RAISE ou PR_CAP_AMBIENT_IS_SET et arg3 n'indique pas  de
              capacité valable.

       EINVAL op vaut PR_SET_SPECULATION_CTRL ou PR_SET_SPECULATION_CTRL et des paramètres inutilisés de prctl()
              ne valent pas 0.

       EINVAL op vaut PR_PAC_RESET_KEYS et les paramètres ne sont pas valables ou ne sont pas  pris  en  charge.
              Voir la description de PR_PAC_RESET_KEYS ci-dessus pour des détails.

       EINVAL op  vaut  PR_SVE_SET_VL  et  les paramètres ne sont pas valables ou ne sont pas pris en charge, ou
              bien SVE n'est pas disponible sur cette plateforme. Voir la description de PR_SVE_SET_VL ci-dessus
              pour des détails.

       EINVAL op vaut PR_SVE_GET_VL et SVE n'est pas disponible sur cette plateforme.

       EINVAL op vaut PR_SET_SYSCALL_USER_DISPATCH et l'une des assertions suivantes est vraie :

              -  arg2 vaut PR_SYS_DISPATCH_OFF et les autres paramètres ne sont pas à 0 ;

              -  arg2  vaut  PR_SYS_DISPATCH_ON  et la plage de mémoire indiquée dépasse l'espace d'adressage du
                 processus.

              -  arg2 n'est pas valable.

       EINVAL op vaut PR_SET_TAGGED_ADDR_CTRL et les paramètres ne sont pas valables ou  ne  sont  pas  pris  en
              charge. Voir la description de PR_SET_TAGGED_ADDR_CTRL ci-dessus pour des détails.

       EINVAL op  vaut  PR_GET_TAGGED_ADDR_CTRL  et  les  paramètres ne sont pas valables ou ne sont pas pris en
              charge. Voir la description de PR_GET_TAGGED_ADDR_CTRL pour des détails.

       ENODEV op vaut PR_SET_SPECULATION_CTRL et le noyau ou le processeur ne gère pas la  fonction  défectueuse
              de spéculation demandée.

       ENXIO  op  vaut  PR_MPX_ENABLE_MANAGEMENT  ou  PR_MPX_DISABLE_MANAGEMENT  et le noyau ou le processeur ne
              prennent pas en charge la gestion de MPX. Vérifiez que le noyau et le processeur gèrent le MPX.

       ENXIO  opt vaut PR_SET_SPECULATION_CTRL, impliquant  que  le  contrôle  de  la  fonction  défectueuse  de
              spéculation  sélectionnée  n'est  pas  possible. Voir les champs de bit de PR_GET_SPECULATION_CTRL
              pour savoir les options disponibles.

       EOPNOTSUPP
              op vaut PR_SET_FP_MODE et arg2 a une valeur non prise en charge ou non valable.

       EPERM  op vaut PR_SET_SECUREBITS et l'appelant n'a pas la capacité CAP_SETPCAP,  a  essayé  d'enlever  un
              attribut  de  « verrouillage »  ou  a  essayé de positionner un attribut pour lequel l'attribut de
              verrouillage était positionné (consultez capabilities(7)).

       EPERM  op vaut PR_SET_SPECULATION_CTRL alors que la spéculation est désactivée avec PR_SPEC_FORCE_DISABLE
              et l'appelant a essayé de la réactiver.

       EPERM  op  vaut  PR_SET_KEEPCAPS  et  l'attribut  SECBIT_KEEP_CAPS_LOCKED  de  l'appelant  est positionné
              (consultez capabilities(7)).

       EPERM  op vaut PR_CAPBSET_DROP et l'appelant n'a pas la capacité CAP_SETPCAP.

       EPERM  op vaut PR_SET_MM et l'appelant n'a pas la capacité CAP_SYS_RESOURCE.

       EPERM  op vaut PR_CAP_AMBIENT et arg2 vaut PR_CAP_AMBIENT_RAISE, mais soit la capacité indiquée dans arg3
              n'est  pas  présente dans les capacités autorisées et récupérables du processus, ou bien le bit de
              sécurité PR_CAP_AMBIENT_LOWER a été positionné.

       ERANGE op vaut PR_SET_SPECULATION_CTRL  et  arg3  ne  vaut  ni  PR_SPEC_ENABLE,  ni  PR_SPEC_DISABLE,  ni
              PR_SPEC_FORCE_DISABLE, ni PR_SPEC_DISABLE_NOEXEC.

VERSIONS

       IRIX  dispose  d'un  appel système prctl() (également introduit dans Linux 2.1.44 sur l'architecture MIPS
       sous le nom irix_prctl), dont le prototype est

           ptrdiff_t prctl(int op, int arg2, int arg3);

       et les opérations permettent de d'obtenir le nombre maximal de processus par  utilisateur,  d’obtenir  le
       nombre  maximal  de  processeurs  utilisables  par  un processus, de vérifier si un processus est bloqué,
       d’obtenir ou de définir la taille maximale de la pile, etc.

STANDARDS

       Linux.

HISTORIQUE

       Linux 2.1.57, glibc 2.0.6

VOIR AUSSI

       signal(2), core(5)

TRADUCTION

       La  traduction  française   de   cette   page   de   manuel   a   été   créée   par   Christophe   Blaess
       <https://www.blaess.fr/christophe/>,   Stéphan   Rafin   <stephan.rafin@laposte.net>,   Thierry   Vignaud
       <tvignaud@mandriva.com>, François Micaux, Alain Portal  <aportal@univ-montp2.fr>,  Jean-Philippe  Guérard
       <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)   <jean-luc.coulon@wanadoo.fr>,   Julien   Cristau
       <jcristau@debian.org>,     Thomas     Huriaux      <thomas.huriaux@gmail.com>,      Nicolas      François
       <nicolas.francois@centraliens.net>,     Florentin     Duneau    <fduneau@gmail.com>,    Simon    Paillard
       <simon.paillard@resel.enst-bretagne.fr>,    Denis    Barbier    <barbier@debian.org>,    David     Prévot
       <david@tilapin.org>,     Cédric     Boutillier     <cedric.boutillier@gmail.com>,    Frédéric    Hantrais
       <fhantrais@gmail.com> et Jean-Philippe MENGUAL <jpmengual@debian.org>

       Cette traduction est une documentation libre ; veuillez vous reporter à la  GNU  General  Public  License
       version 3   ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩   concernant   les  conditions  de  copie  et  de
       distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de manuel,  veuillez  envoyer  un  message  à
       ⟨debian-l10n-french@lists.debian.org⟩.