Recientemente ha habido una buena cantidad de trabajo realizado para limpiar la carga de microcódigo de CPU Intel/AMD x86 (también utilizado por CPUs x86_64) en Linux que ahora se ha fusionado para Linux 6.7.
Con la carga del microcódigo de la CPU en el arranque continuando siendo muy importante en nombre de la mitigación de un flujo continuo de nuevas vulnerabilidades de seguridad de la CPU, así como la solución de problemas de funcionalidad a veces, Thomas Gleixner recientemente se dedicó a la limpieza de la funcionalidad de carga del microcódigo de la CPU x86 e hizo varias mejoras en el camino.
Puede leer también | Red Hat Enterprise Linux 6.7 afianza la estabilidad operativa
Algunas de las mejoras en la carga de microcódigo x86 en Linux 6.7 incluyen no cargar microcódigo en 32 bits antes de que se haya habilitado la paginación para evitar una serie de problemas, una carga tardía del microcódigo de la CPU revisada, un microcódigo de carga tardía que ahora es seguro para el hotplug de la CPU y la noción de una revisión mínima del microcódigo para determinar cuándo se considera segura la carga tardía del microcódigo.
Aspectos de X86 Microcódigo
Los aspectos más destacados de x86/microcódigo se resumen en:
- Reestructurar el código necesario para ello y añadir un mapeo initrd temporal en 32 bits para que el cargador pueda acceder a los blobs de microcódigo. Esto en sí mismo es una preparación para la próxima gran mejora:
- No cargue microcódigo en 32 bits antes de que se haya habilitado la paginación. Manejar esto ha causado un sinfín de dolores de cabeza, problemas, código feo y hacks innecesarios en el pasado. Y realmente no había ninguna razón sensata para hacerlo en primer lugar. Así que cambia la carga de 32 bits para que ocurra después de que se haya habilitado la paginación y convierte el código del cargador en "realmente puro" de nuevo.
- Elimina la carga de microcódigos mixtos en Intel - un único parche cargado en todo el sistema es suficiente.
- Modificar la carga tardía para saber qué CPUs han actualizado el microcódigo correctamente y cuáles no, y actuar en consecuencia.
- Trasladar la carga tardía de microcódigo en Intel al contexto NMI para garantizar la carga simultánea en todos los subprocesos.
- Hacer que la carga tardía sea segura para la CPU y que los subprocesos desconectados se activen para la actualización.
- Añadir soporte para una revisión mínima que determine si la carga tardía de microcódigo es segura en una máquina y el microcódigo no cambia las características visibles del software que la máquina no puede utilizar de todos modos puesto que la detección de características ya se ha producido. A grandes rasgos, la revisión mínima es el número de revisión más pequeño que debe estar cargado actualmente en el sistema para que puedan permitirse las actualizaciones tardías.
- Otras mejoras, correcciones, etc. por todas partes
Puede leer también | Cómo es la sostenibilidad y mantenimiento del Kernel de Linux
Estas mejoras se fusionan para Linux 6.7.
Qué es el microcódigo de las CPU x86
El microcódigo de una CPU x86 se refiere a un conjunto de instrucciones de bajo nivel que están almacenadas en la propia unidad de procesamiento central (CPU). Estas instrucciones son específicas de la arquitectura x86 y son utilizadas para ejecutar las operaciones más básicas y fundamentales que realiza la CPU.
El microcódigo actúa como un nivel intermedio entre las instrucciones de nivel de lenguaje de máquina (assembly) y la lógica de hardware de la CPU. Se almacena en una memoria especial dentro del procesador y se carga durante el inicio del sistema. Este código permite a la CPU interpretar y ejecutar las instrucciones de nivel de máquina, permitiendo así que el procesador realice diversas operaciones y funciones.
Puede leer también | Disponible Linux 6.6-rc2, 32 años desde el lanzamiento de Linux 0.01
El microcódigo puede ser actualizado por el fabricante de la CPU para corregir errores, mejorar el rendimiento o agregar nuevas características sin tener que cambiar físicamente el hardware. Estas actualizaciones se conocen como microcódigo de firmware o microcódigo de CPU y suelen ser distribuidas a través de actualizaciones de BIOS o UEFI por parte de los fabricantes de placas madre.
Puede leer también | Linux 6.6 habilita incondicionalmente la carga de microcódigo en CPU x86
En resumen, el microcódigo de las CPU x86 es una capa de instrucciones de bajo nivel que ayuda a la CPU a interpretar y ejecutar las instrucciones de nivel de máquina, permitiendo así su funcionamiento y facilitando posibles actualizaciones y mejoras en el futuro.