Después de dos meses de desarrollo, Linus Torvalds presentó el lanzamiento del núcleo Linux 6.2. Entre los cambios más destacados se encuentran: se permite la inclusión de código bajo la licencia Copyleft-Next, se ha mejorado la implementación de RAID5/6 en Btrfs, se continúa la integración del soporte para el lenguaje Rust, se han reducido los gastos generales en la protección contra ataques Retbleed, se ha agregado la capacidad de regular el consumo de memoria durante las operaciones de escritura inversa, se ha introducido un mecanismo de balanceo de TCP llamado PLB (Protective Load Balancing), se ha agregado un mecanismo híbrido de protección para el flujo de ejecución de órdenes (FineIBT), se ha incluido la posibilidad de definir objetos y estructuras de datos propios en BPF, se incluye la herramienta rv (Runtime Verification) y se ha reducido el consumo de energía en la implementación de bloqueos RCU.
La nueva versión incluye 16843 correcciones de 2178 desarrolladores, el tamaño del parche es de 62 MB (los cambios afectaron a 14108 archivos, se añadieron 730195 líneas de código y se eliminaron 409485 líneas). Aproximadamente el 42% de todos los cambios presentados en 6.2 están relacionados con controladores de dispositivos, alrededor del 16% se refiere a la actualización de código específico para arquitecturas de hardware, el 12% está relacionado con la pila de red, el 4% con sistemas de archivos y el 3% con subsistemas internos del núcleo.
Novedades principales en el núcleo 6.2:
- Memoria y servicios del sistema
- Se permite incluir en el núcleo código y modificaciones que se suministran bajo la licencia Copyleft-Next 0.3.1. La licencia Copyleft-Next fue creada por uno de los autores de GPLv3 y es completamente compatible con la licencia GPLv2, lo que ha sido confirmado por abogados de las empresas SUSE y Red Hat. En comparación con GPLv2, la licencia Copyleft-Next es significativamente más compacta y fácil de entender (se ha eliminado la introducción y los mencionados compromisos obsoletos), define los plazos y el procedimiento para solucionar violaciones, y elimina automáticamente los requisitos de copyleft para los componentes obsoletos que tienen más de 15 años.
Copyleft-Next también contiene una cláusula sobre la concesión de derechos sobre tecnologías patentadas, lo que, a diferencia de GPLv2, hace que esta licencia sea compatible con la licencia Apache 2.0. Para garantizar la plena compatibilidad con GPLv2, el texto de Copyleft-Next indica explícitamente que la obra derivada puede ser distribuida no solo bajo la licencia original Copyleft-Next, sino también bajo la licencia GPL.
- El paquete incluye la utilidad «rv», que proporciona una interfaz para interactuar desde el espacio de usuario con los controladores del sistema RV (Verificación en Tiempo de Ejecución), destinada a verificar la correcta operación en sistemas altamente confiables que garantizan la ausencia de fallos. La verificación se realiza en tiempo de ejecución mediante la unión de controladores a puntos de traza, que comparan el curso real de la ejecución con un modelo de autómata previamente definido y determinista, que determina el comportamiento esperado del sistema.
- En el dispositivo zRAM, que permite almacenar la partición de intercambio en memoria de forma comprimida (se crea un dispositivo de bloque en memoria al que se realiza el intercambio con compresión), se ha implementado la opción de reempaquetar páginas utilizando un algoritmo alternativo para lograr un nivel de compresión más alto. La idea principal es ofrecer la elección entre varios algoritmos (lzo, lzo-rle, lz4, lz4hc, zstd), que ofrecen sus propios compromisos entre velocidad de compresión/descompresión y nivel de compresión o son óptimos en situaciones particulares (por ejemplo, para la compresión de grandes páginas de memoria).
- Se ha añadido la API «iommufd» para gestionar desde el espacio de usuario el sistema de gestión de memoria de entrada/salida — IOMMU (Unidad de Gestión de Memoria de E/S). La nueva API permite gestionar las tablas de páginas de memoria de entrada/salida utilizando descriptores de archivo.
- En BPF se ha habilitado la creación de tipos, la definición de objetos propios, la construcción de su propia jerarquía de objetos y la formación flexible de estructuras de datos propias, como listas enlazadas. Para los programas BPF que pasan al modo de suspensión (BPF_F_SLEEPABLE), se ha añadido soporte para bloqueos bpf_rcu_read_{,un}lock(). Se ha implementado soporte para guardar objetos task_struct. Se ha añadido el tipo de mapa BPF_MAP_TYPE_CGRP_STORAGE, que proporciona almacenamiento local para cgroups.
- Para el mecanismo de bloqueos RCU (Actualización de Copia de Lectura) se ha implementado un mecanismo opcional de llamadas de retorno «perezosas», en el que por temporizador se procesan varias llamadas de retorno a la vez en modo por lotes. La aplicación de esta optimización propuesta permite reducir el consumo de energía en dispositivos Android y ChromeOS en un 5-10% al retrasar las solicitudes RCU durante el tiempo de inactividad o con baja carga en el sistema.
- Se ha añadido sysctl split_lock_mitigate para gestionar la reacción del sistema al detectar bloqueos divididos («split lock»), que ocurren al acceder a datos desalineados en la memoria cuando una instrucción atómica cruza dos líneas de caché de CPU. Este tipo de bloqueos provoca una disminución significativa en el rendimiento. Al establecer el valor 0 en split_lock_mitigate, solo se emite una advertencia sobre la existencia del problema, mientras que al establecer el valor 1, además de emitir la advertencia, se ralentiza la ejecución del proceso que provocó el bloqueo para preservar el rendimiento del resto del sistema.
- Para la arquitectura PowerPC, se ha propuesto una nueva implementación de bloqueos qspinlock, que demuestra un mejor rendimiento y soluciona algunos problemas con bloqueos que ocurren en casos excepcionales.
- Se ha renovado el código de manejo de interrupciones MSI (Interrupciones Señaladas por Mensaje), eliminando problemas arquitectónicos acumulados y añadiendo soporte para vincular controladores individuales a diferentes dispositivos.
- Para sistemas basados en la arquitectura del conjunto de instrucciones LoongArch, utilizada en los procesadores Loongson 3 5000 y que implementa un nuevo RISC ISA, similar a MIPS y RISC-V, se ha implementado soporte para ftrace, protección de pila, modos de suspensión y espera.
- Se ha añadido la posibilidad de asignar nombres a áreas de memoria anónima compartida (anteriormente, los nombres solo podían asignarse a memoria anónima privada vinculada a un proceso específico).
- Se ha añadido un nuevo parámetro de línea de comandos del núcleo «trace_trigger», diseñado para activar un disparador de trazado, utilizado para vincular comandos condicionales que se activan al realizar una verificación de control (por ejemplo, trace_trigger=»sched_switch.stacktrace if prev_state == 2″).
- Se han elevado los requisitos para la versión del paquete binutils. Ahora se requiere un mínimo de binutils 2.25 para compilar el núcleo.
- Al llamar a exec(), se ha añadido la posibilidad de colocar un proceso en un espacio de nombres de tiempo (time namespace), donde el tiempo difiere del sistema.
- Se ha comenzado la transferencia de la rama Rust-for-Linux de funcionalidades adicionales relacionadas con el uso del lenguaje Rust como segundo idioma para el desarrollo de controladores y módulos del núcleo. El soporte para Rust no está activo por defecto y no se convierte en una de las dependencias de compilación obligatorias para el núcleo. La funcionalidad básica propuesta en la versión anterior se ha ampliado con capacidades para soportar código de bajo nivel, como el tipo Vec y los macros pr_debug!(), pr_cont!() y pr_alert!(), así como el macro de procedimiento «#[vtable]», que simplifica el trabajo con tablas de punteros a funciones. Se espera la adición de envolturas de Rust de alto nivel sobre los subsistemas del núcleo, que permitirán crear controladores completos en Rust, en próximas versiones.
- El tipo «char» utilizado en el núcleo ahora se declara por defecto como sin signo para todas las arquitecturas.
- Se ha declarado obsoleto el mecanismo de distribución de memoria slab — SLOB (asignador de slab), que fue diseñado para sistemas con poca memoria. En condiciones normales se recomienda usar SLUB o SLAB en lugar de SLOB. Para sistemas con poca memoria, se recomienda usar SLUB en modo SLUB_TINY.
- Se permite incluir en el núcleo código y modificaciones que se suministran bajo la licencia Copyleft-Next 0.3.1. La licencia Copyleft-Next fue creada por uno de los autores de GPLv3 y es completamente compatible con la licencia GPLv2, lo que ha sido confirmado por abogados de las empresas SUSE y Red Hat. En comparación con GPLv2, la licencia Copyleft-Next es significativamente más compacta y fácil de entender (se ha eliminado la introducción y los mencionados compromisos obsoletos), define los plazos y el procedimiento para solucionar violaciones, y elimina automáticamente los requisitos de copyleft para los componentes obsoletos que tienen más de 15 años.
- Subsistema de disco, entrada/salida y sistemas de archivos
- Se han realizado mejoras en Btrfs, dirigidas a solucionar el problema del «escrito agujero» en la implementación de RAID 5/6 (intento de recuperación de RAID, si la falla ocurrió durante la escritura y no se puede determinar qué bloque se escribió correctamente en qué dispositivo RAID, lo que puede resultar en la destrucción de bloques correspondientes a bloques no escritos). Además, para SSD ahora se activa automáticamente por defecto, si es posible, la ejecución asíncrona de la operación «discard», lo que permite una mayor eficiencia debido a la agrupación eficaz de las operaciones de «discard» en la cola y el procesamiento de la cola por un controlador en segundo plano. Se ha mejorado el rendimiento de las operaciones send y lseek, así como ioctl FIEMAP.
- Se han ampliado las capacidades de gestión de la escritura diferida (writeback, guardado en segundo plano de datos modificados) para dispositivos de bloques. En algunas situaciones, como en el uso de dispositivos de bloques en red o unidades USB, la escritura diferida puede llevar a un alto consumo de memoria RAM. Para gestionar el comportamiento de la escritura diferida y mantener el tamaño de la caché de páginas dentro de ciertos límites en sysfs (\/sys\/class\/bdi\/), se han propuesto nuevos parámetros strict_limit, min_bytes, max_bytes, min_ratio_fine y max_ratio_fine.
- En el sistema de archivos F2FS se ha implementado la operación ioctl de reemplazo atómico, que permite realizar la escritura de datos en un archivo como una única operación atómica. También se ha agregado una caché de bloques de extensiones en F2FS, que ayuda a determinar datos que se utilizan activamente o datos a los que no se ha accedido durante mucho tiempo.
- En el sistema de archivos ext4, solo se han corregido errores.
- En el sistema de archivos ntfs3 se han propuesto varias nuevas opciones de montaje: «nocase» para gestionar la distinción de mayúsculas y minúsculas en los nombres de archivos y directorios; windows_name para prohibir la creación de nombres de archivos que contengan caracteres no válidos para el sistema operativo Windows; hide_dot_files para gestionar la asignación de la etiqueta de archivos ocultos para archivos que comienzan con un punto.
- En el sistema de archivos Squashfs se ha implementado la opción de montaje «threads=», que permite definir el número de hilos para paralelizar las operaciones de descompresión. También ha surgido la posibilidad de mapear identificadores de usuarios de sistemas de archivos montados, utilizada para asociar archivos de un usuario en una partición montada de otro con otro usuario en el sistema actual.
- Se ha revisado la implementación de las listas de control de acceso POSIX (POSIX ACL). En la nueva implementación se han eliminado problemas arquitectónicos, simplificado el mantenimiento de la base de código y utilizado tipos de datos más seguros.
- En el subsistema fscrypt, que se utiliza para el cifrado transparente de archivos y directorios, se ha añadido soporte para el algoritmo de cifrado SM4 (estándar chino GB/T 32907-2016).
- Se ha proporcionado la posibilidad de compilar el núcleo sin soporte para NFSv2 (en el futuro se planea eliminar completamente el soporte para NFSv2).
- Se ha modificado la organización de la verificación de derechos de acceso a los dispositivos NVMe. Se ha proporcionado la capacidad de lectura y escritura en el dispositivo NVMe, si el proceso de escritura tiene acceso a un archivo especial del dispositivo (anteriormente, el proceso debía tener el privilegio CAP_SYS_ADMIN).
- Se ha eliminado el controlador por lotes para CD/DVD, que fue declarado obsoleto en 2016.
- Virtualización y seguridad
- Se ha implementado un nuevo método de protección contra la vulnerabilidad Retbleed en CPU de Intel y AMD, utilizando el seguimiento de la profundidad de llamadas, lo que no ralentiza tanto el rendimiento como la protección contra Retbleed que existía anteriormente. Para activar el nuevo modo, se ha propuesto el parámetro de línea de comando del núcleo "retbleed=stuff".
- Se ha añadido un mecanismo híbrido de protección de flujo de ejecución de comandos FineIBT, que combina la aplicación de instrucciones de hardware Intel IBT (Indirect Branch Tracking) y protección de software kCFI (kernel Control Flow Integrity) para bloquear la alteración del orden normal de ejecución (control flow) como resultado de explotar vulnerabilidades que modifican los punteros a funciones almacenadas en memoria. FineIBT permite la ejecución mediante un salto indirecto solo en caso de que el salto se dirija a la instrucción ENDBR, que se coloca al principio de la función. Además, al igual que con el mecanismo kCFI, se realiza una verificación de hashes que garantiza la inmutabilidad de los punteros.
- Se han añadido restricciones para bloquear ataques que manipulan la generación de estados "oops", tras los cuales las tareas problemáticas se terminan y el estado se restaura sin detener el funcionamiento del sistema. Con un número muy alto de invocaciones del estado "oops", se produce un desbordamiento del contador de referencias (refcount), lo que permite explotar vulnerabilidades provocadas por la desreferencia de punteros NULL. Para protegerse contra tales ataques, se ha agregado un límite al núcleo sobre el número máximo de ocurrencias de "oops", tras lo cual el núcleo iniciará un cambio al estado de "panic" con un reinicio posterior, lo que evitará alcanzar el número de iteraciones necesario para desbordar el refcount. Por defecto, el límite se establece en 10 mil "oops", pero se puede modificar a través del parámetro oops_limit.
- Se ha agregado el parámetro de configuración LEGACY_TIOCSTI y el sysctl legacy_tiocsti para deshabilitar la posibilidad de enviar datos al terminal mediante ioctl TIOCSTI, ya que esta funcionalidad puede ser empleada para inyectar caracteres arbitrarios en el búfer de entrada del terminal y simular la entrada del usuario.
- Se ha propuesto un nuevo tipo de estructuras internas encoded_page, donde los bits inferiores del puntero se utilizan para almacenar información adicional aplicada a la protección contra el desreferenciamiento accidental del puntero (en caso de necesidad real de desreferenciamiento, primero se deben limpiar estos bits adicionales).
- En la plataforma ARM64, en la etapa de arranque, se ha proporcionado la posibilidad de habilitar y deshabilitar la implementación programática del mecanismo Shadow Stack, utilizado para proteger contra la sobrescritura de la dirección de retorno de función en caso de un desbordamiento de búfer en la pila (la esencia de la protección radica en guardar la dirección de retorno en una ‘pila sombra’ separada después de pasar el control a la función y recuperar esta dirección antes de salir de la función). El soporte en un kernel para la implementación hardware y programática de Shadow Stack permite utilizar un solo kernel en diferentes sistemas ARM, independientemente del soporte de instrucciones para la autenticación de punteros. La habilitación de la implementación programática se lleva a cabo mediante la sustitución durante el arranque de las instrucciones necesarias en el código.
- Se ha añadido soporte para el mecanismo de notificación asíncrona de salida en procesadores Intel, permitiendo detectar ataques de single-step en el código que se ejecuta en enclaves SGX.
- Se ha propuesto un conjunto de operaciones que permiten al hipervisor gestionar solicitudes de sistemas invitados de Intel TDX (Trusted Domain Extensions).
- Se han eliminado las configuraciones de compilación del kernel RANDOM_TRUST_BOOTLOADER y RANDOM_TRUST_CPU, por las cuales se deben utilizar las opciones de línea de comandos correspondientes random.trust_bootloader y random.trust_cpu.
- Al mecanismo Landlock, que permite restringir la interacción de un grupo de procesos con el entorno exterior, se le ha añadido soporte para la bandera LANDLOCK_ACCESS_FS_TRUNCATE, que permite controlar la ejecución de operaciones de truncado de archivos.
- Subsistema de red
- Para IPv6 se ha añadido soporte de PLB (Protección de Balanceo de Carga), un mecanismo de balanceo de carga entre enlaces de red, diseñado para reducir los puntos de congestión en los switches de los centros de datos. A través de la modificación del Etiqueta de Flujo IPv6, PLB cambia aleatoriamente las rutas de los paquetes para equilibrar la carga en los puertos del switch. Para reducir la reordenación de paquetes, esta operación se realiza, cuando es posible, después de períodos de inactividad. La implementación de PLB en los centros de datos de Google ha permitido reducir el desequilibrio de carga en los puertos de los switches en un promedio del 60%, disminuir la pérdida de paquetes en un 33% y reducir la latencia en un 20%.
- Se ha añadido un controlador para dispositivos MediaTek con soporte para Wi-Fi 7 (802.11be).
- Se ha añadido soporte para enlaces de 800 gigabits.
- Se ha añadido la posibilidad de renombrar interfaces de red sobre la marcha, sin detener el funcionamiento.
- Se ha añadido una referencia a la dirección IP en los mensajes de registro sobre ataques SYN flood, indicando a qué dirección llegó el paquete.
- Para UDP se ha implementado la posibilidad de utilizar tablas hash separadas para diferentes espacios de nombres de red.
- Para los puentes de red se ha implementado soporte para el método de autenticación MAB (Bypass de Autenticación MAC).
- Para el protocolo CAN (CAN_RAW) se ha implementado soporte para el modo de socket SO_MARK, permitiendo adjuntar filtros de tráfico basados en fwmark.
- Se ha implementado un nuevo parámetro bitmask en ipset, permitiendo establecer una máscara basada en bits arbitrarios en la dirección IP (por ejemplo, 'ipset create set1 hash:ip bitmask 255.128.255.0').
- En nf_tables se ha añadido soporte para procesar encabezados internos (inner) que van dentro de paquetes tunelizados.
- Hardware
- Se ha añadido un subsistema 'accel' con la implementación de un marco para aceleradores de computación, que pueden existir como ASIC individuales o como bloques IP dentro de SoC y GPU. Principalmente, estos aceleradores están orientados a acelerar la solución de problemas de aprendizaje automático.
- En el controlador amdgpu se ha habilitado soporte para componentes IP GC, PSP, SMU y NBIO. Para sistemas ARM64 se ha implementado soporte para DCN (Display Core Next). La implementación de salida de video protegido ha sido trasladada de DCN10 a DCN21 y puede ahora utilizarse al conectar múltiples pantallas.
- En el controlador i915 (Intel) se ha estabilizado el soporte para tarjetas gráficas discretas Intel Arc (DG2/Alchemist).
- En el controlador Nouveau se ha implementado soporte para GPU NVIDIA GA102 (RTX 30) basado en la arquitectura Ampere. Para las tarjetas nva3 (GT215) se ha añadido la posibilidad de controlar la retroiluminación.
- Se ha añadido soporte para adaptadores inalámbricos basados en chips Realtek 8852BE, Realtek 8821CU, 8822BU, 8822CU, 8723DU (USB) y MediaTek MT7996, interfaces Bluetooth Broadcom BCM4377/4378/4387, así como controladores Ethernet Motorcomm yt8521, NVIDIA Tegra GE.
- Se ha añadido soporte para ASoC (ALSA System on Chip) para chips de sonido integrados HP Stream 8, Advantech MICA-071, Dell SKU 0C11, Intel ALC5682I-VD, Xiaomi Redmi Book Pro 14 2022, i.MX93, Armada 38x, RK3588. Se ha añadido soporte para la interfaz de sonido Focusrite Saffire Pro 40. Se ha añadido el códec de audio Realtek RT1318.
- Se ha añadido soporte para teléfonos inteligentes y tabletas Sony (Xperia 10 IV, 5 IV, X y X compact, OnePlus One, 3, 3T y Nord N100, Xiaomi Poco F1 y Mi6, Huawei Watch, Google Pixel 3a, Samsung Galaxy Tab 4 10.1.
- Se ha añadido soporte para ARM SoC y placas Apple T6000 (M1 Pro), T6001 (M1 Max), T6002 (M1 Ultra), Qualcomm MSM8996 Pro (Snapdragon 821), SM6115 (Snapdragon 662), SM4250 (Snapdragon 460), SM6375 (Snapdragon 695), SDM670 (Snapdragon 670), MSM8976 (Snapdragon 652), MSM8956 (Snapdragon 650), RK3326 Odroid-Go/rg351, Zyxel NSA310S, InnoComm i.MX8MM, Odroid Go Ultra.
Al mismo tiempo, la Fundación Latinoamericana de Software Libre ha formado una variante completamente libre del núcleo 6.2 — Linux-libre 6.2-gnu, limpiado de elementos de firmware y controladores que contienen componentes no libres o secciones de código cuya aplicación está restringida por el fabricante. En esta nueva versión se ha llevado a cabo una limpieza de nuevos blobs en el controlador nouveau. Se ha deshabilitado la carga de blobs en los controladores mt7622, mt7996 wifi y bcm4377 bluetooth. Se ha limpiado los nombres de blobs en archivos dts para la arquitectura Aarch64. Se ha actualizado el código de limpieza de blobs en diversos controladores y subsistemas. Se ha terminado la limpieza del controlador s5k4ecgx, ya que se ha eliminado del núcleo.
Fuente: opennet.ru
