Anónimo mmap lleno a cero?

En Linux, la página man de mmap (2). Explica que un mapeo anónimo

. . . no está respaldado por ningún archivo; Sus contenidos se inicializan a cero.

La página de manual de FreeBSD mmap (2) no ofrece una garantía similar sobre el llenado a cero, aunque sí promete que los bytes después del final de un archivo en una asignación no anónima se llenan en cero.

¿Qué sabores de Unix prometen devolver memoria inicializada cero de mmaps anónimos? ¿Cuáles devuelven en la práctica la memoria inicializada con cero, pero no hacen tal promesa en sus páginas de manual?

Tengo la impresión de que el llenado a cero es parcialmente por razones de seguridad. Me pregunto si alguna de las implementaciones de mmap omite el llenado a cero de una página que fue de mmapped, munmapped, luego de nuevo mmapped por un solo proceso, o si alguna de las implementaciones llena una página recién mapeada con bits pseudoaleatorios o alguna constante distinta de cero.

PDAparentemente, incluso brk y sbrk solían garantizar páginas llenas de cero. Mis experimentos en Linux parecen indicar que, incluso si las páginas completas se rellenan con cero en caso de fallo de página después de que una llamada sbrk las asigna, las páginas parciales no lo son:

#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]);
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta