Versión do núcleo de Linux 5.8

Despois de dous meses de desenvolvemento, Linus Torvalds introducido liberación do núcleo Linux 5.8. Entre os cambios máis notables: un detector de condicións de carreira KCSAN, un mecanismo universal para enviar notificacións ao espazo do usuario, soporte de hardware para o cifrado en liña, mecanismos de seguridade mellorados para ARM64, soporte para o procesador ruso Baikal-T1, a capacidade de montar instancias procfs por separado. , implementación de mecanismos de seguridade en sombra para ARM64 Call Stack e BTI.

O núcleo 5.8 converteuse no maior en canto ao número de cambios de todos os núcleos durante toda a existencia do proxecto. Ademais, os cambios non están relacionados con ningún subsistema, senón que abarcan diferentes partes do núcleo e están asociados principalmente coa revisión e limpeza internas. Os maiores cambios vense nos condutores. A nova versión incluíu 17606 correccións de 2081 desenvolvedores, que afectaron aproximadamente ao 20% de todos os ficheiros do repositorio de código do núcleo. O tamaño do parche é de 65 MB (os cambios afectaron a 16180 ficheiros, engadíronse 1043240 liñas de código, elimináronse 489854 liñas). En comparación, a rama 5.7 tiña 15033 correccións e un tamaño de parche de 39 MB. Aproximadamente o 37% de todos os cambios introducidos en 5.8 están relacionados con controladores de dispositivos, aproximadamente o 16% dos cambios están relacionados coa actualización de código específico de arquitecturas de hardware, o 11% están relacionados coa pila de rede, o 3% están relacionados con sistemas de ficheiros e o 4% están relacionados cos subsistemas do núcleo interno.

