Una interesante serie de parches publicada por Intel esta semana para el kernel de Linux está trabajando en la implementación de la Separación lineal del espacio de direcciones (LASS) como una característica que viene con los futuros procesadores para ayudar a evitar los accesos especulativos a las direcciones en el modo de usuario y kernel.
La serie de parches LASS resume la nueva característica como:
LASS funciona solo en modo de 64 bits y divide el espacio de direcciones virtuales de 64 bits en dos mitades:
1. Mitad inferior (LA[63]=0)–> espacio de usuario
2. Upper half (LA[63]=1)–> kernel spaceCuando LASS está habilitado, se generará un fallo de protección general #GP(0) si el software accede a la dirección desde la mitad en la que se encuentra. reside en otra mitad, por ejemplo, desde el espacio del usuario hasta la mitad superior, o desde el espacio del kernel hasta la mitad inferior. Esta protección se aplica al acceso a datos, ejecución de código, instrucciones de vaciado de línea de caché.
Casi todos los accesos al núcleo son a la mitad superior del espacio de direcciones virtuales. Sin embargo, existen razones válidas para que el núcleo acceda a la mitad inferior. Para estos casos, el kernel puede suspender temporalmente la aplicación de LASS al deshabilitar SMAP (Prevención de acceso en modo supervisor).
El acceso al kernel para copiar datos a/desde direcciones de usuario ya desactiva SMAP usando las funciones stac()/clac(). Se agregan nuevas funciones low_addr_access_begin()/low_addr_access_end() para deshabilitar/habilitar SMAP alrededor de otro código que legítimamente necesita acceder a la mitad inferior del espacio de direcciones virtuales.
El espacio de usuario no puede usar ninguna dirección de kernel mientras LASS está habilitado. Menos afortunadamente, las funciones vsyscall heredadas utilizadas por la versión anterior de glibc se ubican en el rango de direcciones 0xffffffffff600000-0xffffffffff601000 y se emulan en el kernel. Por lo tanto, para cumplir con la política LASS, vsyscall heredado está deshabilitado de manera predeterminada.
Intel también ha documentado aún más LASS en su último manual.
Los parches de Intel confirman que los primeros procesadores que contarán con separación lineal del espacio de direcciones serán su línea Sierra Forest. Sierra Forst es para los procesadores de servidor Xeon basados en E-core que se esperan en 2024 y para competir con los procesadores AMD EPYC”Bergamo”.
La habilitación inicial del kernel de Linux para Intel LASS tiene poco más de 100 líneas de código nuevo y actualmente se encuentra en revisión.