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

NOM

       ioctl_userfaultfd  -  Créer un descripteur de fichier pour gérer les erreurs de pagination
       dans l'espace utilisateur

BIBLIOTHÈQUE

       Bibliothèque C standard (libc, -lc)

SYNOPSIS

       #include <linux/userfaultfd.h>  /* Définition des constantes UFFD* */
       #include <sys/ioctl.h>

       int ioctl(int fd, int op, ...);

DESCRIPTION

       Diverses opérations ioctl(2) peuvent être effectuées sur un objet userfaultfd (créé par un
       appel à userfaultfd(2)) en utilisant des appels sous la forme :

           ioctl(fd, op, argp);

       In  the above, fd is a file descriptor referring to a userfaultfd object, op is one of the
       operations listed below, and argp is a pointer to a data structure that is specific to op.

       Les opérations ioctl(2) sont décrites ci-dessous. Celles  UFFDIO_API,  UFFDIO_REGISTER  et
       UFFDIO_UNREGISTER  sont  utilisées  pour  configurer  le  comportement de userfaultfd. Ces
       opérations permettent à l'appelant de choisir les fonctionnalités qui seront  activées  et
       le  type  d'événement  transmis à l'application. Ces opérations permettent à l'application
       appelante de résoudre des événements de problèmes de pages.

   UFFDIO_API
       (Depuis Linux 4.3). Activer l'opération de userfaultfd et effectuer la poignée de main  de
       l'API.

       Le paramètre argp est un pointeur vers une structure uffdio_api, définie en tant que :

           struct uffdio_api {
               __u64 api;        /* Version de l'API demandée (entrée) */
               __u64 features;   /* Fonctionnalités demandées (entrée/sortie) */
               __u64 ioctls;     /* Opérations ioctl() disponibles (sortie) */
           };

       The  api  field  denotes the API version requested by the application. The kernel verifies
       that it can support the requested API version, and sets the features and ioctls fields  to
       bit  masks  representing  all  the available features and the generic ioctl(2)  operations
       available.

       Since Linux 4.11, applications should  use  the  features  field  to  perform  a  two-step
       handshake.  First,  UFFDIO_API  is  called with the features field set to zero. The kernel
       responds by setting all supported feature bits.

       Applications which do not require any specific features can begin  using  the  userfaultfd
       immediately.  Applications  which  do  need specific features should call UFFDIO_API again
       with a subset of the reported feature bits set to enable those features.

       Avant Linux 4.11, le champ features doit être initialisé à zéro avant l'appel  UFFDIO_API,
       et  zéro (c'est-à-dire pas de bit de fonctionnalité) est mis dans le champ features par le
       noyau à partir du retour de ioctl(2).

       If the application sets unsupported feature bits, the kernel will zero  out  the  returned
       uffdio_api structure and return EINVAL.

       Les bits fonctionnels suivants peuvent être positionnés :

       UFFD_FEATURE_EVENT_FORK (depuis Linux 4.11)
              Quand  cette  fonctionnalité  est  activée,  les  objets  userfaultfd associés à un
              processus parent sont dupliqués dans un processus enfant lors d'un  fork(2)  et  un
              événement UFFD_EVENT_FORK est généré sur le moniteur du userfaultfd

       UFFD_FEATURE_EVENT_REMAP (depuis Linux 4.11)
              Si  cette  fonctionnalité est activée, quand le processus fautif appelle mremap(2),
              le moniteur userfaultfd recevra un événement de type UFFD_EVENT_REMAP.

       UFFD_FEATURE_EVENT_REMOVE (depuis Linux 4.11)
              Si cette fonctionnalité est ativée, quand le processus  fautif  appelle  madvise(2)
              avec  les  valeurs  MADV_DONTNEED  ou  MADV_REMOVE pour libérer une zone de mémoire
              virtuelle, le moniteur userfaultfd recevra un événement de type UFFD_EVENT_REMOVE.

       UFFD_FEATURE_EVENT_UNMAP (depuis Linux 4.11)
              Si cette fonctionnalité est  activée,  quand  le  processus  fautif  désassocie  la
              mémoire  virtuelle explicitement avec munmap(2), ou implicitement lors d'un mmap(2)
              ou  d'un  mremap(2),  le  moniteur  userfaultfd  recevra  un  événement   de   type
              UFFD_EVENT_UNMAP.

       UFFD_FEATURE_MISSING_HUGETLBFS (depuis Linux 4.11)
              Si  ce  bit  fonctionnel  est positionné, le noyau gère l'enregistrement des plages
              userfaultfd par défaut dans les zones hugetlbfs de mémoire virtuelle

       UFFD_FEATURE_MISSING_SHMEM (depuis Linux 4.11)
              Si ce bit fonctionnel est positionné, le noyau prend en charge l'enregistrement  de
              plages  userfaultfd  dans  les zones de mémoire partagées. Cela comprend toutes les
              APIs de mémoire partagée du noyau : la mémoire partagée  System  V,  tmpfs(5),  les
              tableaux  partagés  de  /dev/zero,  mmap(2)  avec l'attribut MAP_SHARED positionné,
              memfd_create(2) et ainsi de suite.

       UFFD_FEATURE_SIGBUS (depuis Linux 4.14)
              Si  ce  bit  fonctionnel  est  positionné,  aucun  événement   d'erreur   de   page
              (UFFD_EVENT_PAGEFAULT)  ne  sera  généré.  Un  signal  SIGBUS sera plutôt envoyé au
              processus fautif. Les applications qui utilisent cette  fonctionnalité  n'exigeront
              pas  qu'on utilise un moniteur userfaultfd pour gérer les accès mémoire aux régions
              enregistrées avec userfaultfd.

       UFFD_FEATURE_THREAD_ID (depuis Linux 4.14)
              Si ce bit  de  fonctionnalité  est  positionné,  uffd_msg.pagefault.feat.ptid  sera
              positionné  sur  l'identifiant  du  thread  fautif  pour chaque message d'erreur de
              pagination.

       UFFD_FEATURE_PAGEFAULT_FLAG_WP (since Linux 5.10)
              If this feature bit is set, userfaultfd supports write-protect faults for anonymous
              memory. (Note that shmem / hugetlbfs support is indicated by a separate feature.)

       UFFD_FEATURE_MINOR_HUGETLBFS (depuis Linux 5.13)
              Si  ce  bit  fonctionnel  est positionné, le noyau gère l'enregistrement des plages
              userfaultfd en mode mineur dans les zones hugetlbfs-backed de mémoire.

       UFFD_FEATURE_MINOR_SHMEM (depuis Linux 5.14)
              Si ce bit fonctionnel est positionné, le noyau  gère  l'enregistrement  des  plages
              userfaultfd en mode mineur dans les zones shmem-backed de mémoire.

       UFFD_FEATURE_EXACT_ADDRESS (Depuis Linux 5.18)
              Si  ce  bit  fonctionnel  est  positionné,  uffd_msg.pagefault.address sera réglé à
              l'adresse exacte de l'erreur de pagination rapportée par le matériel et  ne  masque
              pas  le décalage dans la page. Notez que les versions anciennes de Linux pourraient
              indiquer aussi l'adresse exacte, même si bit fonctionnel n'est pas positionné.

       UFFD_FEATURE_WP_HUGETLBFS_SHMEM (since Linux 5.19)
              If this feature bit is set, userfaultfd supports write-protect faults for hugetlbfs
              and shmem / tmpfs memory.

       UFFD_FEATURE_WP_UNPOPULATED (since Linux 6.4)
              If this feature bit is set, the kernel will handle anonymous memory the same way as
              file memory, by allowing the user to write-protect unpopulated page table entries.

       UFFD_FEATURE_POISON (since Linux 6.6)
              If this feature  bit  is  set,  the  kernel  supports  resolving  faults  with  the
              UFFDIO_POISON ioctl.

       UFFD_FEATURE_WP_ASYNC (since Linux 6.7)
              If  this  feature  bit  is set, the write protection faults would be asynchronously
              resolved by the kernel.

       Le champ ioctls renvoyé peut contenir les bits suivants :

       1 << _UFFDIO_API
              L'opération UFFDIO_API est prise en charge.

       1 << _UFFDIO_REGISTER
              L'opération UFFDIO_REGISTER est prise en charge.

       1 << _UFFDIO_UNREGISTER
              L'opération UFFDIO_UNREGISTER est prise en charge.

       This ioctl(2)  operation returns 0 on success. On error, -1 is returned and errno  is  set
       to  indicate  the  error.  If an error occurs, the kernel may zero the provided uffdio_api
       structure. The caller should treat its contents as unspecified, and reinitialize it before
       re-attempting another UFFDIO_API call. Possible errors include:

       EFAULT argp  renvoie  à  une  adresse  en  dehors  de  l'espace  d'adressage accessible du
              processus appelant.

       EINVAL La version de l'API demandée dans le champ api n'est pas prise  en  charge  par  ce
              noyau  ou  le  champ  features  passé  au  noyau comprend des bits non gérés par la
              version actuelle du noyau.

       EINVAL A  previous  UFFDIO_API  call  already  enabled  one  or  more  features  for  this
              userfaultfd.  Calling  UFFDIO_API  twice,  the  first time with no features set, is
              explicitly allowed as per the two-step feature detection handshake.

       EPERM  The UFFD_FEATURE_EVENT_FORK feature was enabled, but the  calling  process  doesn't
              have the CAP_SYS_PTRACE capability.

   UFFDIO_REGISTER
       (Since  Linux 4.3.) Register a memory address range with the userfaultfd object. The pages
       in the range must be “compatible”. Please refer to the list of register  modes  below  for
       the compatible memory backends for each mode.

       Le  paramètre  argp  est  un  pointeur vers une structure uffdio_register, définie en tant
       que :

           struct uffdio_range {
               __u64 start;    /* Début de la plage */
               __u64 len;      /* Longueur de la plage (octets) */
           };

           struct uffdio_register {
               struct uffdio_range range;
               __u64 mode;     /* Mode désiré de l'opération (entrée) */
               __u64 ioctls;   /* Opérations ioctl() disponibles (sortie) */
           };

       Le champ range définit une plage de mémoire commençant  à  start  et  s'étendant  sur  len
       octets qui doit être gérée par userfaultfd.

       Le champ mode définit le mode d'opération désiré pour cette région de mémoire. Les valeurs
       suivantes peuvent être mises en bits et liées pour positionner le mode userfaultfd pour la
       plage indiquée :

       UFFDIO_REGISTER_MODE_MISSING
              Suivre  les  erreurs de pagination sur les pages absentes. Depuis Linux 4.3, seules
              les plages anonymes  privées  sont  compatibles.  Depuis  Linux  4.11,  les  plages
              hugetlbfs et de mémoire partagée sont également compatibles.

       UFFDIO_REGISTER_MODE_WP
              Suivre  les erreurs de pagination sur les pages protégées en écriture. Depuis Linux
              5.7, seules les plages anonymes et privées sont compatibles.

       UFFDIO_REGISTER_MODE_MINOR
              Suivre les petites erreurs de pagination.  Depuis  Linux 5.13,  seules  les  plages
              hugetlbfs  sont  compatibles.  Depuis  Linux 5.14, la compatibilité avec les plages
              shmem a été ajoutée.

       Si l'opération réussit, le noyau modifie le champ du masque de bit  ioctls  pour  indiquer
       les  opérations  ioctl(2) disponibles sur la plage indiquée. Ce masque de bit renvoyé peut
       contenir les bits suivants :

       1 << _UFFDIO_COPY
              L'opération UFFDIO_COPY est prise en charge.

       1 << _UFFDIO_WAKE
              L'opération UFFDIO_WAKE est prise en charge.

       1 << _UFFDIO_WRITEPROTECT
              The UFFDIO_WRITEPROTECT operation is supported.

       1 << _UFFDIO_ZEROPAGE
              L'opération UFFDIO_ZEROPAGE est prise en charge.

       1 << _UFFDIO_CONTINUE
              L'opération UFFDIO_CONTINUE est prise en charge.

       1 << _UFFDIO_POISON
              The UFFDIO_POISON operation is supported.

       Cette opération ioctl(2) renvoie 0 en cas de succès. En cas d'erreur, -1  est  renvoyé  et
       errno est positionné pour indiquer l'erreur. Parmi les erreurs possibles :

       EBUSY  Un tableau de la plage indiquée est enregistré avec un autre objet userfaultfd.

       EFAULT argp  renvoie  à  une  adresse  en  dehors  de  l'espace  d'adressage accessible du
              processus appelant.

       EINVAL Un bit non valable ou non pris en charge a été indiqué dans le champ mode ;  ou  le
              champ mode valait zéro.

       EINVAL Il n'y a pas de tableau dans la plage d'adresse indiquée.

       EINVAL range.start ou range.len n'est pas un multiple de la taille de la page du système ;
              ou range.len vaut zéro ; ou ces champs ne sont pas valables pour d'autres raisons.

       EINVAL Un tableau incompatible est présent dans la plage d'adresse indiquée.

   UFFDIO_UNREGISTER
       (Since Linux 4.3.) Unregister a memory address range from userfaultfd. The  pages  in  the
       range must be “compatible” (see the description of UFFDIO_REGISTER.)

       La  plage  d'adresse  à  désenregistrer  est  indiquée dans la structure uffdio_range vers
       laquelle pointe argp.

       Cette opération ioctl(2) renvoie 0 en cas de succès. En cas d'erreur, -1  est  renvoyé  et
       errno est positionné pour indiquer l'erreur. Parmi les erreurs possibles :

       EINVAL Le  champ  start  ou  len de la structure ufdio_range n'était pas un multiple de la
              taille de la page système ; ou bien le  champ  len  valait  zéro ;  ou  ces  champs
              n'étaient pas valables pour d'autres raisons.

       EINVAL Un tableau incompatible est présent dans la plage d'adresse indiquée.

       EINVAL Il n'y avait pas de tableau dans la plage d'adresse spécifiée.

   UFFDIO_COPY
       (Depuis  Linux  4.3).  Copier de manière atomique un bloc de mémoire continu dans la plage
       enregistrée pour le  userfault  et  réveiller  éventuellement  les  threads  bloqués.  Les
       adresses source et cible et le nombre d'octets à copier sont indiqués dans les champs src,
       dst et len de la structure uffdio_copy vers laquelle pointe argp :

           struct uffdio_copy {
               __u64 dst;    /* Cible de la copie */
               __u64 src;    /* Origine de la copie */
               __u64 len;    /* Nombre d'octets à copier */
               __u64 mode;   /* Drapeaux contrôlant le comportement de la copie */
               __s64 copy;   /* Nombre d'octets copiés ou erreurs de refus */
           };

       La valeur suivante peut être liée  en  bits  à  mode  pour  modifier  le  comportement  de
       l'opération UFFDIO_COPY :

       UFFDIO_COPY_MODE_DONTWAKE
              Ne pas réveiller le thread qui attend la résolution d'une erreur de page

       UFFDIO_COPY_MODE_WP
              Copier  les  pages avec des droits en lecture seule. Cela permet à l'utilisateur de
              récupérer la prochaine écriture sur la page qui bloquera et qui génèrera  un  autre
              message  userfault  de  protection  en écriture. Cela n'est utilisé que lorsque les
              modes UFFDIO_REGISTER_MODE_MISSING et UFFDIO_REGISTER_MODE_WP sont activés pour  la
              plage enregistrée.

       Le  champ  copy  est  utilisé  par le noyau pour renvoyer le nombre d'octets copiés ou une
       erreur (une valeur négative à la  façon  errno).  Si  la  valeur  renvoyée  dans  copy  ne
       correspond  pas  à  celle  indiquée  dans len, l'opération échoue avec l'erreur EAGAIN. Le
       champ copy n'est fait que pour la sortie ; il n'est pas lu par l'opération UFFDIO_COPY.

       Cette opération ioctl(2) renvoie 0 en cas de succès. Dans ce cas,  toute  la  zone  a  été
       copiée.  En  cas  d'erreur, -1 est renvoyé et errno est positionné pour indiquer l'erreur.
       Parmi les erreurs possibles :

       EAGAIN Le nombre d'octets copiés (à savoir la valeur renvoyée dans le  champ  copy)  n'est
              pas la même que celle indiquée dans le champ len.

       EINVAL dst  ou  len n'était pas un multiple de la taille de la page du système ou la plage
              indiquée dans src et len ou dst et len n'était pas valable.

       EINVAL Un bit non valable a été indiqué dans le champ mode.

       ENOENT (depuis Linux 4.11)
              Le processus fautif a modifié sa structure  de  mémoire  virtuelle  en  même  temps
              qu'une opération UFFDIO_COPY remarquable.

       ENOSPC (de Linux 4.11 à Linux 4.13)
              Le processus fautif a quitté au moment de l'opération UFFDIO_COPY.

       ESRCH (depuis Linux 4.13)
              Le processus fautif a quitté au moment de l'opération UFFDIO_COPY.

   UFFDIO_ZEROPAGE
       (Depuis Linux 4.3). Remplit de zéros une plage mémoire enregistrée avec userfaultfd.

       La  plage  demandée  est  indiquée par le champ range de la structure uffdio_zeropage vers
       laquelle pointe argp :

           struct uffdio_zeropage {
               struct uffdio_range range;
               __u64 mode;     /* Drapeaux contrôlant le comportement de la copie */
               __s64 zeropage; /* Nombre d'octets remplis de zéros ou d'erreurs de refus */
           };

       La valeur suivante peut être mise en bit et liée dans mode pour modifier  le  comportement
       de l'opération UFFDIO_ZEROPAGE :

       UFFDIO_ZEROPAGE_MODE_DONTWAKE
              Ne pas réveiller le thread qui attend la résolution d'une erreur de page.

       Le  champ  zeropage  est  utilisé par le noyau pour renvoyer le nombre d'octets remplis de
       zéros, ou une erreur de la même manière que UFFDIO_COPY. Si la  valeur  renvoyée  dans  le
       champ  zeropage ne correspond pas à celle indiquée dans range.len, l'opération échoue avec
       l'erreur EAGAIN. Le champ  zeropage  ne  sert  qu'à  la  sortie ;  il  n'est  pas  lu  par
       l'opération UFFDIO_ZEROPAGE.

       L'opération  ioctl(2) renvoie 0 en cas de succès. Dans ce cas, toute la zone a été remplie
       de zéros. En cas d'erreur, -1 est renvoyé et errno est positionné pour indiquer  l'erreur.
       Parmi les erreurs possibles :

       EAGAIN Le  nombre d'octets remplis de zéros (c'est-à-dire la valeur renvoyée dans le champ
              zeropage) ne correspond pas à la valeur indiquée dans le champ range.len.

       EINVAL range.start ou range.len n'était pas un  multiple  de  la  taille  de  la  page  du
              système ; ou range.len était de zéro ; ou la plage indiquée n'était pas valable.

       EINVAL Un bit non valable a été indiqué dans le champ mode.

       ESRCH (depuis Linux 4.13)
              Le processus fautif a quitté au moment de l'opération UFFDIO_ZEROPAGE.

   UFFDIO_WAKE
       (Depuis  Linux  4.3). Réveiller le thread qui attend la résolution de l'erreur de page sur
       une plage d'adresse mémoire indiquée.

       L'opération UFFDIO_WAKE est utilisée avec les opérations UFFDIO_COPY  et  UFFDIO_ZEROPAGE,
       dont  le  bit UFFDIO_COPY_MODE_DONTWAKE ou UFFDIO_ZEROPAGE_MODE_DONTWAKE est défini dan le
       champ mode. Le moniteur userfault  peut  effectuer  plusieurs  opérations  UFFDIO_COPY  et
       UFFDIO_ZEROPAGE   automatiquement,  puis  réveiller  explicitement  le  thread  fautif  en
       utilisant UFFDIO_WAKE.

       Le paramètre argp est un pointeur vers une structure  uffdio_range  (présentée  ci-dessus)
       qui indique la plage d'adresse.

       Cette  opération  ioctl(2)  renvoie 0 en cas de succès. En cas d'erreur, -1 est renvoyé et
       errno est positionné pour indiquer l'erreur. Parmi les erreurs possibles :

       EINVAL Le champ start ou len de la structure ufdio_range n'était pas  un  multiple  de  la
              taille  de  la  page système ; ou len était zéro ; ou la plage indiquée n'était pas
              valable pour une autre raison.

   UFFDIO_WRITEPROTECT
       (Since Linux 5.7.) Write-protect or write-unprotect a userfaultfd-registered memory  range
       registered with mode UFFDIO_REGISTER_MODE_WP.

       Le  paramètre  argp  est  un  pointeur  vers  une  structure  uffdio_range,  comme indiqué
       ci-dessous :

           struct uffdio_writeprotect {
               struct uffdio_range range; /* Plage pour modifier le droit d'écriture*/
               __u64 mode;                /* Mode pour changer le droit d'écriture */
           };

       Deux bits de droit sont pris en charge dans cette structure :

       UFFDIO_WRITEPROTECT_MODE_WP
              Quand ce bit de droits est positionné,  l'ioctl  sera  une  opération  protégée  en
              écriture sur la plage mémoire indiquée par range. Sinon, il s'agira d'une opération
              non protégée en écriture sur la  plage  indiquée,  ce  qui  peut  être  utile  pour
              résoudre une erreur de pagination de protection en écriture userfaultfd.

       UFFDIO_WRITEPROTECT_MODE_DONTWAKE
              Quand  ce  bit  de  droit  est positionné, ne pas réveiller de thread qui attend la
              résolution d'une erreur de pagination après l'opération. Cela ne peut être  indiqué
              que si UFFDIO_WRITEPROTECT_MODE_WP n'est pas indiqué.

       Cette  opération  ioctl(2)  renvoie 0 en cas de succès. En cas d'erreur, -1 est renvoyé et
       errno est positionné pour indiquer l'erreur. Parmi les erreurs possibles :

       EINVAL Le champ start ou len de la structure ufdio_range n'était pas  un  multiple  de  la
              taille  de  la  page système ; ou len était zéro ; ou la plage indiquée n'était pas
              valable pour une autre raison.

       EAGAIN Le processus a été interrompu ; réessayez cet appel.

       ENOENT La plage indiquée dans range n'est pas valable. Par  exemple,  l'adresse  virtuelle
              n'existe pas ou n'est pas enregistrée en mode protection d'écriture userfaultfd.

       EFAULT Une erreur générique a été rencontrée lors du traitement.

   UFFDIO_CONTINUE
       (Depuis  Linux  5.13). Résoudre une erreur de pagination mineure en installant des entrées
       de tabl de pagination pour les pages existantes dans le cache de page.

       Le paramètre argp est un pointeur vers une structure uffdio_continue, telle que  présentée
       ci-dessous :

           struct uffdio_continue {
               struct uffdio_range range;
                              /* Plage pour installer les PTEs for et continue */
               __u64 mode;    /* Attributs contrôlant le comportement de continue */
               __s64 mapped;  /* Nombre d'octets projetés ou erreur refusée */0
           };

       La  valeur  suivante  peut  être  liée  en  bits  à  mode pour modifier le comportement de
       l'opération UFFDIO_CONTINUE :

       UFFDIO_CONTINUE_MODE_DONTWAKE
              Ne pas réveiller le thread qui attend la résolution d'une erreur de page.

       Le champ mapped est utilisé par le noyau pour renvoyer le nombre d'octets projetés ou  une
       erreur  de  la même manière que UFFDIO_COPY. Si la valeur renvoyée dans le champ mapped ne
       correspond pas à celle indiquée dans range.len, l'opération échoue avec  l'erreur  EAGAIN.
       Le champ mapped ne sert qu'à la sortie ; il n'est pas lu par l'opération UFFDIO_CONTINUE.

       Cette  opération  ioctl(2)  renvoie  0  en cas de succès. Dans ce cas, toute la zone a été
       copiée. En cas d'erreur, -1 est renvoyé et errno est positionné  pour  indiquer  l'erreur.
       Parmi les erreurs possibles :

       EAGAIN Le  nombre d'octets projetés (c'est-à-dire la valeur renvoyée dans le champ mapped)
              ne correspond pas à la valeur indiquée dans le champ range.len.

       EEXIST Une ou plusieurs pages ont déjà été projetées dans la plage donnée.

       EFAULT Aucune page existante n'a été trouvée dans le cache de page pour la plage donnée.

       EINVAL range.start ou range.len n'était pas un  multiple  de  la  taille  de  la  page  du
              système ; ou range.len était de zéro ; ou la plage indiquée n'était pas valable.

       EINVAL Un bit non valable a été indiqué dans le champ mode.

       ENOENT Le  processus  fautif  a  modifié  sa  structure de mémoire virtuelle en même temps
              qu'une opération UFFDIO_COTINUE remarquable.

       ENOMEM L'allocation de la mémoire nécessaire pour installer les projetctions de tables  de
              pages a échoué.

       ESRCH  Le processus fautif a quitté au moment de l'opération UFFDIO_CONTINUE.

   UFFDIO_POISON
       (Since Linux 6.6.) Mark an address range as "poisoned". Future accesses to these addresses
       will raise a SIGBUS signal. Unlike MADV_HWPOISON  this  works  by  installing  page  table
       entries,  rather than "really" poisoning the underlying physical pages. This means it only
       affects this particular address space.

       The argp argument is a pointer to a uffdio_poison structure as shown below:

           struct uffdio_poison {
                struct uffdio_range range;
                                /* Range to install poison PTE markers in */
                __u64 mode;     /* Flags controlling the behavior of poison */
                __s64 updated;  /* Number of bytes poisoned, or negated error */
           };

       The following  value  may  be  bitwise  ORed  in  mode  to  change  the  behavior  of  the
       UFFDIO_POISON operation:

       UFFDIO_POISON_MODE_DONTWAKE
              Ne pas réveiller le thread qui attend la résolution d'une erreur de page.

       The  updated  field is used by the kernel to return the number of bytes that were actually
       poisoned, or an error in the same manner as UFFDIO_COPY. If  the  value  returned  in  the
       updated field doesn't match the value that was specified in range.len, the operation fails
       with the error  EAGAIN.  The  updated  field  is  output-only;  it  is  not  read  by  the
       UFFDIO_POISON operation.

       This ioctl(2)  operation returns 0 on success. In this case, the entire area was poisoned.
       On error, -1 is returned and errno is set to indicate the error. Possible errors include:

       EAGAIN The number of bytes mapped (i.e., the value returned in the  updated  field)   does
              not equal the value that was specified in the range.len field.

       EINVAL range.start  ou  range.len  n'était  pas  un  multiple  de  la taille de la page du
              système ; ou range.len était de zéro ; ou la plage indiquée n'était pas valable.

       EINVAL Un bit non valable a été indiqué dans le champ mode.

       EEXIST Une ou plusieurs pages ont déjà été projetées dans la plage donnée.

       ENOENT The faulting process has changed its virtual memory layout simultaneously  with  an
              outstanding UFFDIO_POISON operation.

       ENOMEM Allocating memory for page table entries failed.

       ESRCH  The faulting process has exited at the time of a UFFDIO_POISON operation.

VALEUR RENVOYÉE

       Voir les descriptions des opérations individuelles ci-dessus.

ERREURS

       Voir  les  descriptions  des  opérations  individuelles  ci-dessus.  En outre, les erreurs
       générales suivantes peuvent se produire pour toutes les opérations décrites ci-dessus :

       EFAULT argp pointe vers une adresse illégale.

       EINVAL (Pour toutes les opérations, sauf UFFDIO_API). L'objet userfaultfd n'a  pas  encore
              été activé (avec l'opération UFFDIO_API).

STANDARDS

       Linux.

BOGUES

       Afin  de  détecter les fonctionnalités userfault disponibles et d'activer des sous-parties
       de celles-ci, le descripteur de fichier userfaultfd doit  être  fermé  après  la  première
       opération  UFFDIO_API  qui  recherche  la disponibilité des fonctionnalités, puis réouvert
       avant la deuxième opération UFFDIO_API qui active les fonctionnalités désirées.

EXEMPLES

       Voir userfaultfd(2).

VOIR AUSSI

       ioctl(2), mmap(2), userfaultfd(2)

       Documentation/admin-guide/mm/userfaultfd.rst dans  l'arborescence  des  sources  du  noyau
       Linux

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>  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⟩.