Mmap anônimo preenchido com zero?

No Linux, a página do manual mmap (2) explica que um mapeamento anônimo

. . . não é apoiado por nenhum arquivo; seu conteúdo é inicializado em zero.

A página man mbs do FreeBSD (2) não faz uma garantia semelhante sobre o preenchimento zero, embora prometa que os bytes após o final de um arquivo em um mapeamento não-anônimo são preenchidos com zero.

Quais sabores do Unix prometem retornar a memória sem inicialização de mmaps anônimos? Quais retornam a memória inicializada zero na prática, mas não fazem tal promessa em suas páginas de manual?

É minha impressão que o preenchimento zero é parcialmente por razões de segurança. Gostaria de saber se quaisquer implementações de mmap ignoram o preenchimento de zero para uma página que foi mapeada, munmapped, em seguida, mmapada novamente por um único processo ou se quaisquer implementações preenchem uma página recém-mapeada com bits pseudo-aleatórios ou alguma constante diferente de zero.

P.S.Aparentemente, até mesmo o brk e o sbrk costumavam garantir páginas com preenchimento zero. Meus experimentos no Linux parecem indicar que, mesmo que as páginas completas sejam preenchidas com zeros após uma falha de página após uma chamada sbrk as alocar, as páginas parciais não são:

#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