Lanzamiento del núcleo de Linux 5.8

Después de dos meses de desarrollo Linus Torvalds presentado lanzamiento del núcleo Linux 5.8. Entre los cambios más notables: un detector de condición de carrera KCSAN, un mecanismo universal para enviar notificaciones al espacio del usuario, soporte de hardware para cifrado en línea, mecanismos de seguridad mejorados para ARM64, soporte para el procesador ruso Baikal-T1, la capacidad de montar instancias de procfs por separado , implementación de mecanismos de seguridad Shadow para ARM64 Call Stack y BTI.

El kernel 5.8 se convirtió en el más grande en términos de número de cambios de todos los kernels durante toda la existencia del proyecto. Además, los cambios no están relacionados con ningún subsistema en particular, sino que cubren diferentes partes del kernel y están asociados principalmente con el retrabajo y la limpieza internos. Los mayores cambios se ven en los conductores. La nueva versión incluyó 17606 correcciones de 2081 desarrolladores, que afectaron aproximadamente al 20% de todos los archivos en el repositorio de código del kernel. El tamaño del parche es de 65 MB (los cambios afectaron a 16180 archivos, se agregaron 1043240 líneas de código y se eliminaron 489854 líneas). En comparación, la rama 5.7 tuvo 15033 correcciones y un tamaño de parche de 39 MB. Aproximadamente el 37% de todos los cambios introducidos en 5.8 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 11% están relacionados con la pila de red, el 3% están relacionados con sistemas de archivos y el 4% están relacionados con los subsistemas internos del kernel.

El principal innovaciones:

  • Virtualización y seguridad
    • Se proporciona la carga de módulos del kernel que tienen secciones con código en las que se configuran simultáneamente los bits que permiten la ejecución y escritura. El cambio se implementó como parte de un proyecto más amplio para eliminar el núcleo del uso de páginas de memoria que permiten la ejecución y escritura simultáneas.
    • Ahora es posible crear instancias de procfs separadas, lo que permite el uso de múltiples puntos de montaje de procfs, montados con diferentes opciones, pero que reflejan el mismo espacio de nombres de identificador de proceso (espacio de nombres pid). Anteriormente, todos los puntos de montaje de procfs solo reflejaban una representación interna y cualquier cambio en los parámetros de montaje afectaba a todos los demás puntos de montaje asociados con el mismo espacio de nombres de ID de proceso. Entre las áreas en las que puede haber demanda de montaje con diferentes opciones se encuentra la implementación de aislamiento liviano para sistemas integrados con la capacidad de ocultar ciertos tipos de procesos y nodos de información en procfs.
    • Se ha implementado soporte para el mecanismo para la plataforma ARM64.
      Pila de llamadas de sombra, proporcionado por el compilador Clang para proteger contra la sobrescritura de la dirección de retorno de una función en caso de desbordamiento del búfer de pila. La esencia de la protección es guardar la dirección de retorno en una pila "sombra" separada después de transferir el control a una función y recuperar esta dirección antes de salir de la función.

    • Se ha agregado soporte de instrucciones para la plataforma ARM64. ARMv8.5-BTI (Indicador de destino de bifurcación) para proteger la ejecución de conjuntos de instrucciones a las que no se debe bifurcar. El bloqueo de transiciones a secciones arbitrarias de código se implementa para evitar la creación de dispositivos en exploits que utilizan técnicas de programación orientada al retorno (ROP - Programación orientada al retorno; el atacante no intenta colocar su código en la memoria, sino que opera en piezas ya existentes de instrucciones de máquina que finalizan con una instrucción de control de retorno, a partir de la cual se construye una cadena de llamadas para obtener la funcionalidad deseada).
    • Se agregó soporte de hardware para el cifrado en línea de dispositivos de bloque (Cifrado en línea). Los dispositivos de cifrado Inlinep generalmente están integrados en la unidad, pero están ubicados lógicamente entre la memoria del sistema y el disco, cifrando y descifrando E/S de forma transparente según claves especificadas por el kernel y un algoritmo de cifrado.
    • Se agregó la opción de línea de comando del kernel "initrdmem" para permitirle especificar la dirección de memoria física del initrd al colocar la imagen de arranque inicial en la RAM.
    • Se agregó una nueva capacidad: CAP_PERFMON para acceder al subsistema de rendimiento y realizar monitoreo del rendimiento. CAP_BPF, que permite ciertas operaciones BPF (como cargar programas BPF) que anteriormente requerían derechos CAP_SYS_ADMIN (los derechos CAP_SYS_ADMIN ahora se dividen en una combinación de CAP_BPF, CAP_PERFMON y CAP_NET_ADMIN).
    • Adicional un nuevo dispositivo virtio-mem que le permite conectar y conectar memoria en caliente a sistemas invitados.
    • Se implementó la recuperación de operaciones de mapeo en /dev/mem si el controlador del dispositivo usa áreas de memoria superpuestas.
    • Protección adicional contra vulnerabilidades CROSSTalk/SRBDS, que le permite restaurar los resultados de ciertas instrucciones ejecutadas en otro núcleo de CPU.
  • Servicios de memoria y sistema.
    • En el documento que define las reglas para formatear el código, aceptado recomendaciones para el uso de terminología inclusiva. No se recomienda a los desarrolladores utilizar las combinaciones "maestro/esclavo" y "lista negra/lista blanca", así como la palabra "esclavo" por separado. Las recomendaciones se refieren únicamente a nuevos usos de estos términos. Las menciones de las palabras especificadas que ya existen en el núcleo permanecerán intactas. En el código nuevo, se permite el uso de los términos marcados si es necesario para soportar la API y ABI expuestas en el espacio del usuario, así como cuando se actualiza el código para soportar hardware o protocolos existentes cuyas especificaciones requieren el uso de ciertos términos.
    • Herramienta de depuración incluida KCSAN (Kernel Concurrency Sanitizer), diseñado para detección dinámica condiciones de carrera dentro del núcleo. El uso de KCSAN se admite al compilar en GCC y Clang, y requiere modificaciones especiales en el momento de la compilación para rastrear el acceso a la memoria (se utilizan puntos de interrupción que se activan cuando se lee o modifica la memoria). El desarrollo de KCSAN se centró en la prevención de falsos positivos, la escalabilidad y la facilidad de uso.
    • Добавлен mecanismo universal entregar notificaciones desde el kernel al espacio del usuario. El mecanismo se basa en el controlador de canalización estándar y le permite distribuir eficientemente notificaciones del kernel a través de canales abiertos en el espacio del usuario. Los puntos de recepción de notificaciones son canales que se abren en un modo especial y permiten que los mensajes recibidos del kernel se acumulen en un búfer circular. La lectura se realiza mediante la función read() habitual. El propietario del canal determina qué fuentes del kernel deben monitorearse y puede definir un filtro para ignorar ciertos tipos de mensajes y eventos. De los eventos, actualmente solo se admiten operaciones con claves, como agregar/eliminar claves y cambiar sus atributos. Está previsto que estos eventos se utilicen en GNOME.
    • Desarrollo continuo de la funcionalidad 'pidfd' para ayudar a manejar situaciones de reutilización de PID (pidfd está asociado con un proceso específico y no cambia, mientras que un PID puede asociarse con otro proceso después de que termina el proceso actual asociado con ese PID). La nueva versión agrega soporte para usar pidfd para adjuntar un proceso a espacios de nombres (lo que permite especificar pidfd al ejecutar la llamada al sistema setns). El uso de pidfd le permite controlar la vinculación de un proceso a varios tipos de espacios de nombres con una sola llamada, lo que reduce significativamente la cantidad de llamadas necesarias al sistema e implementa la vinculación en modo atómico (si la vinculación a uno de los espacios de nombres falla, los demás no se conectarán). .
    • Se agregó una nueva llamada al sistema faccessat2(), diferente de
      acceso directo() un argumento adicional con banderas que cumplen con las recomendaciones POSIX (anteriormente estas banderas se emularon en la biblioteca C y el nuevo faccessat2 permite implementarlas en el kernel).

    • En grupo C agregado una configuración de memoria.intercambio.alta que se puede utilizar para ralentizar las tareas que ocupan demasiado espacio de intercambio.
    • A la interfaz de E/S asíncrona io_durante Se agregó soporte para la llamada al sistema tee().
    • Mecanismo añadido "iterador BPF, diseñado para enviar el contenido de las estructuras del kernel al espacio del usuario.
    • Proporcionado por la capacidad 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 kernel, agregó soporte para tareas multiproceso con equilibrio de carga.
    • En el mecanismo pstore, que le permite guardar información de depuración sobre la causa del fallo en áreas de memoria que no se pierden entre reinicios, adicional backend para guardar información para bloquear dispositivos.
    • Desde la rama del kernel PREEMPT_RT movido Implementación de cerraduras locales.
    • Добавлен Nueva API de asignación de búfer (AF_XDP), destinada a simplificar la escritura de controladores de red con soporte XDP (eXpress Data Path).
    • Para la arquitectura RISC-V, se implementó soporte para depurar componentes del kernel usando KGDB.
    • Antes de la versión 4.8, se aumentaron los requisitos para la versión de GCC que se puede utilizar para construir el kernel. En una de las próximas versiones está previsto subir el listón a GCC 4.9.
  • Subsistema de disco, E/S y sistemas de archivos
    • En el asignador de dispositivos adicional Nuevo controlador dm-ebs (emular tamaño de bloque), que se puede utilizar para emular un tamaño de bloque lógico más pequeño (por ejemplo, para emular sectores de 512 bytes en discos de tamaño de sector 4K).
    • El sistema de archivos F2FS ahora admite la compresión mediante el algoritmo LZO-RLE.
    • En dm-cripta agregado soporte para claves cifradas.
    • Btrfs ha mejorado el manejo de las operaciones de lectura en modo de E/S directa. Al montar acelerado comprobar subsecciones eliminadas y directorios que quedaron sin padre.
    • Se ha agregado un parámetro "nodelete" a CIFS, que permite verificaciones de permisos normales en el servidor, pero prohíbe al cliente eliminar archivos o directorios.
    • Ext4 ha mejorado el manejo de errores ENOSPC cuando se utiliza subprocesos múltiples. xattr ha agregado soporte para el espacio de nombres gnu.* usado en GNU Hurd.
    • Para Ext4 y XFS, se habilita la compatibilidad con operaciones DAX (acceso directo al sistema de archivos, sin pasar por el caché de páginas sin utilizar el nivel de dispositivo de bloque) en relación con archivos y directorios individuales.
    • En llamada al sistema estadística() bandera agregada STATX_ATTR_DAX, que cuando se especifica, recupera información utilizando el motor DAX.
    • EXFAT agregado soporte para la verificación del área de arranque.
    • En grasa mejorado carga proactiva de elementos FS. La prueba de una unidad USB lenta de 2 TB mostró una reducción en el tiempo de finalización de la prueba de 383 a 51 segundos.
  • Subsistema de red
    • En el código para controlar el funcionamiento de puentes de red. agregado soporte de protocolo MRP (Protocolo de redundancia de medios), que permite la tolerancia a fallos mediante la conexión en bucle de varios conmutadores Ethernet.
    • Al sistema de control de tráfico (Tc) adicional Nueva acción “gate”, que permite definir intervalos de tiempo para procesar y descartar ciertos paquetes.
    • Se ha agregado al kernel y a la utilidad ethtool soporte para probar el cable de red conectado y el autodiagnóstico de dispositivos de red.
    • Se ha agregado compatibilidad con el algoritmo MPLS (Conmutación de etiquetas multiprotocolo) a la pila IPv6 para enrutar paquetes mediante conmutación de etiquetas multiprotocolo (anteriormente, MPLS era compatible con IPv4).
    • Se agregó soporte para transmitir paquetes IKE (Internet Key Exchange) e IPSec a través de TCP (RFC 8229) para evitar un posible bloqueo de UDP.
    • Adicional dispositivo de bloque de red rnbd, que le permite organizar el acceso remoto a un dispositivo de bloque utilizando el transporte RDMA (InfiniBand, RoCE, iWARP) y el protocolo RTRS.
    • En la pila TCP agregado soporte para compresión de rango en respuestas de reconocimiento selectivo (SACK).
    • Para IPv6 implementado Soporte TCP-LD (RFC 6069, Interrupciones prolongadas de la conectividad).
  • Equipo
    • El controlador DRM i915 para tarjetas de video Intel incluye soporte para chips Intel Tiger Lake (GEN12) de forma predeterminada, para los cuales implementado la capacidad de utilizar el sistema SAGV (System Agent Geyserville) para ajustar dinámicamente la frecuencia y el voltaje según el consumo de energía o los requisitos de rendimiento.
    • El controlador amdgpu agregó soporte para el formato de píxeles FP16 y la capacidad de trabajar con búferes cifrados en la memoria de video (TMZ, Trusted Memory Zone).
    • Se agregó soporte para sensores de potencia para procesadores AMD Zen y Zen2, así como sensores de temperatura para AMD Ryzen 4000 Renoir. Se proporciona soporte para recuperar información sobre el consumo de energía a través de la interfaz para AMD Zen y Zen2. RAPL (Límite de potencia promedio en funcionamiento).
    • Se agregó soporte para el formato modificador NVIDIA al controlador Nouveau. Para gv100, se implementó la capacidad de utilizar modos de escaneo entrelazados. Se agregó detección de vGPU.
    • Se agregó compatibilidad con las GPU Adreno A405, A640 y A650 al controlador MSM (Qualcomm).
    • Добавлен Marco interno para la gestión de recursos DRM (Direct Rendering Manager).
    • Se agregó soporte para los teléfonos inteligentes Xiaomi Redmi Note 7 y Samsung Galaxy S2, así como para las computadoras portátiles Elm/Hana Chromebook.
    • Controladores agregados para paneles LCD: ASUS TM5P5 NT35596, Starry KR070PE2T, Leadtek LTK050H3146W, Visionox rm69299, Boe tv105wum-nw0.
    • Se agregó soporte para placas y plataformas ARM 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). Para CPU Loongson 3, se agregó soporte para virtualización mediante el hipervisor KVM.
    • Añadido por
      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 superescalares P5600 MIPS 32 r5 que funcionan a 1.2 GHz. El chip contiene caché L2 (1 MB), controlador de memoria DDR3-1600 ECC, 1 puerto Ethernet de 10 Gb, 2 puertos Ethernet de 1 Gb, controlador PCIe Gen.3 x4, 2 puertos SATA 3.0, USB 2.0, GPIO, UART, SPI, I2C. El procesador proporciona soporte de hardware para virtualización, instrucciones SIMD y un acelerador criptográfico de hardware integrado que admite GOST 28147-89. El chip se desarrolla utilizando una unidad central de procesador MIPS32 P5600 Warrior con licencia de Imagination Technologies.

Al mismo tiempo, la Fundación Latinoamericana de Software Libre formado
вариант kernel 5.8 completamente gratis - linux-libre 5.8-gnu, libre de elementos de firmware y controladores que contengan componentes o secciones de código no libres, cuyo alcance está limitado por el fabricante. La nueva versión deshabilita la carga de blobs en los controladores para Atom ISP Video, MediaTek 7663 USB/7915 PCIe, Realtek 8723DE WiFi, Renesas PCI xHCI, HabanaLabs Gaudi, Enhanced Asynchronous Sample Rate Converter, Maxim Integrated MAX98390 Speaker Aimplifier, Microsemi ZL38060 Connected Home Audio Processor, y esclavo I2C EEPROM. Código de limpieza de blobs actualizado en Adreno GPU, HabanaLabs Goya, pantalla táctil x86, controladores y subsistemas vt6656 y btbcm.

Fuente: opennet.ru

Añadir un comentario