C'est une question de bon sens. Nous n'avons pas non plus besoin de documenter le fait que 1+1=2.
Un système d'exploitation qui laisse échapper des secrets entre les processus serait inutile pour de nombreuses applications. Par conséquent, si un système d'exploitation à usage général veut l'être, il isolera les processus. Garder la trace des pages qui pourraient contenir des secrets et de celles qui sont sûres représenterait une charge de travail trop importante et une source d'erreurs trop importante, c'est pourquoi nous supposons que chaque page qui a été utilisée est sale et contient des secrets. L'initialisation de nouvelles pages avec des déchets est plus lente que l'initialisation avec une seule valeur, c'est pourquoi les déchets aléatoires ne sont pas utilisés. La valeur la plus utile est zéro (pour calloc
ou bss par exemple), de sorte que les nouvelles pages sont mises à zéro pour les effacer.
Il n'y a pas d'autre solution.
Il peut y avoir des systèmes d'exploitation spéciaux qui ne le font pas et qui laissent filtrer des secrets entre les processus (cela peut être nécessaire pour des exigences de temps réel, par exemple). Certains systèmes d'exploitation plus anciens ne disposaient pas d'une gestion de la mémoire et d'une isolation des privilèges décentes. En outre, malloc
réutilisera la mémoire précédemment libérée au sein du même processus. C'est pourquoi malloc
sera documenté comme contenant des déchets non initialisés. Mais cela ne signifie pas que vous serez jamais en mesure d'obtenir de la mémoire non initialisée d'un autre processus sur un système d'exploitation général.
Je suppose qu'une règle simple est la suivante : si votre système d'exploitation vous demande un jour un mot de passe, il ne donnera pas de pages non initialisées à un processus et, puisque la mise à zéro est le seul moyen raisonnable d'initialiser les pages, elles seront mises à zéro.