.\" -*- coding: UTF-8 -*-
'\" t
.\" Copyright (C) 2017 Michael Kerrisk <mtk.manpages@gmail.com>
.\"
.\" SPDX-License-Identifier: Linux-man-pages-copyleft
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH bzero 3 "15 czerwca 2024 r." "Linux man\-pages 6.9.1" 
.SH NAZWA
bzero, explicit_bzero \- zeruje łańcuch bajtów
.SH BIBLIOTEKA
Standardowa biblioteka C (\fIlibc\fP, \fI\-lc\fP)
.SH SKŁADNIA
.nf
\fB#include <strings.h>\fP
.P
\fBvoid bzero(void \fP\fIs\fP\fB[.\fP\fIn\fP\fB], size_t \fP\fIn\fP\fB);\fP
.P
\fB#include <string.h>\fP
.P
\fBvoid explicit_bzero(void \fP\fIs\fP\fB[.\fP\fIn\fP\fB], size_t \fP\fIn\fP\fB);\fP
.fi
.SH OPIS
Funkcja \fBbzero\fP() usuwa dane w \fIn\fP bajtach pamięci, zaczynając od
położenia wskazanego przez \fIs\fP, zapisując do tego obszaru zera (bajty
zawierające \[aq]\[rs]0\[aq]).
.P
Funkcja \fBexplicit_bzero\fP() wykonuje to samo zadanie co \fBbzero\fP(). Różni
się od \fBbzero\fP() tym, że występuje tu gwarancja, iż operacja usuwania nie
zostanie pominięta ze względu na wydedukowanie przez optymalizacje
kompilatora, że jest \[Bq]niepotrzebna\[rq].
.SH "WARTOŚĆ ZWRACANA"
Brak.
.SH ATRYBUTY
Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku
\fBattributes\fP(7).
.TS
allbox;
lbx lb lb
l l l.
Interfejs	Atrybut	Wartość
T{
.na
.nh
\fBbzero\fP(),
\fBexplicit_bzero\fP()
T}	Bezpieczeństwo wątkowe	MT\-bezpieczne
.TE
.SH STANDARDY
Brak.
.SH HISTORIA
.TP 
\fBexplicit_bzero\fP()
glibc 2.25.
.IP
Funkcja \fBexplicit_bzero\fP() jest rozszerzeniem niestandardowym, obecnym
również w niektórych BSD. Niektóre inne implementacje posiadają podobną
funkcję np. \fBmemset_explicit\fP() lub \fBmemset_s\fP().
.TP 
\fBbzero\fP()
4.3BSD.
.IP
Oznaczone jako LEGACY (przestarzałe) w POSIX.1\-2001. Usunięta w
POSIX.1\-2008.
.SH UWAGI
Funkcja \fBexplicit_bzero\fP() odpowiada na problem, na który mogą natknąć się
aplikacje zwracające uwagę na bezpieczeństwo, przy używaniu \fBbzero\fP():
jeśli kompilator może wywnioskować, że położenie, które ma zostać
wyzerowane, nie będzie nigdy więcej osiągnięte przez program \fIcorrect\fP,
może zupełnie usunąć wywołanie \fBbzero\fP(). Jest to problemem, gdy wywołanie
\fBbzero\fP() miało usunąć wrażliwe dane (np. hasła), aby zapobiec możliwości
wycieku danych przez niepoprawny lub przełamany program. Wywołania do
\fBexplicit_bzero\fP() nigdy nie są optymalizowane przez kompilator.
.P
Funkcja \fBexplicit_bzero\fP() nie rozwiązuje jednak wszystkich problemów
związanych z usuwaniem wrażliwych danych:
.IP \[bu] 3
Funkcja \fBexplicit_bzero\fP() \fInie\fP gwarantuje całkowitego usunięcia
wrażliwych danych z pamięci (jest to prawdziwe również w przypadku
\fBbzero\fP()). Kopie wrażliwych danych mogą być na przykład przechowywane w
rejestrze i w przestrzeniach \[Bq]scratch\[rq] stosu. Funkcja
\fBexplicit_bzero\fP() nie jest świadoma ich istnienia i nie może ich usunąć.
.IP \[bu]
W niektórych okolicznościach, \fBexplicit_bzero\fP() może \fIpogorszyć\fP
bezpieczeństwo. Jeśli kompilator dojdzie do wniosku, że zmienna
przechowująca wrażliwe dane może być zoptymalizowana przez przechowanie w
rejestrze (ponieważ jest na tyle mała, że może się zmieścić w rejestrze, a
do pobrania adresu zmiennej nie jest konieczne operacja inna niż wywołanie
\fBexplicit_bzero\fP()), to wywołanie \fBexplicit_bzero\fP() wymusi skopiowanie
danych z rejestru do położenia w RAM\-ie, które jest następnie niezwłocznie
usuwane (natomiast kopia w rejestrze pozostaje nienaruszona). Problemem jest
tu fakt, że dane w RAM\-ie mogą być łatwiej odsłonięte przez błąd, niż dane w
rejestrze, zatem wywołanie \fBexplicit_bzero\fP() tworzy krótkie okno czasowe,
gdy wrażliwe dane są bardziej narażone, niż byłyby gdyby nie próbowano
usunąć danych.
.P
Proszę zauważyć, że deklarowanie wrażliwych zmiennych kwalifikatorem
\fBvolatile\fP \fInie\fP eliminuje powyższych problemów. W rzeczywistości pogarsza
je, ponieważ może na przykład wymusić sytuację, gdy zmienna, która zostałaby
zoptymalizowana do rejestru, będzie w zamian utrzymywana w (bardziej
narażonej) pamięci RAM, przez cały swój okres istnienia.
.P
Jednak pomimo powyższych detali, aplikacje zwracające uwagę na
bezpieczeństwo powinny raczej korzystać z \fBexplicit_bzero\fP(), niż tego nie
robić. Deweloperzy \fBexplicit_bzero\fP() spodziewają się, że przyszłe
kompilatory będą rozpoznawały wywołania do \fBexplicit_bzero\fP() i podejmą
kroki, aby upewnić się, że wszystkie kopie wrażliwych danych zostały
usunięte, w tym także kopie w rejestrze i w obszarach \[Bq]scratch\[rq]
stosu.
.SH "ZOBACZ TAKŻE"
\fBbstring\fP(3), \fBmemset\fP(3), \fBswab\fP(3)
.PP
.SH TŁUMACZENIE
Tłumaczenie niniejszej strony podręcznika:
Adam Byrtek <alpha@irc.pl>,
Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl>,
Robert Luberda <robert@debian.org>
i
Michał Kułach <michal.kulach@gmail.com>
.
.PP
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach
licencji można uzyskać zapoznając się z
.UR https://www.gnu.org/licenses/gpl-3.0.html
GNU General Public License w wersji 3
.UE
lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
.PP
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy
dyskusyjnej
.MT manpages-pl-list@lists.sourceforge.net
.ME .
