Anonimowy mmap wypełniony zerami?

W systemie Linux strona podręcznika systemowego mmap (2) wyjaśnia, że ​​anonimowe mapowanie

. . . nie jest wspierany przez żaden plik; jego zawartość jest inicjowana na zero.

Strona man FreeBSD mmap (2) nie daje podobnej gwarancji wypełnienia zerami, chociaż obiecuje, że bajty po zakończeniu pliku w nieanonimowym odwzorowaniu są wypełnione zerami.

Które smaki Unixa obiecują zwrócić pamięć inicjalizowaną przez zero z anonimowych mmaps? Które z nich przywracają pamięć inicjalizowaną zerami w praktyce, ale nie dają takiej obietnicy na swoich stronach man?

Mam wrażenie, że wypełnianie zera jest częściowo ze względów bezpieczeństwa. Zastanawiam się, czy jakiekolwiek implementacje mmap pomijają wypełnianie zera dla strony, która została zmapowana, zminimalizowana, a następnie ponownie zmapowana przez pojedynczy proces, lub jeśli jakiekolwiek implementacje wypełniają nowo zmapowaną stronę bitami pseudolosowymi lub niezerową stałą.

P.S.Najwyraźniej nawet brk i sbrk gwarantowały zero wypełnionych stron. Moje eksperymenty na Linuksie wydają się wskazywać, że nawet jeśli pełne strony są wypełnione zerami po błędzie strony po przydzieleniu ich przez wywołanie sbrk, częściowe strony nie są:

#include <unistd.h>
#include <stdio.h>

int main() {
  const intptr_t many = 100;
  char * start = sbrk(0);
  sbrk(many);
  for (intptr_t i = 0; i < many; ++i) {
    start[i] = 0xff;
  }
  printf("%d\n",(int)start[many/2]);
  sbrk(many/-2);
  sbrk(many/2);
  printf("%d\n",(int)start[many/2]);
  sbrk(-1 * many);
  sbrk(many/2);
  printf("%d\n",(int)start[0]);
}

questionAnswers(1)

yourAnswerToTheQuestion