O principal innovacións:

  • Virtualización e seguridade
    • Proporciona-se a carga de módulos do núcleo que teñan seccións de código nas que se establecen simultaneamente os bits que permiten a execución e a escritura. O cambio implementouse como parte dun proxecto máis grande para librar o núcleo do uso de páxinas de memoria que permiten a execución e a escritura simultáneas.
    • Agora é posible crear instancias de procfs separadas, permitindo o uso de varios puntos de montaxe de procfs, montados con opcións diferentes, pero que reflicten o mesmo espazo de nomes de identificador de proceso (espazo de nomes pid). Anteriormente, todos os puntos de montaxe procfs só reflectían unha representación interna e calquera cambio nos parámetros de montaxe afectaba a todos os outros puntos de montaxe asociados co mesmo espazo de nomes de ID de proceso. Entre as áreas nas que pode ser demandada a montaxe con diferentes opcións está a implementación de illamento lixeiro para sistemas embebidos coa capacidade de ocultar certos tipos de procesos e nodos de información en procfs.
    • Implementouse o soporte para o mecanismo para a plataforma ARM64
      Pila de chamadas sombra, proporcionado polo compilador Clang para protexer contra a sobrescritura do enderezo de retorno dunha función en caso de desbordamento do búfer de pila. A esencia da protección é gardar o enderezo de retorno nunha pila "sombra" separada despois de transferir o control a unha función e recuperar este enderezo antes de saír da función.

    • Engadiuse soporte de instrucións para a plataforma ARM64 ARMv8.5-BTI (Branch Target Indicator) para protexer a execución de conxuntos de instrucións ás que non se deben ramificar. Impléméntase o bloqueo de transicións a seccións arbitrarias de código para evitar a creación de gadgets en exploits que utilicen técnicas de programación orientadas ao retorno (ROP - Return-Oriented Programming; o atacante non tenta colocar o seu código na memoria, senón que opera en pezas xa existentes). de instrucións de máquina que rematan cunha instrución de control de retorno, a partir da cal se constrúe unha cadea de chamadas para obter a funcionalidade desexada).
    • Engadido soporte de hardware para o cifrado en liña de dispositivos de bloque (Cifrado en liña). Os dispositivos de cifrado Inlinep adoitan estar integrados na unidade, pero localízanse loxicamente entre a memoria do sistema e o disco, cifrando e descifrando E/S de forma transparente baseándose en claves especificadas polo núcleo e nun algoritmo de cifrado.
    • Engadida a opción de liña de comandos do núcleo "initrdmem" para permitirche especificar o enderezo de memoria física do initrd ao colocar a imaxe de arranque inicial na RAM.
    • Engadida unha nova capacidade: CAP_PERFMON para acceder ao subsistema de perf e realizar un seguimento do rendemento. CAP_BPF, que permite determinadas operacións BPF (como cargar programas BPF) que antes requirían dereitos CAP_SYS_ADMIN (os dereitos CAP_SYS_ADMIN agora están divididos nunha combinación de CAP_BPF, CAP_PERFMON e CAP_NET_ADMIN).
    • Engadido un novo dispositivo virtio-mem que che permite conectar e conectar memoria en quente nos sistemas convidados.
    • Implementouse a recuperación das operacións de mapeo en /dev/mem se o controlador do dispositivo usa áreas de memoria superpostas.
    • Engadida protección contra vulnerabilidades CROSSTalk/SRBDS, que permite restaurar os resultados de determinadas instrucións executadas noutro núcleo da CPU.
  • Servizos de memoria e sistema
    • No documento que define as regras para formatar o código, aceptada recomendacións para o uso de terminoloxía inclusiva. Non se recomenda aos desenvolvedores usar as combinacións "mestre/escravo" e "lista negra/lista branca", así como a palabra "escravo" por separado. As recomendacións só se refiren aos novos usos destes termos. As mencións das palabras especificadas xa existentes no núcleo permanecerán intactas. No novo código, permítese o uso dos termos marcados se é necesario para soportar a API e ABI expostas no espazo do usuario, así como ao actualizar o código para admitir hardware ou protocolos existentes cuxas especificacións requiren o uso de determinados termos.
    • Ferramenta de depuración incluída KCSAN (Kernel Concurrency Sanitizer), deseñado para a detección dinámica condicións de carreira dentro do núcleo. O uso de KCSAN é compatible ao construír en GCC e Clang, e require modificacións especiais no momento da compilación para rastrexar o acceso á memoria (utilízanse puntos de interrupción que se activan cando se le ou modifica a memoria). O foco do desenvolvemento de KCSAN foi a prevención de falsos positivos, a escalabilidade e a facilidade de uso.
    • Engadido mecanismo universal entrega de notificacións desde o núcleo ao espazo do usuario. O mecanismo baséase no controlador de canalización estándar e permítelle distribuír de forma eficiente as notificacións do núcleo por canles abertas no espazo do usuario. Os puntos de recepción de notificacións son canalizacións que se abren nun modo especial e permiten que as mensaxes recibidas do núcleo se acumulen nun buffer de anel. A lectura realízase pola función habitual read(). O propietario da canle determina cales son as fontes do núcleo que deben ser supervisadas e pode definir un filtro para ignorar certos tipos de mensaxes e eventos. Dos eventos, actualmente só se admiten operacións con claves, como engadir/eliminar claves e cambiar os seus atributos. Estes eventos están planeados para ser usados ​​en GNOME.
    • Desenvolvemento continuado da funcionalidade "pidfd" para axudar a xestionar situacións de reutilización de PID (pidfd está asociado a un proceso específico e non cambia, mentres que un PID pódese asociar a outro proceso despois de que finalice o proceso actual asociado a ese PID). A nova versión engade soporte para usar pidfd para anexar un proceso aos espazos de nomes (permitindo que se especifique pidfd ao executar a chamada ao sistema setns). Usar pidfd permíteche controlar o anexo dun proceso a varios tipos de espazos de nomes cunha chamada, reducindo significativamente o número de chamadas ao sistema necesarias e implementando o anexo en modo atómico (se falla o anexo a un dos espazos de nomes, os outros non se conectarán) .
    • Engadida unha nova chamada ao sistema faccessat2(), diferente de
      faccessat() un argumento adicional con marcas que cumpren as recomendacións de POSIX (anteriormente estas marcas eran emuladas na biblioteca C, e o novo faccessat2 permite implementalas no núcleo).

    • En Cgroup engadido unha configuración de memoria.swap.high que se pode usar para ralentizar as tarefas que ocupan demasiado espazo de intercambio.
    • Á interface de E/S asíncrona io_uring engadiu soporte para a chamada do sistema tee().
    • Mecanismo engadido "Iterador BPF, deseñado para enviar o contido das estruturas do núcleo ao espazo do usuario.
    • Fornecido a capacidade de usar un búfer de anel para o intercambio de datos entre programas BPF.
    • No mecanismo padata, deseñado para organizar a execución paralela de tarefas no núcleo, engadiu soporte para tarefas multiproceso con balance de carga.
    • No mecanismo pstore, que permite gardar información de depuración sobre a causa do fallo en áreas de memoria que non se perden entre reinicios, engadido backend para gardar información para bloquear dispositivos.
    • Desde a rama do núcleo PREEMPT_RT movido implantación de bloqueos locais.
    • Engadido nova API de asignación de búfer (AF_XDP), destinada a simplificar a escritura de controladores de rede con compatibilidade con XDP (eXpress Data Path).
    • Para a arquitectura RISC-V, implementouse soporte para depurar compoñentes do núcleo mediante KGDB.
    • Antes da versión 4.8, aumentaron os requisitos para a versión de GCC que se pode usar para construír o núcleo. Nun dos próximos lanzamentos está previsto subir o listón a GCC 4.9.
  • Subsistema de disco, E/S e sistemas de ficheiros
    • En Device Mapper engadido novo controlador dm-ebs (emular tamaño de bloque), que se pode usar para emular un tamaño de bloque lóxico máis pequeno (por exemplo, para emular sectores de 512 bytes en discos de tamaño de sector 4K).
    • O sistema de ficheiros F2FS agora admite a compresión mediante o algoritmo LZO-RLE.
    • En dm-crypt engadido soporte para claves cifradas.
    • Btrfs mellorou o manexo das operacións de lectura no modo de E/S directa. Ao montar acelerado comprobando as subseccións eliminadas e os directorios que quedan sen un pai.
    • Engadiuse un parámetro "nodelete" a CIFS, que permite comprobacións normais de permisos no servidor, pero prohibe que o cliente elimine ficheiros ou directorios.
    • Ext4 mellorou o tratamento de erros ENOSPC ao usar multithreading. xattr engadiu soporte para o espazo de nomes gnu.* usado en GNU Hurd.
    • Para Ext4 e XFS, o soporte para operacións DAX está habilitado (acceso directo ao sistema de ficheiros, evitando a caché da páxina sen usar o nivel de dispositivo de bloque) en relación con ficheiros e directorios individuais.
    • Na chamada do sistema statx() bandeira engadida STATX_ATTR_DAX, que cando se especifica, recupera información mediante o motor DAX.
    • EXFAT engadido soporte para a verificación da área de arranque.
    • En FAT mellorado carga proactiva de elementos FS. A proba dunha unidade USB lenta de 2 TB mostrou unha redución do tempo de finalización da proba de 383 a 51 segundos.
  • Subsistema de rede
    • No código para controlar o funcionamento das pontes de rede engadido soporte protocolario MRP (Protocolo de redundancia de medios), que permite tolerancia a fallos mediante o bucle de múltiples conmutadores Ethernet.
    • Ao sistema de control de tráfico (Tc) engadido nova acción “gate”, que permite definir intervalos de tempo para procesar e descartar determinados paquetes.
    • Engadiuse ao núcleo e á utilidade ethtool soporte para probar o cable de rede conectado e autodiagnóstico dos dispositivos de rede.
    • A compatibilidade do algoritmo MPLS (Multiprotocol Label Switching) engadiuse á pila IPv6 para enrutar paquetes mediante a conmutación de etiquetas multiprotocolo (MPLS era compatible anteriormente para IPv4).
    • Engadido soporte para transmitir paquetes IKE (Intercambio de claves de Internet) e IPSec a través de TCP (RFC 8229) para evitar posibles bloqueos UDP.
    • Engadido dispositivo de bloqueo de rede rnbd, que permite organizar o acceso remoto a un dispositivo de bloqueo mediante o transporte RDMA (InfiniBand, RoCE, iWARP) e o protocolo RTRS.
    • Na pila TCP engadido soporte para a compresión de intervalos nas respostas de acuse de recibo selectivo (SACK).
    • Para IPv6 implementado Soporte TCP-LD (RFC 6069, Interrupcións longas da conectividade).
  • Оборудование
    • O controlador i915 DRM para tarxetas de vídeo Intel inclúe soporte para chips Intel Tiger Lake (GEN12) por defecto, para o que implementado a capacidade de usar o sistema SAGV (System Agent Geyserville) para axustar dinámicamente a frecuencia e a tensión dependendo do consumo de enerxía ou dos requisitos de rendemento.
    • O controlador amdgpu engadiu compatibilidade co formato de píxeles FP16 e a capacidade de traballar con búfers cifrados na memoria de vídeo (TMZ, Trusted Memory Zone).
    • Engadiuse compatibilidade con sensores de potencia para procesadores AMD Zen e Zen2, así como sensores de temperatura para AMD Ryzen 4000 Renoir. A compatibilidade para recuperar información de consumo de enerxía a través da interface ofrécese para AMD Zen e Zen2 RAPL (Límite de potencia media en execución).
    • Engadido soporte para o formato modificador NVIDIA ao controlador Nouveau. Para gv100, implementouse a capacidade de usar modos de dixitalización entrelazados. Engadida a definición de vGPU.
    • Engadiuse soporte para as GPU Adreno A405, A640 e A650 ao controlador MSM (Qualcomm).
    • Engadido marco interno para xestionar recursos DRM (Direct Rendering Manager).
    • Engadido soporte para teléfonos intelixentes Xiaomi Redmi Note 7 e Samsung Galaxy S2, así como para portátiles Elm/Hana Chromebook.
    • Controladores engadidos para paneis LCD: ASUS TM5P5 NT35596, Starry KR070PE2T, Leadtek LTK050H3146W, Visionox rm69299, Boe tv105wum-nw0.
    • Engadido soporte para placas e plataformas ARM Renesas "RZ/G1H", Realtek RTD1195, Realtek RTD1395/RTD1619, Rockchips RK3326, AMLogic S905D, S905X3, S922XH, Olimex A20-OLinuXino-LIME, Check Point-eMMC
      , Beacon i.MX8m-Mini, Qualcomm SDM660/SDM630, Xnano X5 TV Box, Stinger96, Beaglebone-AI.

    • Engadido soporte para o procesador MIPS Loongson-2K (abreviado Loongson64). Para a CPU Loongson 3, engadiuse soporte para a virtualización mediante o hipervisor KVM.
    • Engadido
      soporte para o procesador ruso Baikal-T1 e o sistema en chip baseado nel BE-T1000. O procesador Baikal-T1 contén dous núcleos superescalares P5600 MIPS 32 r5 que funcionan a 1.2 GHz. O chip contén caché L2 (1 MB), controlador de memoria DDR3-1600 ECC, 1 porto Ethernet de 10 Gb, 2 portos Ethernet de 1 Gb, controlador PCIe Gen.3 x4, 2 portos SATA 3.0, USB 2.0, GPIO, UART, SPI, I2C. O procesador ofrece soporte de hardware para virtualización, instrucións SIMD e un acelerador criptográfico de hardware integrado que admite GOST 28147-89. O chip desenvólvese usando unha unidade central do procesador MIPS32 P5600 Warrior con licenza de Imagination Technologies.

Ao mesmo tempo, a Fundación Latinoamericana de Software Libre formado
opción núcleo completamente gratuíto 5.8 - Linux-libre 5.8-gnu, eliminado de elementos de firmware e controladores que conteñan compoñentes propietarios ou seccións de código, cuxo alcance está limitado polo fabricante. A nova versión desactiva a carga de blob nos 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, Home Audio Processor Connected38060 e esclavo EEPROM I2C. Código de limpeza de blob actualizado en controladores e subsistemas GPU Adreno, HabanaLabs Goya, pantalla táctil x86, vt6656 e btbcm.

Fonte: opennet.ru

Engadir un comentario