Lançamento do núcleo Linux 5.8

Após dois meses de desenvolvimento, Linus Torvalds apresentou lançamento do núcleo Linux 5.8. Entre as mudanças mais notáveis estão: detector de condições de corrida KCSAN, mecanismo universal de entrega de notificações ao espaço do usuário, suporte a hardware para criptografia inline, mecanismos de proteção expandidos para ARM64, suporte ao processador russo Baikal-T1, possibilidade de montagem separada de instâncias do procfs, implementação para ARM64 dos mecanismos de proteção Shadow Call Stack e BTI.

O núcleo 5.8 se tornou o maior em termos de número de mudanças de todos os núcleos na história do projeto. Essas mudanças não estão associadas a um único subsistema, mas abrangem diferentes partes do núcleo e estão principalmente relacionadas a reestruturações internas e limpeza. A maioria das mudanças é observada nos drivers. A nova versão incorporou 17606 correções de 2081 desenvolvedores, que afetaram cerca de 20% de todos os arquivos no repositório do código do núcleo. O tamanho do patch é de 65 MB (as mudanças afetaram 16180 arquivos, adicionando 1043240 linhas de código e removendo 489854 linhas). Para comparação, na ramificação 5.7, foram feitas 15033 correções, e o tamanho do patch era de 39 MB. Cerca de 37% de todas as mudanças apresentadas no 5.8 estão relacionadas a drivers de dispositivos, aproximadamente 16% das mudanças se referem à atualização de código específico de arquiteturas de hardware, 11% estão ligadas à pilha de rede, 3% às sistemas de arquivos e 4% às subsistemas internos do núcleo.

