Citant la source du noyau :"Les pointeurs du noyau ont des informations redondantes, nous pouvons donc utiliser un schéma dans lequel nous pouvons renvoyer soit un code d'erreur, soit un [...] pointeur avec la même valeur de retour. ”
Les valeurs -1..-4095 (correspondant à 0xfffff000–0xfffffff en mode 32 bits) sont réservées aux valeurs errno au niveau du noyau. Les 4Ko restants de 0xffffe000–0xffffefff sont réservés pour la page magique vsyscall vdso, mais comme la page vdso est déplaçable depuis de nombreuses lunes, cette zone reste potentiellement non peuplée, c'est-à-dire le [stack]
entrée en /proc/*/maps
se termine toujours à 0xffffdfff, que [vdso] soit mappé à 0xffffe000 ou ailleurs.
Une partie de la mémoire du noyau peut se trouver à l'intérieur de l'espace d'adressage de l'espace utilisateur de l'application et être en quelque sorte mmapée avec PROT_NONE
. Un peu d'espace d'adressage serait alors utilisé, mais sans être accessible par le programme (donc aucune corruption n'est possible).