Citando la fuente del kernel:"Los punteros del kernel tienen información redundante, por lo que podemos usar un esquema en el que podemos devolver un código de error o un [...] puntero con el mismo valor de retorno. ”
Los valores -1..-4095 (asignación a 0xfffff000–0xffffffff en modo de 32 bits) están reservados para valores errno a nivel de kernel. Los otros 4 KB de 0xffffe000–0xffffefff se mantienen libres para la página mágica vsyscall vdso, pero dado que la página vdso es reubicable desde muchas lunas, esta área permanece potencialmente despoblada, es decir, el [stack]
entrada en /proc/*/maps
termina en 0xffffdfff siempre, independientemente de si [vdso] está asignado en 0xffffe000 o en otro lugar.
Parte de la memoria del kernel puede estar dentro del espacio de direcciones del espacio de usuario de la aplicación, y ser algo así como mmap-ed con PROT_NONE
. Entonces se usaría algo de espacio de direcciones, pero sin que el programa pudiera acceder a él (por lo que no es posible que se dañe).