Kernel Linux versão 5.8

Após dois meses de desenvolvimento, Linus Torvalds introduzido lançamento do kernel Linux 5.8. Entre as mudanças mais notáveis: um detector de condição de corrida KCSAN, um mecanismo universal para entregar notificações ao espaço do usuário, suporte de hardware para criptografia inline, mecanismos de segurança aprimorados para ARM64, suporte para o processador russo Baikal-T1, a capacidade de montar instâncias procfs separadamente , implementação de mecanismos de segurança Shadow para ARM64 Call Stack e BTI.

O Kernel 5.8 se tornou o maior em termos de número de alterações de todos os kernels durante toda a existência do projeto. Além disso, as mudanças não estão relacionadas a nenhum subsistema, mas abrangem diferentes partes do kernel e estão associadas principalmente ao retrabalho e limpeza interna. As maiores mudanças são vistas nos drivers. A nova versão incluiu 17606 correções de 2081 desenvolvedores, que afetaram aproximadamente 20% de todos os arquivos no repositório de código do kernel. O tamanho do patch é de 65 MB (as alterações afetaram 16180 arquivos, 1043240 linhas de código foram adicionadas, 489854 linhas foram excluídas). Em comparação, a versão 5.7 tinha 15033 correções e um tamanho de patch de 39 MB. Cerca de 37% de todas as alterações introduzidas na versão 5.8 estão relacionadas a drivers de dispositivos, aproximadamente 16% das alterações estão relacionadas à atualização de código específico para arquiteturas de hardware, 11% estão relacionadas à pilha de rede, 3% estão relacionadas a sistemas de arquivos e 4% estão relacionados aos subsistemas internos do kernel.

