Tiraron de un hilo: un ajuste menor obligó a reescribir por completo el mecanismo de llamadas al sistema en Linux 7.3

Tiraron de un hilo: un ajuste menor obligó a reescribir por completo el mecanismo de llamadas al sistema en Linux 7.3

Una simple consulta al código antiguo sacó a la luz algo que había pasado desapercibido durante años.

image

Incluso una pequeña modificación en el código antiguo del núcleo a veces revela toda una cadena de problemas acumulados, y precisamente ese análisis llevó a la revisión del mecanismo de tratamiento de llamadas al sistema, que se planea incluir en Linux 7.3.

El desarrollador del núcleo Thomas Gleixner estudió la propuesta de cambio en el tratamiento de los números de llamadas al sistema, pero encontró diferencias en el código para distintas arquitecturas de procesador. Las llamadas al sistema permiten a los programas invocar funciones del núcleo, por lo que el código las procesa en cada transición desde el modo de usuario.

El problema principal concernía la aleatorización de la pila del núcleo, que dificulta predecir la ubicación de los datos en la memoria. Algunas arquitecturas activaban el mecanismo demasiado tarde, y PowerPC lo aplicaba de forma incorrecta y menos eficaz. Gleixner trasladó las arquitecturas compatibles a un esquema común que añade un desplazamiento aleatorio de la pila en una fase temprana.

La revisión también elimina operaciones innecesarias, simplifica las comprobaciones de permiso de las llamadas al sistema en ptrace y en trazadores, tiene en cuenta el cambio para seccomp y corrige peculiaridades acumuladas en el código x86. Tras los cambios, todas las arquitecturas que usan el mecanismo de entrada común procesan las llamadas al sistema de la misma manera.

Los desarrolladores no planean cambiar el comportamiento del sistema. El código para x86-64 se ha vuelto un poco más compacto, y las pruebas con un gran número de llamadas al sistema mostraron una pequeña mejora de rendimiento. Los cambios ya se han incorporado a la rama core/entry del proyecto tip y, se espera, entrarán en la ventana de fusión de Linux 7.3.