Provided by: manpages-fr-dev_4.19.0-7_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.

VERSIONS

       explicit_bzero() a été introduite dans la glibc 2.25.

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

       La  fonction  bzero()  est  déconseillée  (marquée « LEGACY » dans POSIX.1-2001), utilisez
       memset(3) dans les nouveaux programmes. POSIX.1-2008 supprime la spécification de bzero().
       La fonction bzero a été introduite dans 4.3BSD.

       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().

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