O principal inovações:

  • Virtualização e Segurança
    • É fornecido o carregamento de módulos do kernel que possuem seções com código nas quais são definidos simultaneamente os bits que permitem a execução e a escrita. A mudança foi implementada como parte de um projeto maior para livrar o kernel do uso de páginas de memória que permitem execução e gravação simultâneas.
    • Agora é possível criar instâncias separadas do procfs, permitindo o uso de vários pontos de montagem do procfs, montados com diferentes opções, mas refletindo o mesmo namespace do identificador de processo (pid namespace). Anteriormente, todos os pontos de montagem procfs espelhavam apenas uma representação interna e qualquer alteração nos parâmetros de montagem afetava todos os outros pontos de montagem associados ao mesmo namespace de ID de processo. Entre as áreas em que a montagem com diferentes opções pode ser exigida está a implementação de isolamento leve para sistemas embarcados com a capacidade de ocultar certos tipos de processos e nós de informação em procfs.
    • O suporte para o mecanismo foi implementado para a plataforma ARM64
      Pilha de Chamadas Sombrias, fornecido pelo compilador Clang para proteger contra a substituição do endereço de retorno de uma função no caso de um estouro de buffer de pilha. A essência da proteção é salvar o endereço de retorno em uma pilha “sombra” separada após transferir o controle para uma função e recuperar esse endereço antes de sair da função.

    • Foi adicionado suporte de instrução para a plataforma ARM64 ARMv8.5-BTI (Branch Target Indicator) para proteger a execução de conjuntos de instruções para os quais não devem ser ramificados. O bloqueio de transições para seções arbitrárias de código é implementado para evitar a criação de gadgets em explorações que usam técnicas de programação orientada a retorno (ROP - Return-Oriented Programming; o invasor não tenta colocar seu código na memória, mas opera em peças já existentes de instruções de máquina que terminam com uma instrução de controle de retorno, a partir da qual é construída uma cadeia de chamadas para obter a funcionalidade desejada).
    • Adicionado suporte de hardware para criptografia em linha de dispositivos de bloco (Criptografia embutida). Os dispositivos de criptografia Inlinep são normalmente integrados à unidade, mas estão logicamente localizados entre a memória do sistema e o disco, criptografando e descriptografando E/S de forma transparente com base em chaves especificadas pelo kernel e em um algoritmo de criptografia.
    • Adicionada a opção de linha de comando do kernel "initrdmem" para permitir que você especifique o endereço de memória física do initrd ao colocar a imagem de inicialização inicial na RAM.
    • Adicionado novo recurso: CAP_PERFMON para acessar o subsistema perf e realizar monitoramento de desempenho. CAP_BPF, que permite certas operações BPF (como carregar programas BPF) que anteriormente exigiam direitos CAP_SYS_ADMIN (os direitos CAP_SYS_ADMIN agora são divididos em uma combinação de CAP_BPF, CAP_PERFMON e CAP_NET_ADMIN).
    • Добавлено um novo dispositivo virtio-mem que permite hot-plug e hot-plug de memória em sistemas convidados.
    • Implementado recall de operações de mapeamento em /dev/mem se o driver de dispositivo usar áreas de memória sobrepostas.
    • Adicionada proteção contra vulnerabilidades CROSSTalk/SRBDS, que permite restaurar os resultados de certas instruções executadas em outro núcleo da CPU.
  • Serviços de memória e sistema
    • No documento que define as regras de formatação do código, aceitaram recomendações para o uso de terminologia inclusiva. Os desenvolvedores não são recomendados a usar as combinações ‘master/slave’ e ‘blacklist/whitelist’, bem como a palavra ‘slave’ separadamente. As recomendações referem-se apenas a novas utilizações destes termos. As menções às palavras especificadas já existentes no núcleo permanecerão intactas. No novo código, o uso dos termos marcados é permitido se necessário para suportar a API e ABI expostas no espaço do usuário, bem como ao atualizar o código para suportar hardware ou protocolos existentes cujas especificações exigem o uso de determinados termos.
    • Ferramenta de depuração incluída KCSAN (Kernel Concurrency Sanitizer), projetado para detecção dinâmica condições da corrida dentro do núcleo. O uso de KCSAN é suportado ao construir em GCC e Clang e requer modificações especiais em tempo de compilação para rastrear o acesso à memória (são usados ​​​​pontos de interrupção que são acionados quando a memória é lida ou modificada). O foco do desenvolvimento do KCSAN foi a prevenção de falsos positivos, escalabilidade e facilidade de uso.
    • Adicionado mecanismo universal entrega de notificações do kernel para o espaço do usuário. O mecanismo é baseado no driver de pipe padrão e permite distribuir com eficiência notificações do kernel pelos canais abertos no espaço do usuário. Os pontos de recebimento de notificação são canais abertos em um modo especial e permitem que as mensagens recebidas do kernel sejam acumuladas em um buffer de anel. A leitura é realizada pela função read() usual. O proprietário do canal determina quais fontes no kernel precisam ser monitoradas e pode definir um filtro para ignorar certos tipos de mensagens e eventos. Dos eventos, atualmente apenas são suportadas operações com chaves, como adicionar/remover chaves e alterar seus atributos. Esses eventos estão planejados para serem usados ​​no GNOME.
    • Desenvolvimento contínuo da funcionalidade 'pidfd' para ajudar a lidar com situações de reutilização de PID (pidfd está associado a um processo específico e não muda, enquanto um PID pode ser associado a outro processo após o término do processo atual associado a esse PID). A nova versão adiciona suporte para usar pidfd para anexar um processo a namespaces (permitindo que pidfd seja especificado ao executar a chamada de sistema setns). O uso do pidfd permite controlar a anexação de um processo a vários tipos de namespaces com uma chamada, reduzindo significativamente o número de chamadas de sistema necessárias e implementando a anexação no modo atômico (se a anexação a um dos namespaces falhar, os outros não se conectarão) .
    • Adicionada uma nova chamada de sistema faccessat2(), diferente de
      acessarat() um argumento adicional com sinalizadores que atendem às recomendações POSIX (anteriormente esses sinalizadores eram emulados na biblioteca C, e o novo faccessat2 permite que sejam implementados no kernel).

    • No grupo C adicionado uma configuração memory.swap.high que pode ser usada para desacelerar tarefas que ocupam muito espaço de troca.
    • Para a interface de E/S assíncrona io_uring adicionado suporte para chamada de sistema tee().
    • Mecanismo adicionado "Iterador BPF, projetado para enviar o conteúdo das estruturas do kernel para o espaço do usuário.
    • Fornecido por a capacidade de usar um buffer de anel para troca de dados entre programas BPF.
    • No mecanismo padado, projetado para organizar a execução paralela de tarefas no kernel, adicionou suporte para tarefas multithread com balanceamento de carga.
    • No mecanismo pstore, que permite salvar informações de depuração sobre a causa da falha em áreas de memória que não são perdidas entre as reinicializações, adicionado back-end para salvar informações em dispositivos de bloqueio.
    • Da ramificação do kernel PREEMPT_RT mudou-se implementação de bloqueios locais.
    • Adicionado nova API de alocação de buffer (AF_XDP), destinada a simplificar a escrita de drivers de rede com suporte XDP (eXpress Data Path).
    • Para a arquitetura RISC-V, foi implementado suporte para depuração de componentes do kernel usando KGDB.
    • Antes da versão 4.8, os requisitos para a versão do GCC que pode ser usada para construir o kernel foram aumentados. Em um dos próximos lançamentos está planejado elevar a fasquia para o GCC 4.9.
  • Subsistema de disco, E/S e sistemas de arquivos
    • No mapeador de dispositivos adicionado novo manipulador dm-ebs (emular tamanho de bloco), que pode ser usado para emular um tamanho de bloco lógico menor (por exemplo, para emular setores de 512 bytes em discos de tamanho de setor 4K).
    • O sistema de arquivos F2FS agora oferece suporte à compactação usando o algoritmo LZO-RLE.
    • Em dm-crypt adicionado suporte para chaves criptografadas.
    • O Btrfs melhorou o tratamento de operações de leitura no modo de E/S direta. Ao montar acelerado verificando subseções excluídas e diretórios deixados sem pai.
    • Um parâmetro “nodelete” foi adicionado ao CIFS, permitindo verificações normais de permissão no servidor, mas proibindo o cliente de excluir arquivos ou diretórios.
    • Ext4 melhorou o tratamento de erros ENOSPC ao usar multithreading. xattr adicionou suporte para o namespace gnu.* usado no GNU Hurd.
    • Para Ext4 e XFS, o suporte para operações DAX está habilitado (acesso direto ao sistema de arquivos, ignorando o cache da página sem usar o nível do dispositivo de bloco) em relação a arquivos e diretórios individuais.
    • Na chamada do sistema status() bandeira adicionada STATX_ATTR_DAX, que quando especificado, recupera informações usando o mecanismo DAX.
    • EXFAT adicionado suporte para verificação da área de inicialização.
    • Em gordura melhorou carregamento proativo de elementos FS. Testar uma unidade USB lenta de 2 TB mostrou uma redução no tempo de conclusão do teste de 383 para 51 segundos.
  • subsistema de rede
    • No código para controlar a operação de pontes de rede adicionado suporte de protocolo MRP (Protocolo de Redundância de Mídia), que permite tolerância a falhas através do loop de vários switches Ethernet.
    • Para sistema de controle de tráfego (Tc) adicionado nova ação “gate”, que permite definir intervalos de tempo para processamento e descarte de determinados pacotes.
    • Suporte para teste de cabo de rede conectado e autodiagnóstico de dispositivos de rede foi adicionado ao kernel e ao utilitário ethtool.
    • O suporte para o algoritmo MPLS (Multiprotocol Label Switching) foi adicionado à pilha IPv6 para roteamento de pacotes usando comutação de rótulo multiprotocolo (MPLS era anteriormente suportado para IPv4).
    • Adicionado suporte para transmissão de pacotes IKE (Internet Key Exchange) e IPSec sobre TCP (RFC 8229) para ignorar um possível bloqueio de UDP.
    • Добавлено dispositivo de bloco de rede rnbd, que permite organizar o acesso remoto a um dispositivo de bloco usando o transporte RDMA (InfiniBand, RoCE, iWARP) e o protocolo RTRS.
    • Na pilha TCP adicionado suporte para compactação de intervalo em respostas de reconhecimento seletivo (SACK).
    • Para IPv6 implementado Suporte TCP-LD (RFC 6069, longas interrupções de conectividade).
  • Оборудование
    • O driver DRM i915 para placas de vídeo Intel inclui suporte para chips Intel Tiger Lake (GEN12) por padrão, para os quais implementado a capacidade de usar o sistema SAGV (System Agent Geyserville) para ajustar dinamicamente a frequência e a tensão dependendo do consumo de energia ou dos requisitos de desempenho.
    • O driver amdgpu adicionou suporte para o formato de pixel FP16 e a capacidade de trabalhar com buffers criptografados na memória de vídeo (TMZ, Trusted Memory Zone).
    • Adicionado suporte para sensores de potência para processadores AMD Zen e Zen2, bem como sensores de temperatura para AMD Ryzen 4000 Renoir. Suporte para recuperação de informações de consumo de energia por meio da interface é fornecido para AMD Zen e Zen2 RAPL (Limite de potência média de execução).
    • Adicionado suporte para o formato modificador NVIDIA ao driver Nouveau. Para gv100, foi implementada a capacidade de usar modos de digitalização entrelaçados. Adicionada definição de vGPU.
    • Adicionado suporte para GPUs Adreno A405, A640 e A650 ao driver MSM (Qualcomm).
    • Adicionado estrutura interna para gerenciamento de recursos DRM (Direct Rendering Manager).
    • Adicionado suporte para smartphones Xiaomi Redmi Note 7 e Samsung Galaxy S2, bem como laptops Elm/Hana Chromebook.
    • Drivers adicionados para painéis LCD: ASUS TM5P5 NT35596, Starry KR070PE2T, Leadtek LTK050H3146W, Visionox rm69299, Boe tv105wum-nw0.
    • Adicionado suporte para placas e 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, caixa de TV Xnano X5, Stinger96, Beaglebone-AI.

    • Adicionado suporte para processador MIPS Loongson-2K (abreviado Loongson64). Para CPU Loongson 3, foi adicionado suporte para virtualização usando o hipervisor KVM.
    • Adicionado por
      suporte para o processador russo Baikal-T1 e o sistema em chip baseado nele BE-T1000. O processador Baikal-T1 contém dois núcleos superescalares P5600 MIPS 32 r5 operando a 1.2 GHz. O chip contém cache L2 (1 MB), controlador de memória DDR3-1600 ECC, 1 porta Ethernet de 10 Gb, 2 portas Ethernet de 1 Gb, controlador PCIe Gen.3 x4, 2 portas SATA 3.0, USB 2.0, GPIO, UART, SPI, I2C. O processador fornece suporte de hardware para virtualização, instruções SIMD e um acelerador criptográfico de hardware integrado que suporta GOST 28147-89. O chip é desenvolvido usando uma unidade central do processador MIPS32 P5600 Warrior licenciada pela Imagination Technologies.

Ao mesmo tempo, a Fundação Latino-Americana para o Software Livre formado
opção kernel 5.8 totalmente gratuito - Linux-libre 5.8-gnu, livre de elementos de firmware e driver contendo componentes ou seções de código não livres, cujo escopo é limitado pelo fabricante. A nova versão desabilita o carregamento de blob em drivers 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, e I2C EEPROM Escravo. Código de limpeza de blob atualizado na GPU Adreno, HabanaLabs Goya, tela sensível ao toque x86, drivers e subsistemas vt6656 e btbcm.

Fonte: opennet.ru

Adicionar um comentário