.\" -*- coding: UTF-8 -*- '\" t .\" Copyright (C) 2017 Michael Kerrisk .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH bzero 3 "2 maja 2024 r." "Linux man\-pages 6.8" .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 \fP .P \fBvoid bzero(void \fP\fIs\fP\fB[.\fP\fIn\fP\fB], size_t \fP\fIn\fP\fB);\fP .P \fB#include \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]\e0\[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 Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Adam Byrtek , Andrzej Krzysztofowicz , Robert Luberda i Michał Kułach . .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 .