Principais novidades:

  • Virtualização e segurança
    • Foi implementado um bloqueio para o carregamento de módulos do núcleo que possuem seções de código com bits habilitados para execução e gravação ao mesmo tempo. A mudança foi realizada no âmbito de um projeto maior para livrar o núcleo do uso de páginas de memória que permitem a execução e gravação simultaneamente.
    • Agora é possível criar instâncias separadas do procfs, permitindo usar vários pontos de montagem do procfs, montados com diferentes opções, mas refletindo um único espaço de nomes de identificadores de processos (pid namespace). Anteriormente, todos os pontos de montagem do procfs apenas espelhavam uma única representação interna, e qualquer alteração nos parâmetros de montagem afetava todos os outros pontos de montagem associados ao mesmo espaço de nomes de identificadores de processos. Áreas onde a montagem com diferentes opções pode ser necessária incluem a implementação de isolamento leve para sistemas embarcados, com a possibilidade de ocultar certos tipos de processos e nós informativos no procfs.
    • Para a plataforma ARM64, foi implementado suporte para o mecanismo
      Shadow-Call Stack, fornecido pelo compilador Clang, para proteger contra a sobregravação do endereço de retorno de uma função em caso de estouro de buffer na pilha. A essência da proteção é salvar, após a transferência de controle para a função, o endereço de retorno em uma pilha "sombra" separada e recuperar este endereço antes de sair da função.
    • Para a plataforma ARM64, foi adicionado suporte para as instruções ARMv8.5-BTI (Branch Target Indicator) para proteger a execução de conjuntos de instruções que não devem ser alvo de saltos durante a ramificação. O bloqueio de saltos para locais arbitrários no código foi implementado para evitar a criação de gadgets em exploits que utilizam técnicas de programação orientada a retorno (ROP - Return-Oriented Programming, onde o atacante não tenta colocar seu código na memória, mas opera com partes existentes de instruções de máquina que terminam com uma instrução de retorno de controle, a partir das quais é construída uma cadeia de chamadas para obter a funcionalidade desejada).
    • Foi adicionado suporte a hardware para criptografia inline de dispositivos de bloco (Inline Encryption). Dispositivos de criptografia inline geralmente são integrados ao armazenamento, mas são logicamente posicionados entre a memória do sistema e o disco, realizando a criptografia e descriptografia transparentes de entrada/saída com base nas chaves e algoritmos de criptografia definidos pelo kernel.
    • Adicionado o parâmetro de linha de comando do kernel "initrdmem", que permite especificar o endereço físico de colocação do initrd na memória ao alocar a imagem inicial de inicialização na RAM.
    • Novas capacidades adicionadas: CAP_PERFMON para acesso ao subsistema perf e monitoramento de desempenho. CAP_BPF, permitindo a execução de algumas operações com BPF (por exemplo, carregar programas BPF), que anteriormente exigiam permissões CAP_SYS_ADMIN (agora os direitos CAP_SYS_ADMIN foram divididos em uma combinação de CAP_BPF, CAP_PERFMON e CAP_NET_ADMIN).
    • Adicionado um novo dispositivo virtio-mem, permitindo a adição e remoção quentes de memória para sistemas convidados.
    • Implementada a revogação de operações de mapeamento em /dev/mem, caso o driver do dispositivo utilize áreas de memória sobrepostas.
    • Adicionada proteção contra a vulnerabilidade CROSSTalk/SRBDS, que permite restaurar os resultados da execução de algumas instruções realizadas em outro núcleo da CPU.
  • Memória e serviços do sistema
    • No documento que define as regras de formatação de código, foram aceitas as recomendações para o uso de terminologia inclusiva. Os desenvolvedores são aconselhados a não usar as expressões ‘master/slave’ e ‘blacklist/whitelist’, assim como a palavra ‘slave’ isoladamente. As recomendações se aplicam apenas ao novo uso desses termos. Mencionações existentes no núcleo desses termos permanecerão inalteradas. No novo código, o uso dos termos mencionados é permitido se isso for necessário para a manutenção da API e ABI apresentadas ao espaço do usuário, assim como durante a atualização do código para suportar hardware ou protocolos existentes cujas especificações exigem o uso de termos específicos.
    • Incluído na composição está a ferramenta de depuração KCSAN (Kernel Concurrency Sanitizer), destinada à detecção dinâmica de condições de corrida dentro do núcleo. O uso do KCSAN é suportado quando compilado com GCC e Clang, e requer adição de modificações especiais durante a compilação para rastreamento de acesso à memória (são aplicados pontos de interrupção ativados durante a leitura ou modificação de memória). O foco principal no desenvolvimento do KCSAN foi evitar falsos positivos, escalabilidade e facilidade de uso.
    • Adicionado um mecanismo universal entrega de notificações do núcleo para o espaço do usuário. O mecanismo é baseado em um driver de pipe padrão e permite a distribuição eficiente de notificações do núcleo por canais abertos no espaço do usuário. Os pontos de recebimento das notificações são pipes abertos em um modo especial, permitindo acumular mensagens do núcleo em um buffer circular. A leitura é realizada pela função read(). O proprietário do canal determina quais fontes no núcleo devem ser monitoradas e pode definir um filtro para ignorar mensagens e eventos de tipos específicos. Atualmente, apenas operações relacionadas a chaves, como adição/remover chaves e alteração de seus atributos, são suportadas. Esses eventos estão previstos para uso no GNOME.
    • Continuação do desenvolvimento da funcionalidade ‘pidfd’, que ajuda a lidar com situações de reutilização de PID (pidfd está vinculado a um processo específico e não muda, enquanto o PID pode ser associado a outro processo após a conclusão do processo atual associado a esse PID). Na nova versão, foi adicionado suporte ao uso do pidfd para anexar processos a namespaces (é permitido especificar pidfd ao realizar a chamada do sistema setns). O uso de pidfd permite gerenciar a anexação de um processo a vários tipos de namespaces com uma única chamada, reduzindo significativamente o número de chamadas do sistema necessárias e implementando a anexação de forma atômica (se ocorrer uma falha ao anexar a um dos namespaces, os outros não serão conectados).
    • Adicionada uma nova chamada do sistema faccessat2(), que se distingue de
      faccessat() por um argumento adicional com flags que correspondem às recomendações POSIX (anteriormente, essas flags eram simuladas na biblioteca C, enquanto o novo faccessat2 permite sua implementação no núcleo).
    • No Cgroup foi adicionada a configuração memory.swap.high, que pode ser usada para desacelerar tarefas que ocupam muito espaço na partição de troca.
    • Na interface de entrada/saída assíncrona io_uring foi adicionada a suporte para a chamada do sistema tee().
    • Adicionado o mecanismo “Iterador BPF, destinado a exportar o conteúdo das estruturas do núcleo para o espaço do usuário.
    • Foi fornecida a capacidade de usar um buffer circular para troca de dados entre programas BPF.
    • No mecanismo padata, destinado à organização da execução paralela de tarefas no núcleo, foi adicionada a suporte a tarefas multithread com balanceamento de carga.
    • No mecanismo pstore, que permite salvar informações de depuração sobre a causa da falha na área de memória, não perdidas entre reinicializações, o sinalizador -k para integração com backend para salvar informações em dispositivos de bloco.
    • Da ramificação do núcleo PREEMPT_RT transferido implementação de bloqueios locais.
    • Adicionado nova API de alocação de buffers (AF_XDP), destinada a simplificar a escrita de drivers de rede com suporte a XDP (eXpress Data Path).
    • Para a arquitetura RISC-V, foi implementado o suporte para depuração de componentes do núcleo usando KGDB.
    • Antes do lançamento 4.8, os requisitos para a versão do GCC que pode ser usada para compilar o núcleo foram aumentados. Em uma das próximas versões, pretende-se aumentar o limite para o GCC 4.9.
  • Subsistema de disco, entrada/saída e sistemas de arquivos
    • No Device Mapper o sinalizador -k para integração com novo manipulador dm-ebs (emular tamanho de bloco), que pode ser aplicado para emular um menor tamanho de bloco lógico (por exemplo, para emular setores de 512 bytes em discos com tamanho de setor de 4K).
    • No sistema de arquivos F2FS, o suporte à compressão utilizando o algoritmo LZO-RLE foi adicionado.
    • No dm-crypt foi adicionada suporte a chaves criptografadas.
    • No Btrfs, foram aprimoradas as operações de leitura em modo de E/S direta. Ao montar acelerado verificação de subvolumes remotos e diretórios que permaneceram sem pai.
    • No CIFS, foi adicionado o parâmetro 'nodelete', que permite verificações normais de permissões no servidor, mas proíbe o cliente de deletar arquivos ou diretórios.
    • No Ext4, a gestão de erros foi aprimorada ENOSPC ao usar multithreading. No xattr, foi adicionado suporte ao namespace gnu.*, usado no GNU Hurd.
    • Para Ext4 e XFS, foi ativado o suporte para operações DAX (acesso direto ao FS ignorando o cache de páginas sem usar a camada de dispositivos de bloco) vinculado a arquivos e diretórios específicos.
    • Na chamada de sistema statx() um sinalizador foi adicionado STATX_ATTR_DAX, ao especificar o qual as informações são extraídas usando o mecanismo DAX.
    • No EXFAT foi adicionada suporte para verificação da área de inicialização.
    • No FAT foi aprimorada a pré-carregamento de elementos do FS. Testes com um lento drive USB de 2TB mostraram uma redução no tempo de execução do teste de 383 para 51 segundos.
  • Subsistema de Rede
    • No código de gerenciamento de funcionamento de pontes de rede foi adicionada suporte ao protocolo MRP (Protocolo de Redundância de Mídia), que fornece resiliência, conectando vários switches Ethernet.
    • No sistema de gerenciamento de tráfego (Tc) adicionado nova ação "gate", permitindo definir intervalos de tempo para processamento e descarte de pacotes específicos.
    • O núcleo e a ferramenta ethtool agora incluem suporte para funções de teste de cabos de rede conectados e autod diagnostico de dispositivos de rede.
    • A pilha IPv6 agora possui suporte para o algoritmo MPLS (Multiprotocol Label Switching) para roteamento de pacotes utilizando comutação de rótulos (o suporte para MPLS IPv4 já era oferecido anteriormente).
    • Foi adicionado suporte para a transmissão de pacotes IKE (Internet Key Exchange) e IPSec sobre TCP (RFC 8229) para contornar possíveis bloqueios de UDP.
    • Adicionado dispositivo de bloco de rede rnbd, que permite o acesso remoto a um dispositivo de bloco usando transporte RDMA (InfiniBand, RoCE, iWARP) e o protocolo RTRS.
    • Na pilha TCP foi adicionada suporte à compressão de intervalos nas respostas de reconhecimento seletivo (selective acknowledgment, SACK).
    • Para IPv6 são implementadas suporte TCP-LD (RFC 6069, Long Connectivity Disruptions).
  • Hardware
    • No driver DRM i915 para placas gráficas Intel, o suporte para chips Intel Tiger Lake (GEN12) agora está habilitado por padrão, para os quais também são implementadas a possibilidade de usar o sistema SAGV (System Agent Geyserville) para ajuste dinâmico de frequência e tensão, dependendo das necessidades de consumo de energia ou desempenho.
    • No driver amdgpu, foi adicionado suporte para o formato de pixel FP16 e implementada a possibilidade de trabalhar com buffers criptografados na memória de vídeo (TMZ, Trusted Memory Zone).
    • Foi adicionado suporte para sensores de consumo de energia dos processadores AMD Zen e Zen2, assim como sensores de temperatura dos AMD Ryzen 4000 Renoir. Para AMD Zen e Zen2, o suporte à extração de informações de consumo de energia através da interface RAPL (Running Average Power Limit).
    • No driver Nouveau, foi adicionado suporte para o formato de modificadores da NVIDIA. Para gv100, a possibilidade de usar modos de varredura entrelaçada foi implementada. Foi adicionada a definição de vGPU.
    • No driver MSM (Qualcomm), foi adicionado suporte para GPU Adreno A405, A640 e A650.
    • Adicionado framework interno para gerenciamento de recursos DRM (Direct Rendering Manager).
    • Adicionado suporte para smartphones Xiaomi Redmi Note 7 e Samsung Galaxy S2, assim como para laptops Elm/Hana Chromebook.
    • Adicionados drivers para painéis LCD: ASUS TM5P5 NT35596, Starry KR070PE2T, Leadtek LTK050H3146W, Visionox rm69299, Boe tv105wum-nw0.
    • Suporte adicionado para placas ARM e 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.
    • Adicionada suporte ao processador MIPS Loongson-2K (Loongson64 encurtado). Para o CPU Loongson 3, adicionada suporte à virtualização usando o hipervisor KVM.
    • Adicionada
      suporte ao processador russo Baikal-T1 e ao sistema em chip baseado nele BE-T1000. O processador Baikal-T1 contém dois núcleos superescalares P5600 MIPS 32 r5, operando a uma frequência de 1,2 GHz. O chip possui cache L2 (1 MB), controlador de memória DDR3-1600 ECC, 1 porta 10Gb Ethernet, 2 portas 1Gb Ethernet, 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 de hardware integrado para operações criptográficas, compatível com GOST 28147-89. O chip foi desenvolvido utilizando um núcleo de processador MIPS32 P5600 Warrior licenciado da Imagination Technologies.

Ao mesmo tempo, a Fundação Latino-Americana de Software Livre formou
uma variante do núcleo 5.8 completamente livre — Linux-libre 5.8-gnu, livre de elementos de firmwares e drivers que contêm componentes ou trechos de código não livres, cuja aplicação é limitada pelo fabricante. Na nova versão, o carregamento de blobs foi desativado em drivers para Atom ISP Video, MediaTek 7663 USB/7915 PCIe, Realtek 8723DE WiFi, Renesas PCI xHCI, HabanaLabs Gaudi, Conversor de Taxa de Amostragem Assíncrona Aprimorado, Maxim Integrated MAX98390 Amplificador de Fala, Microsemi ZL38060 Processador de Áudio Conectado para Casa, e I2C EEPROM Slave. O código de limpeza de blobs nos drivers e subsistemas Adreno GPU, HabanaLabs Goya, tela touch x86, vt6656 e btbcm foi atualizado.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster