¿Cómo puede un proceso de Linux del espacio de usuario referirse a una dirección del kernel?

1

Me gustaría ayudar a comprender un aspecto particular de la fusión.

Según tengo entendido, el error de fusión se puede usar para que un proceso de Linux del espacio de usuario acceda a la memoria del kernel (indirectamente, a través de un canal del lado de la sincronización). El Listado 2 en el papel de fusión es:

1 ; rcx = kernel address
2 ; rbx = probe array
3 retry:
4 mov al, byte [rcx]
5 shl rax, 0xc
6 jz retry
7 mov rbx, qword [rbx + rax]

Estoy confundido acerca de cómo puede existir una "dirección del kernel" dentro de un proceso de espacio de usuario. ¿Un proceso de espacio de usuario no tendría su propio espacio de direcciones y mapeo de memoria, diferente al núcleo? Mi expectativa es que, en un proceso de espacio de usuario, la dirección dentro de rcx se traduciría en algo diferente a lo que se traduciría dentro del kernel. Probablemente solo un error de error / segmentación.

¿Cómo es posible que un proceso de espacio de usuario en linux se refiera a una dirección del kernel?

    
pregunta rain1 08.01.2018 - 17:57
fuente

1 respuesta

5

Como una optimización del rendimiento, la memoria del kernel se asignó dentro del espacio de memoria de la aplicación. Las páginas están protegidas, pero las tablas de páginas se asignaron (antes de KPTI) para que no tuvieran que cargarlas desde la memoria en cada llamada del sistema. Ahora, cada llamada al sistema incurre en una sobrecarga adicional para cargar las tablas de páginas del kernel.

    
respondido por el David 08.01.2018 - 18:06
fuente

Lea otras preguntas en las etiquetas