| bzero(3) | Library Functions Manual | bzero(3) |
bzero, explicit_bzero - zeruje łańcuch bajtów
Standardowa biblioteka C (libc, -lc)
#include <strings.h>
void bzero(void s[.n], size_t n);
#include <string.h>
void explicit_bzero(void s[.n], size_t n);
Funkcja bzero() usuwa dane w n bajtach pamięci, zaczynając od położenia wskazanego przez s, zapisując do tego obszaru zera (bajty zawierające '\0').
Funkcja explicit_bzero() wykonuje to samo zadanie co bzero(). Różni się od bzero() tym, że występuje tu gwarancja, iż operacja usuwania nie zostanie pominięta ze względu na wydedukowanie przez optymalizacje kompilatora, że jest „niepotrzebna”.
Brak.
Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku attributes(7).
| Interfejs | Atrybut | Wartość |
| bzero(), explicit_bzero() | Bezpieczeństwo wątkowe | MT-bezpieczne |
Brak.
Funkcja explicit_bzero() odpowiada na problem, na który mogą natknąć się aplikacje zwracające uwagę na bezpieczeństwo, przy używaniu bzero(): 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 correct, może zupełnie usunąć wywołanie bzero(). Jest to problemem, gdy wywołanie bzero() 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 explicit_bzero() nigdy nie są optymalizowane przez kompilator.
Funkcja explicit_bzero() nie rozwiązuje jednak wszystkich problemów związanych z usuwaniem wrażliwych danych:
Proszę zauważyć, że deklarowanie wrażliwych zmiennych kwalifikatorem volatile nie 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.
Jednak pomimo powyższych detali, aplikacje zwracające uwagę na bezpieczeństwo powinny raczej korzystać z explicit_bzero(), niż tego nie robić. Deweloperzy explicit_bzero() spodziewają się, że przyszłe kompilatory będą rozpoznawały wywołania do explicit_bzero() 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 „scratch” stosu.
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>
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.
| 15 czerwca 2024 r. | Linux man-pages 6.9.1 |