Se ha denunciado un feo truco dentro del kernel de Linux que ha estado en la línea principal durante más de tres años. Debido a un X.Org Server/xf86-video-modesetting DDX con errores, el kernel de Linux ha estado imponiendo un comportamiento diferente sobre si un proceso comienza con”X”y, a su vez, deshabilita el soporte de configuración de modo atómico.
El investigador de seguridad de Linux, Jason Donenfeld (quien también es muy conocido por crear WireGuard), se topó con este feo truco de código dentro del kernel.
Donenfeld comentó este fin de semana en la lista de correo del kernel:
Esto revierte 26b1d3b527e7 (“drm/atomic: quita los juguetes atómicos de X”), una chapuza similar a un rootkit que no tiene por qué estar dentro de un núcleo de propósito general. Es el tipo de truco de depuración que usaré momentáneamente pero nunca lo cometeré, o una especie de truco de malware para ocultar el primer proceso de los bebés.
La historia de fondo es que algún código de espacio de usuario (xorg-server) tiene un DDX de configuración de modo que en realidad no está codificado correctamente. Como ya nadie quería mantener X11, en lugar de corregir el código con errores, se ajustó el kernel para evitar tener que tocar X11. Un fastidio, pero lo suficientemente justo: si el kernel ya no quiere admitir alguna API de espacio de usuario, lo correcto es organizar una reserva elegante donde el espacio de usuario cree que no está disponible de una manera manejable.
Sin embargo, la *manera* de hacer eso es simplemente marcar `current->comm[0]==’X’`, y deshabilitarlo solo para ese caso. Eso significa que *no* es simplemente una cuestión de que el kernel ya no quiera admitir una API de espacio de usuario en particular, sino que es el kernel que no quiere admitir el servidor xorg, en teoría, pero en realidad, resulta que son todos los procesos que comenzar con’X’.
Jugar juegos con comunicaciones actuales como esta obviamente está mal, y es bastante impactante que esto se haya cometido alguna vez.
El commit a este kernel con la verificación del primer carácter”X”se realizó en septiembre de 2019. El argumento en esa confirmación del kernel de Linux en ese momento era:
El-modesetting ddx tiene una idea totalmente rota de cómo funciona atomic:
-no deshabilita los conectores antiguos, suponiendo que se deshabiliten automáticamente como con el heredado setcrtc
-asume que ASYNC_FLIP está conectado para atomic ioctl
-ni una sola llamada a TEST_ONLY[En otras palabras] la implementación es una traducción 1:1 de ioctls heredados a atomic, que es a) roto b) sin sentido.
Ya tenemos errores tanto en i915 como en amdgpu-DC que nos impiden habilitar funciones ordenadas.
Si alguien alguna vez se preocupa por lo atómico en X, podemos agregar fácilmente un nuevo nivel atómico (req->value==2) para que X recupere los juguetes brillantes.
Dado que estas versiones rotas de-modesetting se han enviado, realmente no hay otra forma de salir de este aprieto.
La”buena”noticia es que desde entonces en el lado del espacio de usuario en 2019, el código de configuración de modo de video xf86 siguió adelante y deshabilitó el soporte atómico de forma predeterminada. Entonces, técnicamente, si ejecuta una pila X.Org actualizada en los últimos tres años, este truco del kernel ya no es necesario ya que el espacio del usuario está evitando la API atómica.
Veremos si Linus Torvalds está de acuerdo con que se elimine este truco, ya que, después de todo, va en contra de su principio de”no romper el espacio del usuario”al hacer retroceder el sistema si se apega a una pila de servidor X.Org obsoleta y querer ejecutar con una futura versión del kernel. Veremos, pero es sorprendente que hayan tardado tres años en criticar este código sucio.