bzero(3)

NUME
bzero, explicit_bzero - aduce la zero un șir de octeți

BIBLIOTECA
Biblioteca C standard (libc, -lc)

SINOPSIS
#include <strings.h>

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

#include <string.h>

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

DESCRIERE
Funcția bzero() șterge datele din n octeți ai memoriei începând de la locația indicată de s, prin scrierea de zerouri (octeți care conțin '\0') în zona respectivă.

Funcția explicit_bzero() îndeplinește aceeași sarcină ca și bzero(). Ea diferă de bzero() prin faptul că garantează că optimizările compilatorului nu vor elimina operația de ștergere dacă compilatorul deduce că operația „nu este necesară”.

VALOAREA RETURNATĂ
Niciuna.

ATRIBUTE
Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).
Interfață | Atribut | Valoare
bzero(), explicit_bzero() | Siguranța firelor | MT-Safe

STANDARDE
Niciuna.

ISTORIC

explicit_bzero()
    glibc 2.25.

    Funcția explicit_bzero() este o extensie nestandardizată care este prezentă și pe unele BSD-uri. Unele alte implementări au o funcție similară, cum ar fi memset_explicit() sau memset_s().

bzero()
    4.3BSD.

    Marcată ca fiind învechită „LEGACY” în POSIX.1-2001. Eliminată în POSIX.1-2008.

NOTE
Funcția explicit_bzero() rezolvă o problemă cu care se pot confrunta aplicațiile preocupate de securitate atunci când folosesc bzero(): dacă compilatorul poate deduce că locația care urmează să fie pusă la zero nu va mai fi niciodată atinsă de un program corect, atunci poate elimina complet apelul bzero(). Aceasta este o problemă dacă intenția apelului bzero() a fost de a șterge date sensibile (de exemplu, parole) pentru a preveni posibilitatea ca datele să fie divulgate de un program incorect sau compromis. Apelurile la explicit_bzero() nu sunt niciodată optimizate de compilator.

Funcția explicit_bzero() nu rezolvă toate problemele asociate cu ștergerea datelor sensibile:

•   Funcția explicit_bzero() nu garantează că datele sensibile sunt șterse complet din memorie; (același lucru este valabil și pentru bzero()). De exemplu, pot exista copii ale datelor sensibile într-un registru și în zonele de stivă „scratch”. Funcția explicit_bzero() nu este conștientă de aceste copii și nu le poate șterge.

•   În anumite circumstanțe, explicit_bzero() poate diminua securitatea. În cazul în care compilatorul a determinat că variabila care conține datele sensibile poate fi optimizată pentru a fi stocată într-un registru (deoarece este suficient de mică pentru a încăpea într-un registru și nicio altă operație în afară de apelul explicit_bzero() nu ar trebui să ia adresa variabilei), atunci apelul explicit_bzero() va forța datele să fie copiate din registru într-o locație din RAM care este apoi ștearsă imediat (în timp ce copia din registru rămâne neafectată). Problema aici este că datele din RAM sunt mai susceptibile de a fi expuse de o eroare decât datele dintr-un registru și, astfel, apelul explicit_bzero() creează o scurtă fereastră de timp în care datele sensibile sunt mai vulnerabile decât ar fi fost dacă nu s-ar fi încercat ștergerea lor.

Rețineți că declararea variabilei sensibile cu calificativul volatile nu elimină problemele de mai sus. Într-adevăr, le va înrăutăți, deoarece, de exemplu, poate forța o variabilă care altfel ar fi fost optimizată într-un registru să fie menținută în schimb în RAM (mai vulnerabilă) pe toată durata sa de viață.

Fără a aduce atingere detaliilor de mai sus, pentru aplicațiile care țin cont de securitate, utilizarea explicit_bzero() este, în general, preferabilă în locul neutilizării sale. Dezvoltatorii explicit_bzero() anticipează că viitoarele compilatoare vor recunoaște apelurile la explicit_bzero() și vor lua măsuri pentru a se asigura că toate copiile datelor sensibile sunt șterse, inclusiv copiile din registre sau din zonele de stivă „scratch”.

CONSULTAȚI ȘI
bstring(3), memset(3), swab(3)

TRADUCERE
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 (https://www.gnu.org/licenses/gpl-3.0.html) sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.