Después de dos meses de desarrollo, Linus Torvalds presentó la versión del núcleo Linux 5.13. Entre los cambios más destacados se encuentran: el sistema de archivos EROFS, el soporte inicial para los chips Apple M1, el controlador de cgroup «misc», el cese del soporte para /dev/kmem, el soporte para nuevas GPU de Intel y AMD, la posibilidad de llamar a funciones del núcleo directamente desde programas BPF, la aleatorización de la pila del núcleo para cada llamada al sistema, la posibilidad de compilar en Clang con protección CFI (Control Flow Integrity), el módulo LSM Landlock para una restricción adicional de los procesos, un dispositivo de sonido virtual basado en virtio y el modo multi-shot en io_uring.
En la nueva versión se incluyen 17189 correcciones de 2150 desarrolladores (la mayor en la historia), el tamaño del parche es de 60 MB (los cambios afectaron a 12996 archivos, se añadieron 794705 líneas de código y se eliminaron 399590 líneas). Aproximadamente el 47% de todos los cambios presentados en 5.13 están relacionados con controladores de dispositivos, alrededor del 14% se relacionan con la actualización de código específico de arquitecturas de hardware, el 13% está relacionado con la pila de red, el 5% con sistemas de archivos y el 4% con subsistemas internos del núcleo.
Novedades principales:
- Subsistema de disco, entrada/salida y sistemas de archivos
- Se ha añadido soporte para el sistema de archivos EROFS (Enhanced Read-Only File System), propuesto por Huawei para su uso en particiones accesibles en modo solo lectura. El nuevo sistema de archivos permite el almacenamiento de datos en forma comprimida y, en comparación con Ext4, muestra un rendimiento similar en operaciones de lectura secuencial, pero supera a Ext4 por varios órdenes de magnitud en acceso aleatorio a los datos. Por ejemplo, con un nivel de compresión de 4 y pruebas en servidor con un disco duro, el sistema de archivos EROFS superó a Ext4 en operaciones de lectura aleatoria más de seis veces, y al usar un smartphone Android con Flash casi tres veces. Al igual que en otros sistemas de archivos de solo lectura, la estructura de EROFS se simplifica considerablemente al eliminar ciertas áreas de metadatos en su implementación, como el mapa de bloques libres.
- Para el sistema de archivos SMB3 se ha implementado la opción de montaje «rasize», que permite definir el tamaño de la ventana de lectura anticipada (readahead) para aumentar el rendimiento de ciertos tipos de carga.
- En el sistema de archivos ext4 se garantiza la reescritura de elementos de directorios al eliminar archivos. En ext4 también se permite el uso simultáneo del modo sin distinción entre mayúsculas y minúsculas y la encriptación.
- En el sistema de archivos exFAT se ha añadido soporte para el comando ioctl FITRIM (descartar), que informa al dispositivo sobre los bloques no utilizados en el sistema de archivos.
- En el sistema de archivos XFS se ha añadido la capacidad de recuperar espacio del último grupo de asignación en el sistema de archivos, lo que ha sido el primer paso hacia la implementación de la función de reducción del tamaño de las particiones existentes con sistema de archivos XFS.
- Se ha añadido una nueva llamada al sistema quotactl_path, que se diferencia de quotactl en que permite gestionar cuotas no a través de un archivo de dispositivo especial, sino mediante la especificación de la ruta al punto de montaje del sistema de archivos.
- En el mecanismo fanotify se han ampliado las capacidades disponibles para usuarios no privilegiados. Por ejemplo, al igual que con inotify, ahora se puede supervisar los eventos OPEN, ACCESS, MODIFY y CLOSE para archivos y directorios sin tener derechos SYS_CAP_ADMIN.
- Memoria y servicios del sistema
- Se ha añadido un nuevo controlador cgroup — 'Misc' (CONFIG_CGROUP_MISC), destinado a limitar y rastrear recursos escalares, que se pueden gestionar mediante un contador simple y limitar, estableciendo valores máximos. Como ejemplo de aplicación del nuevo controlador cgroup, se menciona la gestión de identificadores de espacio de direcciones utilizados en el mecanismo AMD SEV (Virtualización Encriptada Segura).
- En la interfaz de entrada/salida asíncrona io_uring para solicitudes POLL se ha implementado el modo 'multi-shot', en el que POLL no se elimina después de generar un evento, sino que permanece activo y puede generar múltiples eventos.
- Se ha trasladado código de la rama realtime del núcleo que proporciona el manejo de interrupciones generadas por software en los hilos del núcleo, lo que permite suprimirlas mediante procesos de mayor prioridad.
- Se ha añadido una biblioteca interna netfs, a la que se han trasladado funciones típicas utilizadas en sistemas de archivos de red.
- Para la arquitectura PowerPC se ha implementado soporte para espacios de nombres de tiempo (time namespaces), lo que permite utilizar su propio tiempo dentro de un contenedor.
- Para la arquitectura RISC-V se ha implementado soporte para kexec, volcado de fallos (crash dump), kprobe y ejecución del núcleo in situ (execute-in-place, ejecución desde el medio original sin copiar en RAM).
- En los programas de trazado BPF ha surgido la posibilidad de utilizar almacenamiento de datos local para tareas (task-local storage), lo que proporciona un rendimiento superior al vincular datos a un controlador BPF específico.
- Se ha implementado un nuevo mecanismo para la llamada directa a funciones del núcleo desde programas BPF, que ya se ha utilizado en la implementación de algoritmos de sobrecarga de TCP. Para garantizar la seguridad, las funciones que se invocan deben estar explícitamente definidas en una lista blanca.
- Se ha añadido a la sistema de trazado de funciones ftrace la opción func-no-repeats, que permite reflejar llamadas consecutivas repetidas a funciones en forma de un contador.
- En la llamada al sistema userfaultfd(), destinada a manejar page faults (accesos a páginas de memoria no asignadas) en el espacio del usuario, se ha añadido la posibilidad de gestionar faults parciales, donde la página de memoria está presente, pero no hay una entrada en la tabla de páginas de memoria.
- Se ha descontinuado el soporte para el archivo especial /dev/kmem, que permitía acceder a todo el espacio de direcciones del núcleo. Este archivo se ha considerado obsoleto y problemático en términos de seguridad.
- Se ha implementado un nuevo controlador para gestionar la refrigeración en chipsets Intel, que permite reducir la frecuencia del procesador ante el riesgo de sobrecalentamiento. A diferencia del mecanismo existente de activación TCC (Circuito de Control Térmico), el nuevo controlador manipula valores relativos, es decir, puede reducir la frecuencia al inicio de un aumento significativo de temperatura, pero sin esperar a superar un valor crítico umbral.
- Virtualización y seguridad
- Se ha incluido el módulo LSM de aislamiento de aplicaciones Landlock, que permite restringir la interacción con el entorno externo de un grupo de procesos y fue desarrollado teniendo en cuenta mecanismos de aislamiento como XNU Sandbox, FreeBSD Capsicum y OpenBSD Pledge/Unveil. La lógica de otorgamiento de acceso se define mediante un programa BPF, pero a diferencia de seccomp-bpf, Landlock no filtra llamadas al sistema y sus argumentos, sino que permite limitar el uso de objetos del núcleo, como jerarquías de archivos. Con Landlock, cualquier proceso, incluido uno sin privilegios, puede aislarse de manera segura y evitar la elusión del aislamiento en caso de que se detecten vulnerabilidades o cambios maliciosos en la aplicación. Landlock permite al proceso crear entornos aislados seguros, implementados en forma de una capa adicional sobre los mecanismos de control de acceso existentes. Por ejemplo, un programa puede prohibir el acceso a archivos fuera del directorio de trabajo.
- Se ha añadido la capacidad de aleatorizar los desplazamientos en la pila del núcleo al procesar llamadas al sistema, con el objetivo de complicar los ataques a la pila. La esencia de esta protección propuesta consiste en seleccionar un desplazamiento aleatorio de la pila con cada llamada al sistema, lo que dificulta la determinación del diseño de la pila en la memoria incluso si se obtienen datos sobre las direcciones, ya que en la siguiente llamada al sistema la dirección base de la pila cambiará. Para activar la aleatorización, se han propuesto el parámetro de línea de comandos del núcleo "randomize_kstack_offset=on/off" y la configuración CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT. Los costos adicionales se estiman en aproximadamente un 1% de pérdida de rendimiento.
- Se ha añadido soporte para compilar el núcleo con la inclusión en el compilador Clang del mecanismo de protección CFI (Control Flow Integrity), que agrega una verificación antes de cada llamada indirecta a una función para detectar ciertas formas de comportamiento indefinido que podrían llevar a una alteración del flujo normal de ejecución como resultado de la aplicación de exploits que modifican los punteros a funciones almacenados en memoria. Para habilitar CFI, se ha propuesto el parámetro CONFIG_CFI_CLANG.
- En el servicio proporcionado por el núcleo para el almacenamiento de claves de cifrado (key ring), el mecanismo de Claves de Confianza (Trusted Keys) ahora abarca no solo las claves de los módulos TPM, sino también de entornos TEE (Trusted Execution Environment). Para gestionar la fuente de las claves de confianza, se ha propuesto el parámetro de arranque "trusted.source". Además, se ha añadido la capacidad de gestionar las claves de confianza en formato ASN.1.
- Se ha añadido un parámetro para la precarga de la lista de certificados revocados durante el arranque del núcleo. Se ha resuelto el problema (CVE-2020-26541) relacionado con la ignorancia en la lista negra de los certificados UEFI Secure Boot suministrados en el formato EFI_CERT_X509_GUID, lo que permitía arrancar el sistema con un certificado revocado.
- Se ha añadido soporte para la verificación de firmas digitales ECDSA basadas en curvas elípticas en la subsistema criptográfico del núcleo.
- Se ha implementado la posibilidad de verificar políticas de SELinux mediante la subsistema IMA (Integrity Measurement Architecture), que proporciona el mantenimiento de una base de hash para verificar la integridad de los datos.
- Subsistema de red
- Se ha eliminado el soporte para la tecnología WiMAX, que ya no se utiliza en las redes públicas, y en el núcleo el único controlador que se puede usar con WiMAX sigue siendo el obsoleto controlador Intel 2400m. En el configurador de red NetworkManager, el soporte para WiMAX se suspendió en 2015. Actualmente, WiMAX ha sido prácticamente reemplazada por tecnologías como LTE, HSPA+ y Wi-Fi 802.11n.
- Se ha añadido un controlador para el adaptador de red MANA (Microsoft Azure Network Adapter).
- En el controlador ath11k se ha añadido soporte para los módulos inalámbricos Qualcomm QCN9074 con soporte para 802.11ax.
- En el controlador iwlwifi se ha implementado la capacidad de escaneo pasivo de canales en la banda de 6GHz. Para Ucrania se ha añadido soporte para activar/desactivar IEEE 802.11ax basado en parámetros en BIOS.
- Se ha optimizado el subsistema XDP (eXpress Data Path), que permite manipular paquetes de red antes de que sean procesados por la pila de red del núcleo de Linux. Las pruebas realizadas demuestran un aumento en el rendimiento de XDP del 4-8%. Para dispositivos virtio, la ganancia en el rendimiento del procesamiento por software AF_XDP puede alcanzar el 33%.
- En ICMP se ha implementado soporte para mensajes PROBE ampliados, definidos en RFC 8335.
- Se ha continuado la integración del núcleo MPTCP (MultiPath TCP), una extensión del protocolo TCP para establecer conexiones TCP que entregan paquetes simultáneamente a través de múltiples rutas a través de diferentes interfaces de red, vinculadas a diferentes direcciones IP. En esta nueva versión se ha añadido soporte para sockopt para establecer opciones TCP típicas. Se ha implementado la posibilidad de restablecer subflujos individuales.
- En netfilter se ha añadido soporte para la gestión de recursos mediante una jerarquía unificada de cgroups v2.
- En ethtool se ha implementado una interfaz para leer estadísticas del MIB de IEEE con soporte para mlx5 y bnxt. Se permite a los controladores de red extraer datos arbitrarios de la EEPROM SFP, manipulando no por desplazamiento+tamaño, sino por páginas de memoria.
- Hardware
- Se ha implementado soporte inicial para el chip ARM Apple M1, que abarca el controlador de interrupciones, temporizador, UART, SMP, funciones para la organización de entrada/salida y MMIO. La ingeniería inversa de la GPU aún no está completa, y se proporciona soporte para framebuffer y consola a través de un puerto serie.
- Se ha continuado la limpieza del núcleo de controladores antiguos, eliminando los controladores 'gasket' (Google ASIC), 'sysace', 'umem' y varios controladores antiguos para puertos serie.
- Después de 13 años en la rama staging, se ha estabilizado y trasladado al conjunto principal el controlador 'comedi' para el soporte de dispositivos de recolección de datos.
- Se ha añadido el controlador GUD (Generic USB Display) con la implementación de un controlador básico para pantallas y adaptadores de TV conectados a través de USB. El controlador proporciona propiedades DRM (Direct Rendering Manager) para la rotación de imágenes, control de brillo, acceso a EDID, configuración de modos de video y conexión de TV, que se pueden usar como base para crear controladores para dispositivos específicos.
- Se ha añadido el controlador de sonido 'virtio' con la implementación de un dispositivo de sonido virtual que se puede utilizar en sistemas invitados para salida y grabación de audio sin la necesidad de utilizar la tarjeta de sonido y sin emulación.
- En el controlador amdgpu se ha añadido soporte inicial para GPU Aldebaran (gfx90a). Se ha incluido soporte inicial para la tecnología de sincronización adaptativa FreeSync para HDMI (anteriormente disponible para DisplayPort), que permite corregir la frecuencia de actualización de la información en la pantalla. Se ha habilitado el soporte para ASSR (Alternate Scrambler Seed Reset). Se ha añadido ioctl para solicitar capacidades relacionadas con la codificación y decodificación de video. Se ha añadido el modo CONFIG_DRM_AMD_SECURE_DISPLAY para detectar cambios en pantallas que muestran información crítica. Se ha añadido soporte para el mecanismo de ahorro de energía ASPM.
- En el controlador i915 para tarjetas gráficas Intel se ha incluido soporte para chips Intel Alderlake-S. Se ha añadido soporte para eDP MSO (Embedded DisplayPort Multi-SST Operation).
- Se ha añadido soporte para el controlador de juegos Luna (Amazon), así como pantallas táctiles Hycon HY46XX, ILITEK Lego Series y MStar MSG2638.
Al mismo tiempo, la Fundación Latinoamericana de Software Libre ha formado una versión completamente libre del núcleo 5.11 — Linux-libre 5.11-gnu, purgado de elementos de firmware y controladores que contienen componentes no libres o secciones de código cuya aplicación está limitada por el fabricante. En la nueva versión se ha limpiado el controlador comedi. Se ha detenido la limpieza de los controladores cyclades, isicom tty e i2400m wimax, que han sido eliminados del núcleo. Se ha actualizado el código de limpieza de blobs en los controladores y subsistemas amdgpu, i915 csr, r8152 usb, mhi bus, x86 touchscreen y qualcomm arm64.
Fuente: opennet.ru
