Una de las novedades de a arquitectura Zen 3 que está usando AMD en los procesadores Ryzen 5000 es la inclusión del reenvío predictivo de guardado (PSF). Esto hace referencia a la predicción de dependencias entre las operaciones de carga y guardado en la ejecución de procesos que es similar a la ejecución especulativa que tantos quebraderos de cabeza le ha dado a Intel, pero también en menor medida a Qualcomm y Apple cuyos procesadores también la usan. Pero debido a cómo funciona, AMD ha avisado de que es una potencial fuente de problemas de seguridad en un libro blanco que publicó a finales de marzo.

PSF intuye el posible resultado de una operación de carga de información desde memoria a los registros y ejecuta una serie de instrucciones que previsiblemente serían necesarias. Obviamente no siempre se acierta, pero se usan momentos de poco uso para realizar esas predicciones por lo que si no se acierta en la suposición no hay pérdida de rendimiento.

Las unidades de carga-guardado (LSU) se encargan de gestionar la carga de información desde memoria y volver a guardar/almacenar en memoria el resultado de las operaciones desde los registros. Pero también en ese proceso asigna direcciones virtuales de memoria, y en el caso de que las operaciones se supongan incorrectamente puede ocurrir que se use una carga desde una dirección de memoria virtual que previamente se ha usado para una operación de guardado a memoria distinta de la operación actual.

La arquitectura de AMD, como otras, evitan en algunos casos la escritura en memoria de una acción de guardado si va a ser usada por una instrucción. Esto hace que se reenvíe desde los registros de resultado (guardado) a los registros de entrada (carga) la información ejecutada de manera especulativa sin pasar por la memoria principal. Es una técnica llamada reenvío de guardado hacia carga (STLF), con lo cual se mejora la ejecución de código; son unos cuantos ciclos lo que lleva guardar en memoria información desde los registros, pero de un registro a otro es casi inmediato o reusando una dirección virtual de salida como otra de entrada. De ahí el nombre de reenvío predictivo desde guardado dado por AMD, que incluye un giro especial a la ejecución especulativa como es el aprendizaje de la relación entre las operaciones de carga y almacenamiento o desde qué direcciones virtuales se tiene que cargar la información en lugar de desde memoria.

El libro blanco describe algunas situaciones en las que se puede hacer un uso incorrecto de PSF. Pone un ejemplo concreto en el que un cierto código en C al ser convertido a ensamblador provocaría problemas de reutilización de la dirección virtual entre el resultado de la ejecución de una instrucción que normalmente ejecutaría un guardado en memoria pero que en su lugar pasa a reusarse la dirección virtual como la fuente de una carga de datos. Se trataría de suponer erróneamente la dirección virtual desde la que cargar la información. La suposición de desde qué dirección se tiene que cargar no se puede controlar por el usuario, pero sí sería susceptible a un ataque de canal lateral aunque en menor grado que con la vulnerabilidad Spectre porque hay diferencias de arquitectura que lo mitigan.

Sea como sea, AMD establece el análisis de seguridad de esas suposiciones o predicciones incorrectas y cierra el artículo indicando que no se ha detectado su uso para realizar ataques de tipo alguno. Aun así, en el libro blanco también indica a las partes interesadas la forma de desactivar el reenvío predictivo de guardado para todo aquel código que precise de un extra de seguridad al evitar los ataques de canal lateral como ocurre en la vulnerabilidad Spectre de anteriores generaciones de procesadores de Intel. Obviamente tendrá una pérdida de rendimiento, pero se hace a nivel del núcleo del sistema operativo por lo que PSF es sencillo de desactivar.

Vía: Tom's Hardware.