El kernel 6.19 rompe TCMalloc; proponen ampliar la API RSEQ
Mejoras en RSEQ del kernel 6.19 rompieron TCMalloc. Olivier Dion propone una adición a la API para arreglarlo.
El kernel 6.19 introdujo cambios en las secuencias reiniciables (RSEQ) destinados a mejorar su rendimiento. El resultado: TCMalloc, el asignador de memoria de Google, se rompió. El motivo es que TCMalloc dependía de un comportamiento del kernel que no estaba documentado ni era intencionado. Ahora Olivier Dion propone ampliar la API de RSEQ para devolver a TCMalloc a la normalidad, aunque el mecanismo no deja de ser extraño.
Las secuencias reiniciables son una característica curiosa de la interfaz de espacio de usuario del kernel. Permiten a la aplicación ejecutar operaciones sin bloqueos y ser notificada si el proceso es desalojado durante la operación, de modo que puede reiniciarla. En la práctica, se usan para optimizar operaciones como contadores o punteros de carga.
El trabajo de 6.19 intentó optimizar ese camino. Pero los cambios alteraron el comportamiento que TCMalloc esperaba. No se trata de una vulnerabilidad, sino de una regresión funcional: TCMalloc dejó de funcionar correctamente bajo ciertas condiciones.
La propuesta de Dion es un añadido a la API de RSEQ que permita a los programas indicar que quieren el comportamiento antiguo, o algo similar. No es una solución elegante, pero es la que hay: el propio autor reconoce que la API no deja de ser rara.
Mientras tanto, los que usan TCMalloc en distribuciones con kernel 6.19 tienen pocas opciones: o esperan un parche, o recurren a otros asignadores. El repositorio de TCMalloc documenta su uso y estado.
Lo que queda por ver es si esta propuesta se integra en el kernel y si sirve para otros proyectos que también dependían del comportamiento no documentado. El incidente subraya cómo una optimización en una zona poco conocida puede tener efectos colaterales inesperados.

