Después de dos meses de desarrollo, Linus Torvalds presentó el lanzamiento del núcleo Linux 5.11. Entre los cambios más destacados se encuentran: soporte para enclaves de Intel SGX, un nuevo mecanismo de intercepción de llamadas del sistema, un bus virtual auxiliar, prohibición de la construcción de módulos sin MODULE_LICENSE(), un modo de filtrado rápido de llamadas del sistema en seccomp, el cese del soporte para la arquitectura ia64, la transferencia de la tecnología WiMAX a la rama 'staging' y la posibilidad de encapsular SCTP en UDP.
La nueva versión incluye 15480 correcciones de 1991 desarrolladores, el tamaño del parche es de 72 MB (los cambios afectaron 12090 archivos, se añadieron 868025 líneas de código y se eliminaron 261456 líneas). Aproximadamente el 46% de todos los cambios presentados en 5.11 están relacionados con controladores de dispositivos, alrededor del 16% se refieren a la actualización de código específico para arquitecturas de hardware, el 13% está relacionado con la pila de red, el 3% con sistemas de archivos y el 4% con subsistemas internos del núcleo.
Novedades principales:
- Subsistema de disco, entrada/salida y sistemas de archivos
- En Btrfs se han añadido varias opciones de montaje para su uso en la recuperación de datos de sistemas de archivos dañados: 'rescue=ignorebadroots' para montar a pesar de las averías en algunos árboles raíz (extent, uuid, data reloc, device, csum, free space), 'rescue=ignoredatacsums' para desactivar la verificación de sumas de comprobación de datos y 'rescue=all' para habilitar simultáneamente los modos ‘ignorebadroots’, ‘ignoredatacsums’ y ‘nologreplay’. Se ha dejado de soportar la opción de montaje ‘inode_cache’, que anteriormente fue declarada obsoleta. Se ha preparado el código para implementar el soporte de bloques con metadatos y datos de tamaño inferior a una página (PAGE_SIZE), así como para modo de asignación zonificada. Las solicitudes sin búfer (Direct IO) se han trasladado a la infraestructura iomap. Se ha optimizado el rendimiento de varias operaciones, donde en algunos casos la aceleración puede alcanzar decenas de por ciento.
- En XFS se ha implementado la bandera ‘needsrepair’, que indica la necesidad de restauración. Cuando se establece esta bandera, el sistema de archivos no se puede montar hasta que se elimine la bandera mediante la utilidad xfs_repair.
- En Ext4 se han propuesto únicamente correcciones de errores y optimizaciones, así como una limpieza de código.
- Se ha permitido la reexportación de sistemas de archivos montados sobre NFS (es decir, una partición montada a través de NFS ahora puede ser exportada a través de NFS y utilizada como caché intermedia).
- En la llamada al sistema close_range(), que permite a un proceso cerrar de una vez un rango completo de descriptores de archivos abiertos, se añadió la opción CLOSE_RANGE_CLOEXEC para cerrar descriptores en modo close-on-exec.
- En el sistema de archivos F2FS se añadieron nuevas llamadas a ioctl(), lo que permite a los usuarios gestionar qué archivos se almacenan en formato comprimido. Se añadió la opción de montaje «compress_mode=» para elegir la ubicación del controlador de compresión en el lado del núcleo o en el espacio de usuario.
- Se ha permitido el montaje de Overlayfs por procesos no privilegiados, utilizando un espacio separado de identificadores de usuarios (user namespace). Para verificar la conformidad con el modelo de seguridad, se llevó a cabo una auditoría completa del código. En Overlayfs también se añadió la opción de iniciar utilizando copias de imágenes del sistema de archivos a través de una opción para desactivar la verificación UUID.
- Se añadió al sistema de archivos Ceph el soporte para el protocolo msgr2.1, que permite aplicar el algoritmo AES-GCM durante la transmisión de datos de forma cifrada.
- En el módulo dm-multipath se implementó la capacidad de tener en cuenta el enlace a la CPU («IO affinity») al elegir la ruta para las solicitudes de entrada/salida.
- Memoria y servicios del sistema
- Se añadió un nuevo mecanismo de intercepción de llamadas al sistema, basado en prctl(), que permite generar excepciones desde el espacio de usuario al acceder a una llamada al sistema específica y emular su ejecución. Esta funcionalidad es demandada en Wine y Proton para emular llamadas al sistema de Windows, lo cual es necesario para asegurar la compatibilidad con juegos y programas que ejecutan llamadas al sistema directamente, eludiendo la API de Windows (por ejemplo, para protegerse contra el uso no autorizado).
- En la llamada al sistema userfaultfd(), destinada a gestionar page faults (accesos a páginas de memoria no asignadas) en el espacio de usuario, se añade la capacidad de desactivar el manejo de excepciones que ocurren a nivel de núcleo, con el fin de dificultar la explotación de algunas vulnerabilidades.
- Se añadió al subsistema BPF el soporte para almacenamiento de datos local para la tarea (task-local storage), que proporciona vinculación de datos a un manejador BPF específico.
- Se ha rediseñado completamente la contabilización del consumo de memoria por parte de los programas BPF; se ha propuesto un controlador cgroup para gestionar el uso de memoria en los objetos BPF en lugar del rlimit de memlock.
- En el mecanismo BTF (BPF Type Format), que proporciona información para la verificación de tipos en el pseudocódigo BPF, se ha implementado soporte para módulos del núcleo.
- En la interfaz de entrada/salida asíncrona io_uring se ha añadido soporte para las llamadas al sistema shutdown(), renameat2() y unlinkat(). Al invocar io_uring_enter() se ha incorporado la posibilidad de especificar un tiempo de espera (la compatibilidad con este argumento se puede verificar con la bandera IORING_FEAT_EXT_ARG).
- La arquitectura ia64, utilizada en los procesadores Intel Itanium, ha sido clasificada como abandonada, lo que implica la interrupción de las pruebas. Hewlett Packard Enterprise ha dejado de aceptar pedidos para nuevo hardware Itanium, y Intel lo hizo el año pasado.
- Se ha descontinuado el soporte para sistemas basados en la arquitectura MicroBlaze que no estén equipados con unidad de gestión de memoria (MMU). Tales sistemas ya no son comunes.
- Para la arquitectura MIPS se ha añadido soporte para pruebas de cobertura de código mediante la utilidad gcov.
- Se ha añadido soporte para el bus virtual auxiliary para la interacción con dispositivos multifuncionales que combinan funcionalidad que requiere diferentes controladores (por ejemplo, tarjetas de red con soporte para Ethernet y RDMA). Este bus se puede usar para asignar un controlador primario y secundario al dispositivo, en situaciones donde el uso del subsistema MFD (Multi-Function Devices) es problemático.
- Para la arquitectura RISC-V se ha añadido soporte para el sistema de asignación de memoria CMA (Contiguous Memory Allocator), optimizado para la asignación de grandes bloques continuos de memoria utilizando técnicas de paginación. También se han implementado medidas para restringir el acceso a /dev/mem y contabilizar el tiempo de procesamiento de interrupciones.
- Para sistemas ARM de 32 bits se ha añadido soporte para la herramienta de depuración KASan (Kernel Address Sanitizer), que identifica errores en el uso de la memoria. Para ARM de 64 bits, la implementación de KASan se ha trasladado al uso de etiquetas MTE (MemTag).
- Se ha añadido la llamada al sistema epoll_pwait2(), que permite el uso de temporizadores con precisión en nanosegundos (la llamada epoll_wait manipula milisegundos).
- El sistema de compilación ahora proporciona un mensaje de error al intentar compilar módulos del núcleo que no tienen definida la licencia de código mediante el macro MODULE_LICENSE(). Además, el uso del macro EXPORT_SYMBOL() para funciones estáticas también provocará un error en la compilación.
- Se añadió soporte para mapeo de objetos GEM desde la memoria utilizada para entrada/salida, lo que acelera el trabajo con el framebuffer en algunas arquitecturas.
- Se ha descontinuado el soporte de Qt4 en Kconfig (se mantiene soporte para Qt5, GTK y Ncurses).
- Virtualización y seguridad
- Se ha agregado soporte para un modo de respuesta rápida en la llamada al sistema seccomp(), que permite determinar muy rápidamente si un llamado al sistema está permitido o prohibido en función de la tabla de permisos (constant-action bitmap) adjunta al proceso, sin necesidad de ejecutar un manejador BPF.
- Se integraron componentes del núcleo para crear y gestionar enclaves basados en la tecnología Intel SGX (Software Guard eXtensions), que permite a las aplicaciones ejecutar código en áreas de memoria cifradas y aisladas, a las que el resto del sistema tiene acceso restringido.
- Como parte de la iniciativa para restringir el acceso desde el espacio de usuario a los registros MSR (model-specific register), se ha prohibido la escritura en el registro MSR_IA32_ENERGY_PERF_BIAS, que permite cambiar el modo de eficiencia energética del procesador ('normal', 'rendimiento', 'ahorro de energía').
- Se ha transferido desde la rama kernel-rt para sistemas de tiempo real la capacidad de desactivar la migración de tareas de alta prioridad entre CPU.
- Para sistemas ARM64, se ha añadido la capacidad de aplicar etiquetas MTE (MemTag, Memory Tagging Extension) a las direcciones de memoria de los manejadores de señales. El uso de MTE se activa especificando la opción SA_EXPOSE_TAGBITS en sigaction() y permite organizar la verificación de la correcta utilización de los punteros para bloquear la explotación de vulnerabilidades causadas por el acceso a bloques de memoria ya liberados, desbordamientos de búfer, accesos antes de la inicialización y usos fuera del contexto actual.
- Se ha añadido el parámetro 'DM_VERITY_VERIFY_ROOTHASH_SIG_SECONDARY_KEYRING', que permite a la subsistema dm-verity verificar las firmas de hash de los certificados almacenados en el keyring secundario. En la práctica, esta configuración permite verificar no solo los certificados incorporados en el núcleo, sino también los certificados cargados durante el funcionamiento, lo que ofrece la posibilidad de actualizar certificados sin tener que actualizar todo el núcleo.
- En User-mode Linux se ha añadido soporte para el modo suspend-to-idle, que permite congelar el entorno y utilizar la señal SIGUSR1 para salir del estado de suspensión.
- En el mecanismo virtio-mem, que permite la conexión y desconexión en caliente de la memoria a máquinas virtuales, se ha añadido soporte para el modo de bloque grande (BBM, Big Block Mode), que permite transferir o retirar memoria en bloques que superan el tamaño del bloque de memoria del núcleo, lo que es necesario para optimizar VFIO en QEMU.
- Se ha añadido soporte para el cifrado CHACHA20-POLY1305 en la implementación TLS a nivel de núcleo.
- Subsistema de red
- Para 802.1Q (VLAN), se ha implementado un mecanismo de gestión de fallos de conectividad (CFM, Connectivity Fault Management), que permite detectar, verificar y aislar fallos en redes con puentes virtuales (Virtual Bridged Networks). Por ejemplo, CFM puede usarse para localizar problemas en redes que abarcan varias organizaciones independientes, cuyos empleados solo tienen acceso a su propio equipo.
- Se ha añadido soporte para la encapsulación de paquetes del protocolo SCTP en paquetes UDP (RFC 6951), lo que permite usar SCTP en redes con traductores de direcciones antiguos que no admiten SCTP directamente, así como implementar SCTP en sistemas que no ofrecen acceso directo al nivel IP.
- La implementación de la tecnología WiMAX se ha movido a staging y se prevé su eliminación en el futuro si no se encuentran usuarios que requieran WiMAX. WiMAX ya no se utiliza en redes públicas, y en el núcleo el único controlador que se puede usar con WiMAX sigue siendo el antiguo controlador Intel 2400m. En el configurador de red NetworkManager, el soporte para WiMAX se interrumpió en 2015. Actualmente, WiMax ha sido prácticamente reemplazada por tecnologías como LTE, HSPA+ y Wi-Fi 802.11n.
- Se han realizado optimizaciones en el rendimiento del procesamiento de tráfico TCP entrante en modo zerocopy, es decir, sin copias adicionales en nuevos búferes. Para tráfico de tamaño medio, que abarca decenas o cientos de kilobytes de datos, el uso de zerocopy en lugar de recvmsg() es considerablemente más eficiente. Por ejemplo, los cambios implementados lograron aumentar la eficiencia del procesamiento de tráfico estilo RPC con mensajes de 32 KB al utilizar zerocopy entre un 60-70%.
- Se han añadido nuevas llamadas ioctl() para crear puentes de red que abarcan múltiples canales PPP. La funcionalidad propuesta permite que los tramas se muevan de un canal a otro, por ejemplo, de PPPoE a una sesión PPPoL2TP.
- Se ha continuado con la integración en el núcleo de MPTCP (MultiPath TCP), una extensión del protocolo TCP para gestionar la conexión TCP con entrega de paquetes simultáneamente a través de múltiples rutas a través de diferentes interfaces de red, ligadas a diferentes direcciones IP. En esta nueva versión se ha implementado el soporte para la opción ADD_ADDR para anunciar los disponibles direcciones IP a los que es posible conectarse al agregar nuevos flujos a una conexión existente de MPTCP.
- Se ha añadido la posibilidad de configurar acciones al exceder el presupuesto de sondeo de conexiones (busy-polling). El modo SO_BUSY_POLL previamente disponible implicaba el cambio a softirq al agotarse el presupuesto. Para las aplicaciones que necesitan continuar usando el sondeo, se ha propuesto una nueva opción SO_PREFER_BUSY_POLL.
- Se ha implementado en IPv6 el soporte para los modos SRv6 End.DT4 y End.DT6, utilizados para crear IPv4 L3 multijugador VPN y dispositivos VRF (enrutamiento y reenvío virtual).
- En Netfilter se ha unificado la implementación de expresiones de conjunto, lo que ha permitido proporcionar la posibilidad de especificar múltiples expresiones para cada elemento de las listas de conjuntos.
- En la pila inalámbrica 802.11 se han añadido APIs para configurar las restricciones de potencia SAR, así como los parámetros AE PWE y HE MCS. En el controlador Intel iwlwifi se ha añadido soporte para el rango de 6GHz (Ultra High Band). En el controlador Qualcomm Ath11k se ha añadido soporte para la tecnología de configuración rápida de conexión FILS (Fast Initial Link Setup, estandarizada como IEEE 802.11ai), que permite eliminar los retrasos durante el roaming al migrar de un punto de acceso a otro.
- Hardware
- En el controlador amdgpu se ha implementado el soporte para el APU AMD 'Green Sardine' (Ryzen 5000) y el GPU 'Dimgrey Cavefish' (Navi 2), así como soporte preliminar para el APU AMD Van Gogh con núcleo Zen 2 y GPU RDNA 2 (Navi 2). Se ha añadido soporte para nuevos identificadores de APU Renoir (basado en CPU Zen 2 y GPU Vega).
- En el controlador i915 para tarjetas gráficas Intel se ha implementado soporte para la tecnología IS (escalado entero) con un filtro que aumenta la escala teniendo en cuenta el estado de los píxeles vecinos (interpolación más cercana) para determinar el color de los píxeles faltantes. Se ha ampliado el soporte para las tarjetas discretas Intel DG1. Se ha implementado soporte para la tecnología "Big Joiner", presente desde los chips Ice Lake / Gen11 y que permite usar un transcodificador para procesar dos flujos, por ejemplo, para la salida en una pantalla 8K a través de un DisplayPort. Se ha añadido un modo de cambio asíncrono entre dos búferes en la memoria de video (async flip).
- En el controlador nouveau se ha añadido soporte inicial para la GPU NVIDIA basada en la microarquitectura "Ampere" (GA100, GeForce RTX 30xx), aún limitada a las herramientas para el manejo de modos de video.
- Se ha añadido soporte para el protocolo 3WIRE, utilizado en paneles LCD. Se ha agregado soporte para los paneles novatek nt36672a, TDO tl070wsh30, Innolux N125HCE-GN1 y ABT Y030XX067A 3.0. También se puede destacar el soporte para el panel de los teléfonos inteligentes OnePlus 6 y 6T, lo que ha permitido organizar la carga en dispositivos con un núcleo no modificado.
- Se ha añadido soporte para el primer controlador de host USB4 discreto Intel Maple Ridge.
- Se ha añadido soporte para los códecs de audio Allwinner H6 I2S, Analog Devices ADAU1372, Intel Alderlake-S, GMediatek MT8192, NXP i.MX HDMI and XCVR, Realtek RT715 y Qualcomm SM8250.
- Se ha añadido soporte para plataformas ARM, dispositivos y sistemas: Galaxy Note 10.1, Microsoft Lumia 950 XL, NanoPi R1, FriendlyArm ZeroPi, Elimo Initium SBC, Broadcom BCM4908, Mediatek MT8192/MT6779/MT8167, MStar Infinity2M, Nuvoton NPCM730, Marvell Armada 382, Mikrotik basado en Marvell Prestera 98DX3236, servidores con Nuvoton NPCM750 BMC, Kontron i.MX8M Mini, Espressobin Ultra, Chromebook "Trogdor", Kobol Helios64, Engicam PX30.Core.
- Se ha incorporado soporte para la consola de juegos Ouya basada en NVIDIA Tegra 3.
Al mismo tiempo, la Fundación Latinoamericana de Software Libre ha formado una variante completamente libre del núcleo 5.11 — Linux-libre 5.11-gnu, limpio de elementos de firmware y controladores que contienen componentes no libres o secciones de código cuyo ámbito de aplicación está limitado por el fabricante. En esta nueva versión se ha realizado la limpieza de los controladores para qat_4xxx (crypto), lt9611uxcm (puente dsi/hdmi), ccs/smia++ (sensor), ath11k_pci, nxp audio transceiver y controlador pci mhi. Se ha actualizado el código de limpieza de blobs en los controladores y subsistemas amdgpu, btqca, btrtl, btusb, i915 csr. Se han desactivado nuevos blobs en m3 rproc, idt82p33 ptp clock y qualcomm arm64.
Fuente: opennet.ru
