Lanzamiento del núcleo Linux 5.8

Después de dos meses de desarrollo, Linus Torvalds presentó el lanzamiento del núcleo Linux 5.8. Entre los cambios más destacados se encuentran: el detector de condiciones de carrera KCSAN, un mecanismo universal para la entrega de notificaciones al espacio de usuario, soporte para hardware de cifrado en línea, mecanismos de protección mejorados para ARM64, soporte para el procesador ruso Baikal-T1, la posibilidad de montar instancias de procfs de forma separada, la implementación para ARM64 de mecanismos de protección Shadow Call Stack y BTI.

El núcleo 5.8 se ha convertido en el más grande en número de cambios de todos los núcleos desde el inicio del proyecto. Estos cambios no están relacionados con un solo subsistema, sino que abarcan diferentes partes del núcleo y están principalmente relacionados con revisiones internas y limpieza. La mayor parte de los cambios se observa en los controladores. La nueva versión incluye 17,606 correcciones de 2,081 desarrolladores, que afectaron aproximadamente el 20% de todos los archivos en el repositorio del código del núcleo. El tamaño del parche es de 65 MB (los cambios afectaron a 16,180 archivos, se añadieron 1,043,240 líneas de código y se eliminaron 489,854 líneas). En comparación, en la rama 5.7 se realizaron 15,033 correcciones y el tamaño del parche fue de 39 MB. Aproximadamente el 37% de todos los cambios presentados en 5.8 están relacionados con los controladores de dispositivos, alrededor del 16% de los cambios se relacionan con la actualización de código específico de arquitecturas de hardware, el 11% está relacionado con la pila de red, el 3% con los sistemas de archivos y el 4% con subsistemas internos del núcleo.

