Lanzamiento del núcleo de Linux 6.2

Luego de dos meses de desarrollo, Linus Torvalds presentó el lanzamiento del kernel Linux 6.2. Entre los cambios más destacados: se permite la aceptación de código bajo la licencia Copyleft-Next, se mejora la implementación de RAID5/6 en Btrfs, continúa la integración del soporte para el lenguaje Rust, se reduce la sobrecarga de protección contra ataques Retbleed, se Se agrega la capacidad de regular el consumo de memoria durante la reescritura, se agrega un mecanismo para el equilibrio de TCP PLB (equilibrio de carga de protección), se agrega un mecanismo de protección de flujo de comandos híbrido (FineIBT), BPF ahora tiene la capacidad de definir sus propios objetos y estructuras de datos. , se incluye la utilidad rv (Runtime Verification), 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 agregaron 730195 líneas de código y se eliminaron 409485 líneas). Aproximadamente el 42% de todos los cambios introducidos en 6.2 están relacionados con controladores de dispositivos, aproximadamente el 16% de los cambios están relacionados con la actualización de código específico para arquitecturas de hardware, el 12% están relacionados con la pila de red, el 4% están relacionados con sistemas de archivos y el 3% están relacionados con los subsistemas internos del núcleo.

Innovaciones clave en el kernel 6.2:

  • Servicios de memoria y sistema.
    • Está permitido incluir en el código del kernel cambios proporcionados bajo la licencia Copyleft-Next 0.3.1. La licencia Copyleft-Next fue creada por uno de los autores de GPLv3 y es totalmente compatible con la licencia GPLv2, según lo confirmado por los abogados de SUSE y Red Hat. En comparación con GPLv2, la licencia Copyleft-Next es mucho más compacta y más fácil de entender (se han eliminado la parte introductoria y la mención de compromisos obsoletos), define el plazo y el procedimiento para eliminar las infracciones y elimina automáticamente los requisitos copyleft para el software obsoleto que tiene más de 15 años.

      Copyleft-Next también contiene una cláusula de concesión de tecnología propietaria que, a diferencia de GPLv2, hace que esta licencia sea compatible con la licencia Apache 2.0. Para garantizar la compatibilidad total con GPLv2, Copyleft-Next establece explícitamente que se puede proporcionar un trabajo derivado bajo la licencia GPL además de la licencia Copyleft-Next original.

    • La estructura incluye la utilidad “rv”, que proporciona una interfaz para la interacción desde el espacio del usuario con los manejadores del subsistema RV (Runtime Verification), diseñado para verificar el correcto funcionamiento de sistemas altamente confiables que garantizan la ausencia de fallas. La verificación se realiza en tiempo de ejecución adjuntando controladores a puntos de seguimiento que verifican el progreso real de la ejecución contra un modelo determinista de referencia predeterminado de la máquina que define el comportamiento esperado del sistema.
    • El dispositivo zRAM, que permite que la partición de intercambio se almacene en la memoria en forma comprimida (se crea un dispositivo de bloque en la memoria en el que se realiza el intercambio mediante compresión), implementa la capacidad de recomprimir páginas utilizando un algoritmo alternativo para lograr un nivel superior. de compresión. La idea principal es permitir elegir entre varios algoritmos (lzo, lzo-rle, lz4, lz4hc, zstd), ofreciendo sus propios compromisos entre velocidad de compresión/descompresión y nivel de compresión, u óptimos en situaciones especiales (por ejemplo, para comprimir grandes páginas de memoria).
    • Se agregó la API "iommufd" para administrar el sistema de administración de memoria de E/S - IOMMU (Unidad de administración de memoria de E/S) desde el espacio del usuario. La nueva API permite gestionar tablas de páginas de memoria de E/S mediante descriptores de archivos.
    • BPF brinda la capacidad de crear tipos, definir sus propios objetos, construir su propia jerarquía de objetos y crear de manera flexible sus propias estructuras de datos, como listas vinculadas. Para los programas BPF que entran en modo de suspensión (BPF_F_SLEEPABLE), se ha agregado soporte para bloqueos bpf_rcu_read_{,un}lock(). Soporte implementado para guardar objetos task_struct. Se agregó el tipo de mapa BPF_MAP_TYPE_CGRP_STORAGE, que proporciona almacenamiento local para cgroups.
    • Para el mecanismo de bloqueo RCU (Read-copy-update), se implementa un mecanismo opcional de llamadas de devolución de llamada "perezosas", en el que se procesan varias llamadas de devolución de llamada a la vez utilizando un temporizador en modo por lotes. La aplicación de la optimización propuesta nos permite reducir el consumo de energía en dispositivos Android y ChromeOS entre un 5% y un 10% al posponer las solicitudes de RCU durante tiempos de inactividad o baja carga en el sistema.
    • Se agregó sysctl split_lock_mitigate para controlar cómo reacciona el sistema cuando detecta bloqueos divididos que ocurren al acceder a datos no alineados en la memoria debido a que los datos cruzan dos líneas de caché de la CPU al ejecutar una instrucción atómica. Estos bloqueos provocan una caída significativa del rendimiento. Configurar split_lock_mitigate en 0 solo emite una advertencia de que hay un problema, mientras que configurar split_lock_mitigate en 1 también hace que el proceso que causó el bloqueo se ralentice para preservar el rendimiento para el resto del sistema.
    • Se ha propuesto una nueva implementación de qspinlock para la arquitectura PowerPC, que demuestra un mayor rendimiento y resuelve algunos problemas de bloqueo que surgen en casos excepcionales.
    • El código de manejo de interrupciones MSI (interrupciones señalizadas de mensajes) ha sido reelaborado, eliminando problemas arquitectónicos acumulados y agregando soporte para vincular controladores individuales a diferentes dispositivos.
    • Para los sistemas basados ​​en la arquitectura del conjunto de instrucciones LoongArch utilizada en los procesadores Loongson 3 5000 y que implementan el nuevo RISC ISA, similar a MIPS y RISC-V, se implementa soporte para los modos ftrace, protección de pila, suspensión y espera.
    • Se ha proporcionado la capacidad de asignar nombres a áreas de memoria anónima compartida (anteriormente, los nombres solo podían asignarse a memoria anónima privada asignada a un proceso específico).
    • Se agregó un nuevo parámetro de línea de comando del kernel, “trace_trigger”, diseñado para activar un activador de seguimiento utilizado para vincular comandos condicionales llamados cuando se activa una verificación de control (por ejemplo, trace_trigger=”sched_switch.stacktrace if prev_state == 2″).
    • Se han aumentado los requisitos para la versión del paquete binutils. La construcción del kernel ahora requiere al menos binutils 2.25.
    • Al llamar a exec(), se agregó la capacidad de colocar un proceso en un espacio de nombres de tiempo, en el que la hora difiere de la hora del sistema.
    • Hemos comenzado a transferir funcionalidad adicional de la rama Rust-para-Linux relacionada con el uso del lenguaje Rust como segundo idioma para desarrollar controladores y módulos del kernel. La compatibilidad con Rust está deshabilitada de forma predeterminada y no da como resultado que Rust se incluya como una dependencia de compilación del kernel requerida. La funcionalidad básica ofrecida en la última versión se amplía para admitir código de bajo nivel, como el tipo Vec y las macros pr_debug!(), pr_cont!() y pr_alert!(), así como la macro de procedimiento “#[vtable ]”, que simplifica el trabajo con tablas de punteros en funciones. En futuras versiones se espera la adición de enlaces de Rust de alto nivel sobre los subsistemas del kernel, lo que permitirá la creación de controladores completos en Rust.
    • El tipo "char" utilizado en el kernel ahora se declara sin firmar de forma predeterminada para todas las arquitecturas.
    • El mecanismo de asignación de memoria losa, SLOB (asignador de losa), que fue diseñado para sistemas con una pequeña cantidad de memoria, ha sido declarado obsoleto. En lugar de SLOB, en condiciones normales se recomienda utilizar SLUB o SLAB. Para sistemas con una pequeña cantidad de memoria, se recomienda utilizar SLUB en el modo SLUB_TINY.
  • Subsistema de disco, E/S y sistemas de archivos
    • Se han realizado mejoras en Btrfs destinadas a solucionar el problema del "agujero de escritura" en las implementaciones RAID 5/6 (un intento de restaurar un RAID si ocurre un bloqueo durante la escritura y es imposible entender en qué bloque en qué dispositivo RAID se escribió correctamente, lo que puede provocar la destrucción de los bloques, correspondientes a los bloques asegurados). Además, los SSD ahora habilitan automáticamente la operación de descarte asíncrona de forma predeterminada cuando es posible, lo que permite mejorar el rendimiento debido a la agrupación eficiente de las operaciones de descarte en colas y al procesamiento de la cola por parte de un procesador en segundo plano. Se mejoró el rendimiento de las operaciones de envío y búsqueda, así como del ioctl de FIEMAP.
    • Se han ampliado las capacidades para gestionar la escritura diferida (escritura reescrita, guardado en segundo plano de datos modificados) para dispositivos de bloque. En algunas situaciones, como cuando se utilizan dispositivos de bloqueo de red o unidades USB, las escrituras diferidas pueden provocar un gran consumo de RAM. Para controlar el comportamiento de las escrituras diferidas y mantener el tamaño de la caché de la página dentro de ciertos límites, se han introducido nuevos parámetros estricto_limit, min_bytes, max_bytes, min_ratio_fine y max_ratio_fine en sysfs (/sys/class/bdi/).
    • El sistema de archivos F2FS implementa una operación de reemplazo atómico ioctl, que le permite escribir datos en un archivo dentro de una única operación atómica. F2FS también agrega un caché de extensión de bloque para ayudar a identificar datos utilizados activamente o datos a los que no se ha accedido durante mucho tiempo.
    • En ext4 FS solo se anotan correcciones de errores.
    • El sistema de archivos ntfs3 ofrece varias opciones de montaje nuevas: “nocase” para controlar la distinción entre 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 que no sean válidos para Windows; hide_dot_files para controlar la asignación de la etiqueta de archivo oculto para archivos que comienzan con un punto.
    • El sistema de archivos Squashfs implementa una opción de montaje “threads=", que le permite definir la cantidad de subprocesos para paralelizar las operaciones de descompresión. Squashfs también introdujo la capacidad de asignar ID de usuario de sistemas de archivos montados, utilizados para hacer coincidir los archivos de un usuario específico en una partición externa montada con otro usuario en el sistema actual.
    • Se ha reelaborado la implementación de las listas de control de acceso POSIX (POSIX ACL). La nueva implementación elimina problemas arquitectónicos, simplifica el mantenimiento de la base de código e introduce tipos de datos más seguros.
    • El subsistema fscrypt, que se utiliza para el cifrado transparente de archivos y directorios, ha agregado soporte para el algoritmo de cifrado SM4 (estándar chino GB/T 32907-2016).
    • Se ha proporcionado la capacidad de construir el kernel sin soporte para NFSv2 (en el futuro planean dejar de soportar NFSv2 por completo).
    • Se ha cambiado la organización de la verificación de los derechos de acceso a los dispositivos NVMe. Proporciona la capacidad de leer y escribir en un dispositivo NVMe si el proceso de escritura tiene acceso al archivo dedicado del dispositivo (anteriormente, el proceso debía tener el permiso CAP_SYS_ADMIN).
    • Se eliminó el controlador del paquete de CD/DVD, que quedó obsoleto en 2016.
  • Virtualización y seguridad
    • Se ha implementado un nuevo método de protección contra la vulnerabilidad Retbleed en las CPU Intel y AMD, utilizando el seguimiento de profundidad de llamadas, que no ralentiza el trabajo tanto como la protección contra Retbleed existente anteriormente. Para habilitar el nuevo modo, se ha propuesto el parámetro de línea de comando del kernel “retbleed=stuff”.
    • Se agregó un mecanismo híbrido de protección del flujo de instrucciones FineIBT, que combina el uso de instrucciones de hardware Intel IBT (Indirect Branch Tracking) y la protección de software kCFI (kernel Control Flow Integrity) para bloquear la violación del orden de ejecución normal (flujo de control) como resultado del uso. de exploits que modifican punteros almacenados en la memoria sobre funciones. FineIBT permite la ejecución por salto indirecto sólo en el caso de un salto a la instrucción ENDBR, que se coloca al principio de la función. Además, por analogía con el mecanismo kCFI, los hashes se verifican para garantizar la inmutabilidad de los punteros.
    • Se agregaron restricciones para bloquear ataques que manipulan la generación de estados "ups", después de los cuales se completan las tareas problemáticas y el estado se restaura sin detener el sistema. Con una gran cantidad de llamadas al estado "ups", se produce un desbordamiento del contador de referencias (refcount), lo que permite explotar las vulnerabilidades causadas por las desreferencias del puntero NULL. Para protegerse contra tales ataques, se ha agregado al kernel un límite para el número máximo de activadores "oops", después de exceder el cual el kernel iniciará una transición al estado de "pánico" seguido de un reinicio, lo que no permitirá lograr el objetivo. Número de iteraciones necesarias para desbordar el recuento. De forma predeterminada, el límite está establecido en 10 mil "oops", pero si lo desea, se puede cambiar mediante el parámetro oops_limit.
    • Se agregó el parámetro de configuración LEGACY_TIOCSTI y sysctl Legacy_tiocsti para deshabilitar la capacidad de colocar datos en el terminal usando ioctl TIOCSTI, ya que esta funcionalidad se puede usar para sustituir caracteres arbitrarios en el búfer de entrada del terminal y simular la entrada del usuario.
    • Se propone un nuevo tipo de estructura interna, página_codificada, en la que los bits inferiores del puntero se utilizan para almacenar información adicional utilizada para proteger contra la desreferenciación accidental del puntero (si la desreferenciación es realmente necesaria, estos bits adicionales deben borrarse primero). .
    • En la plataforma ARM64, en la etapa de arranque, es posible habilitar o deshabilitar la implementación de software del mecanismo Shadow Stack, que se utiliza para proteger contra la sobrescritura de la dirección de retorno de una función en caso de un desbordamiento del búfer en la pila ( la esencia de la protección es guardar la dirección de retorno en una pila "sombra" separada después de que el control se transfiere a la función y recuperar la dirección dada antes de salir de la función). La compatibilidad con implementaciones de hardware y software de Shadow Stack en un ensamblaje de kernel le permite utilizar un kernel en diferentes sistemas ARM, independientemente de su compatibilidad con instrucciones para la autenticación de puntero. La inclusión de una implementación software se realiza mediante la sustitución de las instrucciones necesarias en el código durante la carga.
    • Se agregó soporte para el uso del mecanismo de notificación de salida asincrónica en procesadores Intel, que permite detectar ataques de un solo paso al código ejecutado en enclaves SGX.
    • Se propone un conjunto de operaciones que permite que el hipervisor admita solicitudes de sistemas invitados Intel TDX (Trusted Domain Extensions).
    • Las configuraciones de compilación del kernel RANDOM_TRUST_BOOTLOADER y RANDOM_TRUST_CPU se han eliminado, a favor de las opciones de línea de comando correspondientes random.trust_bootloader y random.trust_cpu.
    • El mecanismo Landlock, que le permite limitar la interacción de un grupo de procesos con el entorno externo, ha agregado soporte para el indicador LANDLOCK_ACCESS_FS_TRUNCATE, que permite controlar la ejecución de operaciones de truncamiento de archivos.
  • Subsistema de red
    • Para IPv6, se agregó soporte para PLB (Protective Load Balancing), un mecanismo de equilibrio de carga entre enlaces de red destinado a reducir los puntos de sobrecarga en los conmutadores del centro de datos. Al cambiar la etiqueta de flujo IPv6, el 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 después de períodos de inactividad siempre que sea posible. El uso de PLB en los centros de datos de Google ha reducido el desequilibrio de carga en los puertos del switch en un promedio del 60 %, la pérdida de paquetes en un 33 % y la latencia en un 20 %.
    • Controlador agregado para dispositivos MediaTek compatibles con Wi-Fi 7 (802.11be).
    • Se agregó soporte para enlaces de 800 gigabits.
    • Se agregó la capacidad de cambiar el nombre de las interfaces de red sobre la marcha, sin detener el trabajo.
    • Se agregó una mención de la dirección IP a la que llegó el paquete a los mensajes de registro sobre la inundación SYN.
    • Para UDP, se ha implementado la capacidad de utilizar tablas hash independientes para diferentes espacios de nombres de red.
    • Para los puentes de red, se ha implementado la compatibilidad con el método de autenticación MAB (MAC Authentication Bypass).
    • Para el protocolo CAN (CAN_RAW), se ha implementado soporte para el modo de socket SO_MARK para adjuntar filtros de tráfico basados ​​en fwmark.
    • ipset implementa un nuevo parámetro de máscara de bits que le permite configurar una máscara basada en bits arbitrarios en la dirección IP (por ejemplo, "ipset create set1 hash:ip bitmask 255.128.255.0").
    • Se agregó soporte para procesar encabezados internos dentro de paquetes tunelizados a nf_tables.
  • Equipo
    • El subsistema "accel" se agregó con la implementación de un marco para aceleradores computacionales, que pueden suministrarse en forma de ASIC individuales o en forma de bloques IP dentro del SoC y la GPU. Estos aceleradores están destinados principalmente a acelerar la solución de problemas de aprendizaje automático.
    • El controlador amdgpu incluye soporte para los componentes IP GC, PSP, SMU y NBIO. Para los sistemas ARM64, se implementa la compatibilidad con DCN (Display Core Next). La implementación de salida de pantalla protegida pasó de usar DCN10 a DCN21 y ahora se puede usar al conectar varias pantallas.
    • El controlador i915 (Intel) tiene soporte estabilizado para tarjetas de video discretas Intel Arc (DG2/Alchemist).
    • El controlador Nouveau admite GPU NVIDIA GA102 (RTX 30) basadas en la arquitectura Ampere. Para las tarjetas nva3 (GT215), se agregó la capacidad de controlar la retroiluminación.
    • Se agregó 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 Motorcomm yt8521 y NVIDIA Tegra GE Ethernet.
    • Se agregó compatibilidad con 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 agregó soporte para la interfaz de audio Focusrite Saffire Pro 40. Se agregó el códec de audio Realtek RT1318.
    • Se agregó 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 agregó soporte para ARM SoC y Apple T6000 (M1 Pro), T6001 (M1 Max), T6002 (M1 Ultra), Qualcomm MSM8996 Pro (Snapdragon 821), SM6115 (Snapdragon 662), SM4250 (Snapdragon 460), SM6375 (Snapdragon 695) Placas, 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 creó una versión completamente libre del kernel 6.2 - Linux-libre 6.2-gnu, libre de elementos de firmware y controladores que contienen componentes propietarios o secciones de código, cuyo alcance está limitado por el fabricante. La nueva versión limpia nuevas manchas en el controlador nouveau. La carga de blobs está deshabilitada en los controladores mt7622, ​​mt7996 wifi y bcm4377 bluetooth. Se limpiaron los nombres de blobs en archivos dts para la arquitectura Aarch64. Código de limpieza de blobs actualizado en varios controladores y subsistemas. Dejó de limpiar el controlador s5k4ecgx, ya que fue eliminado del kernel.

Fuente: opennet.ru

Añadir un comentario