Después de dos meses de desarrollo, Linus Torvalds presentó el lanzamiento del núcleo Linux 6.10. Entre los cambios más destacados se encuentran: el controlador ntsync con primitivas de sincronización de Windows NT, los componentes DRM Panic para implementar un análogo de la "pantalla azul de la muerte", el cese del soporte para los antiguos CPU Alpha, la posibilidad de verificar la integridad en sistemas de archivos basados en FUSE, la restricción de acceso a ioctl a través del mecanismo Landlock, un subsistema para perfilar operaciones de asignación de memoria, la llamada al sistema mseal(), la posibilidad de intercambio de datos cifrados con dispositivos TPM, el soporte para colas de trabajo de alta prioridad en dm-crypt, y el controlador panthor para la décima generación de GPU Mali.
En la nueva versión se han incluido 14564 correcciones de 1989 desarrolladores, el tamaño del parche es de 41 MB (los cambios afectaron a 12509 archivos, se añadieron 547663 líneas de código y se eliminaron 312464 líneas). En la versión anterior hubo 15680 correcciones de 2106 desarrolladores, y el tamaño del parche fue de 54 MB. Aproximadamente el 41% de todos los cambios presentados en 6.10 están relacionados con controladores de dispositivos, alrededor del 15% se refiere a la actualización de código específico de arquitecturas de hardware, el 13% está relacionado con el stack de red, el 5% con sistemas de archivos y el 4% con subsistemas internos del núcleo.
Las principales novedades del núcleo 6.10 son:
- Subsistema de disco, entrada/salida y sistemas de archivos
- Se añadió una nueva operación fcntl F_DUPFD_QUERY, mediante la cual un proceso puede determinar que dos descriptores de archivo diferentes hacen referencia al mismo archivo. A diferencia de las capacidades similares proporcionadas por la llamada al sistema kcmp(), F_DUPFD_QUERY no revela información innecesaria y funciona en sistemas con kcmp desactivado.
- En el subsistema FUSE, utilizado para implementar sistemas de archivos en el espacio de usuario, se ha implementado la capacidad de aplicar el mecanismo fs-verity para comprobar la integridad y autenticidad de los archivos.
- En el módulo dm-crypt, utilizado para cifrar dispositivos de bloques, se añadió la opción "high_priority", que permite habilitar colas de trabajo de alta prioridad para mejorar el rendimiento en hardware potente como en entornos de nube públicos o privados.. Por defecto, el modo está desactivado, ya que puede provocar un aumento de la latencia en PCs convencionales en tareas no relacionadas con el cifrado, como el procesamiento de audio.
- Se ha añadido un protocolo basado en netlink para la gestión de servidores NFS en el núcleo. En el espacio de usuario, se ha preparado una utilidad llamada nfsdctl basada en este protocolo. El soporte para el montaje NFS v2 está desactivado por defecto (el soporte para NFS v2 en la utilidad mount.nfs fue retirado en 2021).
- En el sistema de archivos XFS, se continúa trabajando en la implementación de la utilidad fsck para verificar y corregir problemas encontrados en modo online, sin necesidad de desmontar el sistema de archivos. Se ha añadido el ioctl XFS_IOC_EXCHANGE_RANGE para el intercambio de rangos de bytes entre dos archivos de manera atómica.
- En Btrfs, se ha implementado el soporte para el recorte (shrinker) de mapas de extensos no fijados, lo cual puede resultar útil para reducir el consumo de memoria en situaciones de escasez de recursos. El código para la compresión de datos y la función put_file_data() se han adaptado para utilizar volúmenes de páginas de memoria (page folios). Se ha revisado el mecanismo de bloqueo de extensos durante la realización de operaciones de escritura inversa.
- En el sistema de archivos Ext4, se ha añadido el soporte para el ioctl FS_IOC_GETFSSYSFSPATH para determinar la ubicación de un sistema de archivos montado específico en la jerarquía /sys/fs.
- Los sistemas de archivos OPENPROMFS, ISOFS, QNX6, NILFS2, MINIX y FREEVXFS se han trasladado al uso de una nueva API para el montaje de particiones.
- En el sistema de archivos EROFS (Extendable Read-Only File System), diseñado para usarse en particiones accesibles en modo solo lectura, se ha añadido soporte para el algoritmo de compresión Zstandard.
- En Bcachefs se ha preparado la ejecución de fsck sin desmontar la partición (verificación online). Se han realizado cambios y correcciones para mejorar la fiabilidad. Se ha implementado la posibilidad de actualizar y revertir el formato del sistema de archivos en modo 'nochanges', que desactiva la escritura y almacena los metadatos únicamente en la memoria.
- En el sistema de archivos OverlayFS se ha añadido soporte para la creación de archivos temporales, utilizando la opción O_TMPFILE.
- Se ha cesado el soporte para el mecanismo de limitación del ancho de banda de dispositivos de bloque CONFIG_BLK_DEV_THROTTLING_LOW, que ha mantenido su estatus experimental desde 2017, no se ha generalizado en la práctica y dificulta el mantenimiento del subsistema de dispositivos de bloque.
- Memoria y servicios del sistema
- Añadido, pero desactivado durante la compilación, el controlador ntsync, que implementa el dispositivo simbólico /dev/ntsync y un conjunto de primitivas para la sincronización, utilizadas en el núcleo de Windows NT. La implementación de estas primitivas a nivel de núcleo permite mejorar significativamente el rendimiento de los juegos de Windows ejecutados a través de Wine. Este aumento de rendimiento se logra al eliminar los costos asociados con el uso de RPC en el espacio del usuario. La creación de un controlador separado para el núcleo de Linux se justifica por las dificultades en la correcta implementación de la API de sincronización NT sobre las primitivas existentes en el núcleo.
- Se añadió un subsistema para el perfilado de operaciones de asignación de memoria en el núcleo de Linux, que permite identificar fugas de memoria en el núcleo y simplifica la optimización del consumo de memoria. El subsistema ofrece bajos costos de sobrecarga, lo que permite utilizarlo no solo en compilaciones de depuración del núcleo, sino también en sistemas en producción.
- Se añadió una implementación inicial del controlador de fallos del núcleo — DRM Panic, que utiliza el subsistema DRM (Direct Rendering Manager) para mostrar un informe visual en colores al estilo de la 'pantalla azul de la muerte'. En la siguiente versión, se prevé añadir la posibilidad de mostrar un logotipo y un código QR en pantalla al ocurrir una situación de emergencia.
- Continúa la migración de cambios de la rama Rust-for-Linux, relacionados con el uso del lenguaje Rust como segundo lenguaje para el desarrollo de controladores y módulos del núcleo (el soporte de Rust no está activo por defecto y no conduce a incluir Rust entre las dependencias obligatorias de compilación del núcleo). Se llevó a cabo la transición al uso de la versión 1.78 de Rust, lo que permitió cambiar al uso de la biblioteca estándar alloc, en lugar de un bifurcación propia. Se añadieron abstracciones para trabajar con el tiempo en el núcleo (un envoltorio sobre la estructura ktime_t). Se añadió soporte para el uso de componentes del núcleo en lenguaje Rust en sistemas con arquitectura RISC-V.
- En los programas BPF se ha implementado el uso de colas de espera (wait queue) en el núcleo. Se han añadido las funciones bpf_preempt_disable y bpf_preempt_enable, que permiten crear secciones de código no interrumpibles por el planificador de tareas. Se ha proporcionado acceso de los programas BPF a funciones criptográficas del núcleo (crypto). Se ha implementado soporte para la compilación JIT de programas BPF en sistemas con procesadores de 32 bits ARCv2.
- Para sistemas de 32 bits ARM se ha implementado soporte para la construcción del núcleo con el compilador Clang, habilitando el modo de protección CFI (Control Flow Integrity), que bloquea las violaciones del orden normal de ejecución (control flow) como resultado de exploits que alteran los punteros a funciones almacenados en memoria.
- Se ha añadido la opción de reflejar directamente a través de mmap() los búferes de anillo de trazado para transferir su contenido al espacio del usuario sin necesidad de copias adicionales.
- Se ha añadido la llamada al sistema «mseal», que permite a los procesos establecer un bloqueo sobre la modificación de ciertas partes de su espacio de direcciones. En la práctica, se planea usar esta nueva llamada al sistema en el navegador Chrome para fortalecer el aislamiento de sandbox.
- Para la subarquitectura x32, que proporciona un ABI híbrido x86_64, permitiendo usar un modelo de direccionamiento de 32 bits en sistemas de 64 bits (el procesador opera en modo de 64 bits, pero usa punteros y operaciones aritméticas de 32 bits), se ha añadido soporte para el mecanismo de Shadow Stack, que permite bloquear el funcionamiento de muchos exploits, utilizando las capacidades de hardware de los procesadores Intel para protegerse contra la sobrescritura de la dirección de retorno de una función en caso de desbordamiento de búfer en la pila.
- En sistemas con arquitectura ARM64, en la llamada al sistema userfaultfd(), que permite crear manejadores para fallos de página no asignados en el espacio del usuario, se han implementado capacidades relacionadas con la protección contra la escritura de áreas de memoria y elementos de la tabla de páginas de memoria.
- Se eliminó el código para el soporte de los procesadores Alpha 21164 (EV5) y versiones anteriores lanzadas desde 1995. El mantenimiento de este código se complicó debido a la falta de acceso a la memoria a nivel de bytes individuales. Alpha fue la primera arquitectura en la que se portó el núcleo de Linux, inicialmente disponible solo para sistemas x86.
- Virtualización y seguridad
- Se añadió soporte para el intercambio de datos cifrados con dispositivos TPM (Trusted Platform Module) y la verificación de la integridad de las transacciones.
- En el módulo LSM, se agregó la funcionalidad de Landlock, que permite restringir la interacción de un grupo de procesos con el entorno externo, añadiendo la capacidad de aplicar reglas para limitar el acceso a las llamadas ioctl().
- Se propuso una opción init_mlocked_on_free que se habilita en el arranque, garantizando que el contenido de la memoria protegido contra el swapping mediante mlock() se anule si se libera sin desbloquearlo a través de munlock(). El uso de esta opción evita que las claves criptográficas queden en memoria en caso de que una aplicación que las maneja termine abruptamente.
- En la subsistema de crypto, se aceleró la ejecución de operaciones de cifrado en disco utilizando el algoritmo AES-XTS en sistemas x86_64 con procesadores Intel y AMD que soportan las extensiones VAES, AVX2, VPCLMULQDQ, AVX10 o AVX512.
- Se eliminó la posibilidad de recopilar estadísticas sobre el uso de la criptosub-sistema del núcleo (CONFIG_CRYPTO_STATS). Esta opción no se utilizaba en la práctica y causaba una disminución significativa del rendimiento, así como una carga adicional considerable para los mantenedores.
- Subsistema de red
- Se mejoró significativamente el rendimiento de las operaciones de envío de datos en modo zero-copy utilizando la subsistema io_uring. Se añadió la capacidad de agrupar (‘bundle’) varios buffers para operaciones de envío y recepción de datos.
- Se reescribió el código de recolección de basura que se aplica al enviar descriptores de archivos a través de sockets Unix utilizando mensajes SCM_RIGHTS. Este cambio resuelve el problema de la acumulación de contadores de referencias cíclicos.
- Se añadió la posibilidad de establecer filtros para el protocolo PFCP (Packet Forwarding Control Protocol), utilizado en redes 4G y 5G.
- Se ha añadido soporte para la opción de sockets de red SO_PEEK_OFF, que, similar a la misma opción para los sockets de Unix, permite determinar el desplazamiento de los datos en la cola, que se utiliza en la llamada del sistema recv al especificar la bandera MSG_PEEK (marcando los datos como no leídos, los cuales se volverán a dar en la siguiente llamada a recv).
- Se ha añadido soporte para la operación IORING_CQE_F_SOCK_NONEMPTY en el subsistema io_uring, que permite determinar si un socket de red tiene solicitudes de conexión en espera de procesamiento.
- Se ha propuesto una implementación de la tecnología PoE (Power over Ethernet), basada en el código previamente disponible para el soporte de PoDL (Power over Data Line) y compatible con los controladores PoE de Microchip PD692x0 y TI TPS23881.
- Para los protocolos TCP, DCCP y MPTC, se ha añadido soporte para el mecanismo rstreason, que permite determinar la razón para el envío de paquetes RST (por ejemplo, NO_SOCKET).
- Hardware
- Se ha incluido el controlador panthor para la décima generación de GPU Mali (G310, G510, G710), que emplea la tecnología CSF (Command Stream Frontend), trasladando algunas funciones del controlador al firmware para reducir la carga en la CPU y ofreciendo un nuevo modelo de organización para la ejecución de trabajos en la GPU. Se han aceptado cambios para el soporte del nuevo controlador también en Mesa y se han incluido en el controlador Gallium panfrost para GPU Mali.
- Se han añadido identificadores PCI para las nuevas tarjetas gráficas discretas Intel Arc (DG2/Alchemist) en el controlador i915.
- Se ha continuado trabajando en el controlador drm (Direct Rendering Manager) Xe para GPUs basadas en la arquitectura Intel Xe, que se utiliza en las tarjetas gráficas de la familia Arc e integrada a partir de los procesadores Tiger Lake. Se ha añadido soporte para los CPU Arrow Lake H. Se ha continuado la implementación del soporte para los procesadores Lunar Lake. Se ha añadido soporte inicial para el mecanismo SR-IOV (Single Root I/O Virtualization).
- Se ha añadido soporte para SMU 14.0 (System Management Unit) en el controlador AMDGPU. Se ha habilitado el uso de las nuevas GPU AMD en sistemas con arquitectura RISC-V.
- Se ha añadido un controlador para el acelerador de operaciones criptográficas Tegra Security Engine, que se puede utilizar para acelerar AES y varios algoritmos de hash.
- Se ha añadido soporte para las paneles de pantalla LG SW43408, Innolux G121XCE-L01 LVDS, RK3326 GameForce Chi, Crystal Clear CMT430B19N00, POWERTIP PH128800T006-ZHC01, Startek KD050HDFIA020-C020A, Pixel 3a, Khadas TS050 V2, Raydium RM69380, BOE NT116WHM-N44, CMN N116BCA-EA1 y AUO B120XAN01.0.
- Se ha añadido soporte para el subsistema de sonido de los portátiles Lenovo Thinkbook 13x Gen 4, Lenovo Thinkbook 16P Gen 5, Lenovo Thinkbook 13X y ASUS Zenbook 2024 HN7306W. Se ha añadido soporte para las tarjetas de sonido externas Vocaster One y Vocaster Two. Se ha añadido un controlador para los amplificadores NAU8325 de la empresa Nuvoton Technology.
- En el controlador HID-Steam se ha añadido soporte para IMU (Unidad de Medición Inercial) del controlador de juegos Steam Deck, que permite utilizar un nodo evdev separado para acceder a los datos del giroscopio y del acelerómetro.
- Se han incluido cambios para dar soporte al SoC ARM Snapdragon X Elite, que cuenta con un CPU Qualcomm Oryon de 12 núcleos y un GPU Qualcomm Adreno. El chip está destinado a su uso en portátiles y PC, superando en muchas pruebas de rendimiento a los chips Apple M3 y Intel Core Ultra 155H.
- Se ha añadido soporte para plataformas ARM, SoC y dispositivos: PocketBook 614 Plus, Sony Xperia Z3, Xperia 1 V, Samsung Galaxy S5 China, Motorola Moto G, RK3326 GameForce Chi, Anbernic RG35XX (Plus/H/2024), Airoha EN7581, Radxa ROCK 3C, ArmSom Sige7, Tanix TX1, Toradex Colibri iMX8DX, Renesas RZ/V2H, Forlinx OK3588-C, Protonic MECSBC, Emcraft Systems NavQ+, NXP S32G3, Wolfvision pf5, Amlogic A4/A5, ASUS RT-AC3200, ASUS RT-AC5300, ASrock E3C256D4I, IBM system1 BMC, Meta Harma BMC(AST2600), ASRock X570D4U BMC, Au-Zone Maivin AI Vision Starter Kit.
- Se ha añadido soporte para las placas Milk-V Mars, que utilizan el SoC Starfive JH7110 basado en la arquitectura RISC-V.
Al mismo tiempo, la Fundación Latinoamericana de Software Libre ha formado una versión completamente libre del núcleo 6.10 — Linux-libre 6.10-gnu, limpiado de elementos de firmware y controladores que contienen componentes no libres o partes de código, cuya aplicación está limitada por el fabricante. En la versión 6.10 se ha actualizado el código de limpieza de blobs en los controladores Intel i915, rtl8xxxu, qla2xxx y QCAI sahara. Se ha limpiado los nombres de blobs en los archivos dts (devicetree) para la arquitectura Aarch64. Se han limpiado de blobs nuevos archivos añadidos en los controladores Adreno, Intel IPU3 y PRUEth. Se ha llevado a cabo la limpieza de nuevos controladores Panthor, Intel IPU6, PRUEth SR1, rtw8703b, tps23881, air_en8811h, Intel ISH HID y pcm6240. Se ha detenido la limpieza del controlador USB Prism2.5/3 USB, que fue eliminado del núcleo.
Fuente: opennet.ru