Principales novedades:

  • Virtualización y seguridad
    • Se ha implementado el bloqueo de la carga de módulos del núcleo que tienen secciones con código donde se establecen simultáneamente bits que permiten la ejecución y la escritura. Este cambio se ha realizado en el marco de un proyecto más amplio para eliminar del núcleo el uso de páginas de memoria que permiten simultáneamente la ejecución y la escritura.
    • Se ha implementado la posibilidad de crear instancias separadas de procfs, que permiten utilizar múltiples puntos de montaje de procfs, montados con diferentes opciones, pero reflejando un único espacio de nombres de identificadores de proceso (pid namespace). Anteriormente, todos los puntos de montaje de procfs solo reflejaban una única representación interna y cualquier cambio en los parámetros de montaje afectaba a todos los demás puntos de montaje relacionados con el mismo espacio de nombres de identificadores de proceso. Áreas donde podría ser necesaria la montagem con diferentes opciones incluyen la implementación de aislamiento liviano para sistemas integrados, con la posibilidad de ocultar en procfs ciertos tipos de procesos y nodos de información.
    • Se ha implementado soporte para el mecanismo
      Shadow-Call Stack, proporcionado por el compilador Clang para proteger contra la sobrescritura de la dirección de retorno de una función en caso de desbordamiento de buffer en la pila. La esencia de la protección radica en guardar la dirección de retorno en un 'stack' separado y 'sombra' después de transferir el control a la función, y extraer dicha dirección antes de salir de la función.
    • Se ha añadido soporte para las instrucciones ARMv8.5-BTI (Branch Target Indicator) para proteger la ejecución de conjuntos de instrucciones a los que no se deben realizar saltos durante la ramificación. El bloqueo de saltos a áreas de código arbitrarias se ha implementado para contrarrestar la creación de gadgets en exploits que utilizan técnicas de programación orientada a la devolución (ROP — Return-Oriented Programming, donde el atacante no intenta colocar su código en memoria, sino que opera sobre fragmentos existentes de instrucciones de máquina que terminan con la instrucción de retorno de control, formando una cadena de llamadas para obtener la funcionalidad deseada).
    • Se ha añadido soporte de hardware para el cifrado en línea de dispositivos de bloque (Inline Encryption). Los dispositivos de cifrado en línea generalmente están integrados en el almacenamiento, pero se colocan lógicamente entre la memoria del sistema y el disco, realizando la cifrado y descifrado transparente de entrada/salida basado en claves especificadas por el núcleo y un algoritmo de cifrado.
    • Se ha añadido el parámetro de línea de comandos del núcleo 'initrdmem', que permite especificar la dirección física de ubicación de initrd en la memoria al ubicar la imagen inicial de arranque en la RAM.
    • Se han agregado nuevas capacidades: CAP_PERFMON para acceder al subsistema de rendimiento y realizar monitoreo del rendimiento. CAP_BPF, que permite realizar algunas operaciones con BPF (por ejemplo, cargar programas BPF), que anteriormente requerían privilegios de CAP_SYS_ADMIN (ahora los privilegios de CAP_SYS_ADMIN se dividen en una combinación de CAP_BPF, CAP_PERFMON y CAP_NET_ADMIN).
    • Se han añadido Un nuevo dispositivo virtio-mem que permite la conexión y desconexión en caliente de la memoria a sistemas invitados.
    • Se ha implementado la reversión de operaciones de mapeo en /dev/mem, si el controlador del dispositivo utiliza regiones de memoria superpuestas.
    • Se ha añadido protección contra la vulnerabilidad CROSSTalk/SRBDS, que permite recuperar los resultados de la ejecución de algunas instrucciones que se ejecutan en otro núcleo de la CPU.
  • Memoria y servicios del sistema
    • En el documento que define las reglas de estilo de código, se han aceptado se incluyen recomendaciones sobre el uso de una terminología inclusiva. A los desarrolladores no se les recomienda utilizar las combinaciones 'master/slave' y 'blacklist/whitelist', así como la palabra 'slave' por separado. Las recomendaciones solo se aplican a nuevos usos de esos términos. Las menciones existentes de estas palabras en el núcleo permanecerán intactas. En el nuevo código, el uso de los términos marcados está permitido si es necesario para mantener la API y ABI disponibles para el espacio de usuario, así como al actualizar el código para admitir hardware existente o protocolos cuya especificación exige el uso de ciertos términos.
    • Se ha incluido una herramienta de depuración KCSAN (Kernel Concurrency Sanitizer), diseñada para detectar dinámicamente condiciones de carrera dentro del núcleo. El uso de KCSAN se admite al compilar con GCC y Clang, y requiere la adición de modificaciones especiales en la etapa de compilación para rastrear el acceso a la memoria (se utilizan puntos de interrupción que se activan al leer o modificar la memoria). La principal atención en el desarrollo de KCSAN se ha centrado en prevenir falsos positivos, escalabilidad y facilidad de uso.
    • Se añadió un mecanismo universal la entrega de notificaciones del núcleo al espacio de usuario. El mecanismo se basa en un controlador de pipe estándar y permite distribuir eficazmente las notificaciones del núcleo a través de los canales abiertos en el espacio de usuario. Los puntos de recepción de notificaciones son pipes abiertos en un modo especial que permiten acumular en un búfer circular los mensajes procedentes del núcleo. La lectura se realiza mediante la función read() habitual. El propietario del canal determina cuáles de las fuentes en el núcleo deben ser monitoreadas y puede definir un filtro para ignorar mensajes y eventos de cierto tipo. Actualmente, solo se admiten operaciones con claves como la adición/eliminación de claves y la modificación de sus atributos. Se planea utilizar estos eventos en GNOME.
    • Se ha continuado el desarrollo de la funcionalidad 'pidfd', que ayuda a manejar situaciones de reutilización del PID (pidfd se vincula a un proceso específico y no cambia, mientras que el PID puede estar asociado a otro proceso después de que el proceso actual asociado con ese PID haya concluido). En la nueva versión se ha añadido soporte para usar pidfd para adjuntar procesos a espacios de nombres (se permite especificar pidfd al realizar la llamada al sistema setns). El uso de pidfd permite gestionar la vinculación de un proceso a varios tipos de espacios de nombres en una sola llamada, reduciendo significativamente el número de llamadas al sistema necesarias y realizando la vinculación en modo atómico (si falla la vinculación a uno de los espacios de nombres, no se conectarán los demás).
    • Se ha añadido una nueva llamada al sistema faccessat2(), que se diferencia de
      faccessat() por un argumento adicional con banderas que corresponden a las recomendaciones de POSIX (anteriormente estas banderas se emulaban en la biblioteca C, y el nuevo faccessat2 permite implementarlas en el núcleo).
    • En Cgroup se ha añadido la configuración memory.swap.high, que se puede utilizar para ralentizar tareas que ocupan demasiado espacio en la partición de intercambio.
    • En la interfaz de entrada/salida asíncrona io_uring se ha añadido soporte para la llamada al sistema tee().
    • Se ha añadido el mecanismo "el iterador BPF, destinado a mostrar en el espacio de usuario el contenido de las estructuras del núcleo.
    • Se ha proporcionado la posibilidad de utilizar un búfer circular para el intercambio de datos entre programas BPF.
    • En el mecanismo padata, diseñado para organizar la ejecución paralela de tareas en el núcleo, se añadió soporte para tareas multihilo con balanceo de carga.
    • En el mecanismo pstore, que permite guardar información de depuración sobre la causa de fallos en la memoria, que no se pierde entre reinicios, se ha agregado un backend para almacenar información en dispositivos de bloques.
    • Desde la rama del núcleo PREEMPT_RT se trasladó la implementación de bloqueos locales.
    • Se añadió una nueva API de asignación de buffers (AF_XDP), destinada a simplificar la escritura de controladores de red con soporte para XDP (eXpress Data Path).
    • Para la arquitectura RISC-V se implementó el soporte para depurar componentes del núcleo mediante KGDB.
    • Antes del lanzamiento 4.8 se elevaron los requisitos de versión de GCC que se puede utilizar para compilar el núcleo. En una de las próximas versiones se planea aumentar el mínimo a GCC 4.9.
  • Subsistema de disco, entrada/salida y sistemas de archivos
    • En Device Mapper se ha agregado un nuevo controlador dm-ebs (emular tamaño de bloque), que puede aplicarse para emular un tamaño menor de bloque lógico (por ejemplo, para emular sectores de 512 bytes en discos con un tamaño de sector de 4K).
    • En el sistema de archivos F2FS se agregó soporte para compresión utilizando el algoritmo LZO-RLE.
    • En dm-crypt se ha añadido soporte para claves cifradas.
    • En Btrfs se mejoró el manejo de operaciones de lectura en modo de entrada/salida directa. Al montar se aceleró la verificación de subdirectorios y directorios remotos que quedaron sin padre.
    • En CIFS se añadió el parámetro 'nodelete', que permite chequeos de permisos en el servidor, pero prohibe al cliente eliminar archivos o directorios.
    • En Ext4 se mejoró el manejo de errores ENOSPC al utilizar multihilo. En xattr se añadió soporte para el espacio de nombres gnu.*, utilizado en GNU Hurd.
    • Para Ext4 y XFS se habilitó el soporte para operaciones DAX (acceso directo al FS omitiendo la caché de páginas sin usar el nivel de dispositivos de bloques) ligado a archivos y directorios específicos.
    • En la llamada al sistema statx() se ha añadido la bandera STATX_ATTR_DAX, al especificar el cual la información se extrae utilizando el mecanismo DAX.
    • En EXFAT se ha añadido soporte para la verificación del área de arranque.
    • En FAT se mejoró la pre-carga de elementos del FS. La prueba con una lenta unidad USB de 2TB mostró una reducción en el tiempo de prueba de 383 a 51 segundos.
  • Subsistema de red
    • En el código de gestión de redes de puentes se ha añadido soporte para el protocolo MRP (Protocolo de Redundancia de Medios), que permite garantizar la tolerancia a fallos, cerrando varios conmutadores Ethernet en anillo.
    • En el sistema de gestión de tráfico (Tc) añadido una nueva acción «gate» que permite definir intervalos de tiempo para el procesamiento y el descarte de ciertos paquetes.
    • Se ha añadido soporte para las funciones de prueba del cable de red conectado y la autodiagnosis de dispositivos de red en el núcleo y la utilidad ethtool.
    • Se ha añadido soporte para el algoritmo MPLS (Multiprotocol Label Switching) en la pila IPv6 para el enrutamiento de paquetes utilizando la conmutación de etiquetas multiprotocolo (anteriormente, MPLS ya se admitía para IPv4).
    • Se ha añadido soporte para la transmisión de paquetes IKE (Internet Key Exchange) e IPSec sobre TCP (RFC 8229) para evitar posibles bloqueos de UDP.
    • Se han añadido dispositivo de bloques de red rnbd, que permite organizar el acceso remoto a un dispositivo de bloques mediante transporte RDMA (InfiniBand, RoCE, iWARP) y protocolo RTRS.
    • En la pila TCP, se ha añadido se añade soporte para la compresión de rangos en las respuestas de reconocimiento selectivo (selective acknowledgment, SACK).
    • Para IPv6, se ha implementado se ha añadido soporte para TCP-LD (RFC 6069, Disruptions Longitudinales de Conectividad).
  • Hardware
    • En el controlador DRM i915 para tarjetas gráficas Intel, el soporte para los chips Intel Tiger Lake (GEN12) se ha activado por defecto, para los cuales también se se ha implementado ha incorporado la capacidad de utilizar el sistema SAGV (System Agent Geyserville) para el ajuste dinámico de la frecuencia y el voltaje según las demandas de consumo energético o rendimiento.
    • En el controlador amdgpu se ha añadido soporte para el formato de píxeles FP16 y se ha implementado la posibilidad de trabajar con búferes cifrados en la memoria de video (TMZ, Trusted Memory Zone).
    • Se ha añadido soporte para los sensores de consumo energético de los procesadores AMD Zen y Zen2, así como para los sensores de temperatura de AMD Ryzen 4000 Renoir. Para AMD Zen y Zen2, se ha habilitado la posibilidad de extraer información sobre el consumo de energía a través de la interfaz RAPL (Running Average Power Limit).
    • En el controlador Nouveau se ha añadido soporte para el formato de modificadores de NVIDIA. Para gv100 se ha habilitado la posibilidad de utilizar modos de escaneo entrelazado. Se ha añadido la identificación de vGPU.
    • En el controlador MSM (Qualcomm) se ha añadido soporte para GPU Adreno A405, A640 y A650.
    • Se añadió un marco interno para la gestión de recursos DRM (Direct Rendering Manager).
    • Se ha añadido soporte para teléfonos inteligentes Xiaomi Redmi Note 7 y Samsung Galaxy S2, así como para las computadoras portátiles Elm/Hana Chromebook.
    • Se han añadido controladores para paneles LCD: ASUS TM5P5 NT35596, Starry KR070PE2T, Leadtek LTK050H3146W, Visionox rm69299, Boe tv105wum-nw0.
    • Se ha añadido soporte para placas ARM y plataformas Renesas «RZ/G1H», Realtek RTD1195, Realtek RTD1395/RTD1619, Rockchips RK3326, AMLogic S905D, S905X3, S922XH, Olimex A20-OLinuXino-LIME-eMMC, Check Point L-50,
      , Beacon i.MX8m-Mini, Qualcomm SDM660/SDM630, Xnano X5 TV Box, Stinger96, Beaglebone-AI.
    • Se agregó soporte para el procesador MIPS Loongson-2K (abreviado Loongson64). Se añadió soporte de virtualización para el CPU Loongson 3 utilizando el hipervisor KVM.
    • Se ha añadido
      soporte para el procesador ruso Baikal-T1 y el sistema en chip basado en él BE-T1000. El procesador Baikal-T1 contiene dos núcleos P5600 MIPS 32 r5 superescalares que operan a una frecuencia de 1.2 GHz. El chip tiene caché L2 (1 MB), controlador de memoria DDR3-1600 ECC, 1 puerto 10Gb Ethernet, 2 puertos 1Gb Ethernet, controlador PCIe Gen.3 x4, 2 puertos SATA 3.0, USB 2.0, GPIO, UART, SPI, I2C. El procesador proporciona soporte de virtualización de hardware, instrucciones SIMD y un acelerador de hardware criptográfico integrado que soporta GOST 28147-89. El chip fue desarrollado utilizando un núcleo de procesador MIPS32 P5600 Warrior con licencia de Imagination Technologies.

Al mismo tiempo, el Fondo Latinoamericano de Software Libre formó
una variante núcleo completamente libre 5.8 — Linux-libre 5.8-gnu, limpiado de elementos de firmware y controladores que contienen componentes o secciones de código no libres, cuya aplicabilidad está restringida por el fabricante. En esta nueva versión se deshabilitó la carga de blobs en los controladores para Atom ISP Video, MediaTek 7663 USB/7915 PCIe, Realtek 8723DE WiFi, Renesas PCI xHCI, HabanaLabs Gaudi, Convertidor de Tasa de Muestreo Asincrónico Mejorado, Amplificador de Altavoz Maxim Integrated MAX98390, Procesador de Audio de Hogar Conectado Microsemi ZL38060, y I2C EEPROM Slave. Se actualizó el código de limpieza de blobs en los controladores y subsistemas de Adreno GPU, HabanaLabs Goya, pantalla táctil x86, vt6656 y btbcm.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster