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

NOM

       bzero, explicit_bzero - mise à zéro d'une chaîne d'octets

BIBLIOTHÈQUE

       Bibliothèque C standard (libc, -lc)

SYNOPSIS

       #include <strings.h>

       void bzero(void s[.n], size_t n);

       #include <string.h>

       void explicit_bzero(void s[.n], size_t n);

DESCRIPTION

       La fonction bzero() efface les données dans les n premiers octets de la mémoire à partir de l'emplacement
       pointé par s en écrivant des zéros (octets contenant « \0 ») dans cette zone.

       La  fonction explicit_bzero() exécute les mêmes tâches que bzero(). Elle diffère de bzero() en ce qu'elle
       garantit que  les  optimisations  du  compilateur  ne  suppriment  pas  l'opération  d'effacement  si  le
       compilateur déduit que l'opération n'est « pas indispensable ».

VALEUR RENVOYÉE

       Aucune.

ATTRIBUTS

       Pour une explication des termes utilisés dans cette section, consulter attributes(7).
       ┌──────────────────────────────────────────────────────────────────────┬──────────────────────┬─────────┐
       │ InterfaceAttributValeur  │
       ├──────────────────────────────────────────────────────────────────────┼──────────────────────┼─────────┤
       │ bzero(), explicit_bzero()                                            │ Sécurité des threads │ MT-Safe │
       └──────────────────────────────────────────────────────────────────────┴──────────────────────┴─────────┘

STANDARDS

       Aucune.

HISTORIQUE

       explicit_bzero()
              glibc 2.25.

              La fonction explicit_bzero() est une extension qui n'est pas standard, mais est présente également
              dans   certains   BSD.   Certaines   autres  implémentations  ont  une  fonction  similaire  comme
              memset_explicit() ou memset_s().

       bzero()
              4.3BSD.

              Fonction marquée « LEGACY » dans POSIX.1-2001, supprimée dans POSIX.1-2008.

NOTES

       La fonction explicit_bzero() traite d'un problème que peuvent rencontrer les applications  soucieuses  de
       la  sécurité lors de l'utilisation de bzero() : si le compilateur peut déduire que l'emplacement à mettre
       à zéro ne sera jamais plus touché par un programme correct, alors il peut supprimer complètement  l'appel
       bzero().  C'est  un problème si l'intention de l'appel bzero() était d'effacer des données sensibles (par
       exemple des mots de passe) pour éviter la possibilité de la divulgation  des  données  par  un  programme
       incorrect ou compromis. Les appels à explicit_bzero() ne sont jamais optimisés par le compilateur.

       La  fonction  explicit_bzero()  ne  résout  pas  tous  les  problèmes associés à l'effacement des données
       sensibles :

       -  La fonction explicit_bzero() ne garantit pas que les données sensibles sont complètement  effacées  de
          la  mémoire.  (C'est  la même chose pour bzero().) Par exemple, il peut y avoir des copies des données
          sensibles dans un registre et des zones « scratch » de la pile. La fonction explicit_bzero()  n'a  pas
          connaissance de ces copies et ne peut pas les effacer.

       -  Dans certaines circonstances, explicit_bzero() peut réduire la sécurité. Si le compilateur a déterminé
          que  la  variable  contenant  les  données  sensibles pouvait être optimisée pour être stockée dans un
          registre (parce qu'elle était assez petite pour tenir dans un registre et  qu'aucune  autre  opération
          que  l'appel  explicit_bzero()  n'avait  besoin  d'obtenir  l'adresse  de  la variable), alors l'appel
          explicit_bzero() pourra forcer la copie des données du registre vers un emplacement  en  mémoire  vive
          qui  est  alors  immédiatement  effacé  (tandis que la copie dans le registre demeure non touchée). Le
          problème ici est que la donnée en mémoire vive est plus susceptible d'être exposée par  un  bogue  que
          les  données  dans le registre, et donc l'appel explicit_bzero() crée une courte fenêtre temporelle où
          les données sont plus vulnérables qu'elles ne l'auraient été  si  aucune  tentative  d'effacement  des
          données n'avait été entreprise.

       Notez  que  déclarer  la  variable  sensible  avec le qualificatif de volatile n'élimine pas les problème
       ci-dessus. En fait, cela ne fait que l’aggraver dans la mesure où, par exemple, cela  peut  faire  qu'une
       variable, qui autrement aurait été optimisée dans un registre, est plutôt maintenue en mémoire vive (plus
       vulnérable) durant toute son existence.

       Malgré  les détails ci-dessus, pour les applications soucieuses de la sécurité, utiliser explicit_bzero()
       est généralement préférable à ne pas le faire. Les développeurs d'explicit_bzero() s'attendent à  ce  que
       les  compilateurs  à  venir  reconnaîtront  les  appels  d'explicit_bzero() et prendront des mesures pour
       s'assurer que toutes les copies des données sensibles sont  effacées,  y  compris  les  copies  dans  les
       registres ou dans les zones « scratch » de la pile.

VOIR AUSSI

       bstring(3), memset(3), swab(3)

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>,   Frédéric   Hantrais   <fhantrais@gmail.com>   et   Jean-Pierre    Giraud    <jean-
       pierregiraud@neuf.fr>

       Cette  traduction  est  une  documentation libre ; veuillez vous reporter à la GNU General Public License
       version 3 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.

Pages du manuel de Linux 6.9.1                    15 juin 2024                                          bzero(3)