El árbol principal del kernel de Linux ha recibido un cambio que elimina las funciones __get_user() y __put_user(), consideradas históricas y potencialmente inseguras para el manejo de datos entre espacio de usuario y espacio kernel. La decisión forma parte de una limpieza del código que busca reducir el riesgo de errores relacionados con accesos a memoria y mejorar la seguridad y mantenibilidad del núcleo.
Qué cambió y por qué importa
Las funciones __get_user() y __put_user() se usan para copiar datos puntuales desde y hacia el espacio de usuario desde el código del kernel. Históricamente han servido en multitud de controladores y subsistemas, pero su diseño y uso han causado problemas: son susceptibles a errores por manejo incorrecto de tipos, alineamiento y comprobaciones insuficientes de acceso, lo que puede derivar en fallos o vulnerabilidades.
Al retirar estas funciones del árbol principal, los mantenedores buscan que el código del kernel utilice alternativas más explícitas y seguras para las operaciones entre espacios de memoria, como wrappers que validen tamaños, alineamientos y errores, o las funciones más modernas y específicas que ya existen en el kernel.
A quién afecta
- Desarrolladores de controladores y subsistemas del kernel: deben dejar de usar __get_user() y __put_user() y adaptar el código a las alternativas recomendadas por los mantenedores.
- Distribuciones y mantenedores de parches externos: si tienen código fuera del árbol principal que usa esas funciones, deberán parchearlo antes de integrar versiones del kernel que ya no las incluyan.
- Administradores de sistemas y operadores de infraestructuras: el cambio no afecta directamente al uso diario del sistema, pero sí puede requerir actualizaciones de módulos externos o controladores fuera del árbol que no se mantengan al día.
Qué deben hacer los administradores y desarrolladores
- Revisar módulos externos y parches para detectar usos de __get_user() y __put_user(). Sustituirlos por las funciones alternativas que validen correctamente tamaños y errores o por APIs modernas del kernel.
- Compilar módulos y controladores con versiones recientes del kernel en un entorno de prueba antes de desplegar en producción para detectar problemas de compilación o comportamiento.
- Actualizar flujos de integración continua que apliquen parches al kernel, evitando depender de funciones eliminadas.
Impacto práctico y explicación técnica
Las operaciones entre espacio de usuario y espacio kernel son delicadas porque el kernel no puede confiar en punteros provenientes del usuario: deben comprobarse accesos y copiar datos de forma segura. Las funciones eliminadas eran atómicas para tipos puntuales, pero su interfaz permitía errores comunes (por ejemplo, asumir alineamiento o no comprobar correctamente errores de lectura/escritura). Reemplazarlas por alternativas que hagan comprobaciones explícitas reduce la superficie de fallos y facilita auditorías.
Para desarrolladores esto implica escribir llamadas más claras: usar helpers que devuelvan códigos de error bien definidos, comprobar tamaños antes de copiar y preferir APIs que manejen buffers completos cuando proceda.
Contexto
La retirada de funciones históricas forma parte de la limpieza y modernización continuas del kernel. Cambios de este tipo suelen ser introducidos tras discusión entre mantenedores y pruebas en el árbol principal; los módulos fuera del árbol tienen más probabilidad de romperse si no se actualizan.
Nota: esta noticia resume el cambio de integración en el kernel y sus implicaciones técnicas. Si necesita adaptar código que interactúe con el kernel, pruebe las modificaciones en entornos controlados y revise la documentación del árbol principal para las alternativas recomendadas.
Lee también:
- CloudLinux publica estado y parches por los seis fallos ‘Infinity Core’ del kernel Linux
- BeamFS, un sistema de archivos experimental para detectar y reparar datos, propuesto para el kernel Linux
Fuente: Phoronix




