Linus Torvalds inició otro ciclo de desarrollo para el kernel de Linux, anunciando el lanzamiento de Linux 5.10-rc1, y esta vez con un giro histórico. La nueva versión del kernel en realidad marca el final de una característica de hace décadas que se hizo redundante después de que los desarrolladores descubrieron que era la fuente de errores de seguridad.
Se trata deset_fs() lo que permite que el kernel de Linux anule los espacios de direcciones, lo que fue muy útil para hacer con los procesadores 286 y 386 de Intel.
Como explicó Torvalds en su actualización semanal del kernel, set_fs() comprueba «si una copia del espacio del usuario realmente va al espacio del usuario o al espacio del kernel». Esto es importante porque, como se detalla en 2010 en CVE-2010-4258, podría usarse para «sobrescribir ubicaciones de memoria del kernel arbitrarias y obtener privilegios».
El error se corrigió nuevamente en 2010 y, con el tiempo, los diseñadores de chips pasaron a mejorar las técnicas de administración de memoria. Torvalds escribió que este tipo de sobrecarga de espacio de memoria ha sido prohibido.
» Nosotros siempre tenemos «set_fs()», y no todas las arquitecturas se han convertido al nuevo estándar, pero este tipo de sobrecarga de espacio de memoria se ha prohibido en las arquitecturas x86, powerpc, s390 y RISC-V y todo el trabajo preliminar se ha realizado en Espero que otras arquitecturas se alejen también de este modelo histórico, aunque puede que les lleve un tiempo deshacerse de él
» De todos modos, en su mayor parte amigos, eso no debería importar en absoluto, y es principalmente una pequeña nota al pie de página histórica en la que se marcará que 5.10 ya no se basa en todo el patrón set_fs() ”.
Según los informes, esta versión agrega aproximadamente 704,000 nuevas líneas de código y resultó en la eliminación de 419,000 líneas, lo que hace que Linux 5.10-rc1 sea comparable en tamaño al kernel de Linux más grande de la historia (Linux 5.8).
“Parece ser una versión más grande de lo que esperaba, y aunque la ventana de fusión es más pequeña que la de la versión 5.8, no es mucho más pequeña”, dijo Torvalds. «Y 5.8 fue la publicación más importante que hicimos».
De acuerdo con el programa típico de Linux, a 5.10-rc1 le seguirán varias semanas de solución de problemas, con varios Release Candidates lanzados antes de la versión estable del kernel programada para diciembre.
Los grandes cambios en esta versión del kernel incluyen la finalización de la compatibilidad con los procesadores PowerPC 601, la compatibilidad con los SOC Orin de Nvidia para su uso en automóviles y robots autónomos, una mejor compatibilidad con el controlador de gráficos en el procesador Broadcom utilizado en el Raspberry Pi 4, una mitigación de Spectre para procesadores Arm, ajustes de virtualización y corrección de errores del año 2038.
Desde la versión 5.6 del kernel, lanzada en marzo pasado, el equipo ha comenzado a ofrecer soluciones para solucionar el problema del año 2038. Este es un error que se encontró en la codificación de tiempo hace mucho tiempo en sistemas similares a Unix, incluidos Linux, macOS y otros sistemas operativos compatibles con POSIX.
En estos sistemas, el tiempo de cálculo se realiza sobre la base de segundos transcurridos desde 1 st de enero de 1970 en 00:00:00 UTC (también llamada época). Un día dará, por ejemplo, 86.400 segundos y un año 31.536.000 segundos.
Se espera que las correcciones para XFS para el kernel de Linux 5.10 enviadas por Wong retrasen el error del año 2038 en 448 años más.
“Los cambios más importantes son dos nuevas funciones para los metadatos en disco: una para guardar los tamaños de inodos breves en el AG para aumentar las comprobaciones de redundancia, pero también para mejorar los tiempos de edición; y una segunda función para admitir marcas de tiempo hasta 2486 ”, escribió Darrick Wong en su correo electrónico a Torvalds.
Los 448 años adicionales deberían ser suficientes para encontrar una solución a largo plazo a este problema con el sistema de archivos XFS. Como señaló Linus Torvalds, se han incorporado las correcciones.