Kernel Linux versão 5.11

Após dois meses de desenvolvimento, Linus Torvalds apresentou o lançamento do kernel Linux 5.11. Entre as mudanças mais notáveis: suporte para enclaves Intel SGX, um novo mecanismo para interceptar chamadas de sistema, um barramento auxiliar virtual, proibição de montagem de módulos sem MODULE_LICENSE(), um modo de filtragem rápida para chamadas de sistema em seccomp, encerramento do suporte para o arquitetura ia64, transferência da tecnologia WiMAX para o ramo “staging”, capacidade de encapsular SCTP em UDP.

A nova versão inclui 15480 correções de 1991 desenvolvedores, o tamanho do patch é de 72 MB (as alterações afetaram 12090 arquivos, 868025 linhas de código foram adicionadas, 261456 linhas foram excluídas). Cerca de 46% de todas as alterações introduzidas no 5.11 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, 13% estão relacionadas à pilha de rede, 3% estão relacionadas a sistemas de arquivos e 4% estão relacionados aos subsistemas internos do kernel.

Principais inovações:

  • Subsistema de disco, E/S e sistemas de arquivos
    • Várias opções de montagem foram adicionadas ao Btrfs para uso ao restaurar dados de um sistema de arquivos danificado: “rescue=ignorebadroots” para montagem, apesar dos danos a algumas árvores raiz (extensão, uuid, data reloc, dispositivo, csum, espaço livre), “ Rescue=ignoredatacsums” para desabilitar a verificação de soma de verificação de dados e “rescue=all” para habilitar simultaneamente os modos ‘ignorebadroots’, ‘ignoredatacsums’ e ‘nologreplay’. A opção de montagem "inode_cache", que estava obsoleta anteriormente, foi descontinuada. O código foi preparado para implementar suporte a blocos com metadados e dados menores que o tamanho de uma página (PAGE_SIZE), bem como suporte ao modo de alocação de espaço zoneado. As solicitações sem buffer (Direct IO) foram movidas para a infraestrutura iomap. O desempenho de uma série de operações foi otimizado; em alguns casos, a aceleração pode chegar a dezenas de por cento.
    • O XFS implementa o sinalizador “needsrepair”, que sinaliza a necessidade de reparo. Quando esse sinalizador é definido, o sistema de arquivos não pode ser montado até que o sinalizador seja redefinido pelo utilitário xfs_repair.
    • Ext4 oferece apenas correções de bugs e otimizações, bem como limpeza de código.
    • A reexportação de sistemas de arquivos montados via NFS é permitida (ou seja, uma partição montada via NFS agora pode ser exportada via NFS e usada como cache intermediário).
    • A chamada de sistema close_range(), que permite que um processo feche todo um intervalo de descritores de arquivos abertos de uma só vez, adicionou uma opção CLOSE_RANGE_CLOEXEC para fechar descritores no modo close-on-exec.
    • O sistema de arquivos F2FS adiciona novas chamadas ioctl() para permitir o controle do espaço do usuário sobre quais arquivos são armazenados em formato compactado. Adicionada opção de montagem "compress_mode=" para escolher se deseja colocar o manipulador de compactação no lado do kernel ou no espaço do usuário.
    • Forneceu a capacidade de montar Overlayfs por processos sem privilégios usando um namespace de usuário separado. Para verificar a conformidade com a implementação do modelo de segurança, foi realizada uma auditoria completa do código. Overlayfs também adiciona a capacidade de executar cópias de imagens do sistema de arquivos, desativando opcionalmente a verificação de UUID.
    • O sistema de arquivos Ceph adicionou suporte ao protocolo msgr2.1, que permite o uso do algoritmo AES-GCM na transmissão de dados de forma criptografada.
    • O módulo dm-multipath implementa a capacidade de levar em consideração a afinidade da CPU (“afinidade IO”) ao escolher a rota para solicitações de E/S.
  • Serviços de memória e sistema
    • Foi adicionado um novo mecanismo de interceptação de chamadas de sistema, baseado em prctl(), que permite gerar exceções do espaço do usuário ao acessar uma chamada de sistema específica e emular sua execução. Essa funcionalidade é necessária no Wine e no Proton para emular chamadas de sistema do Windows, o que é necessário para garantir a compatibilidade com jogos e programas que executam chamadas de sistema diretamente, ignorando a API do Windows (por exemplo, para proteção contra uso não autorizado).
    • A chamada de sistema userfaultfd(), projetada para lidar com falhas de página (acesso a páginas de memória não alocadas) no espaço do usuário, agora tem a capacidade de desabilitar o tratamento de exceções que ocorrem no nível do kernel para dificultar a exploração de certas vulnerabilidades.
    • O subsistema BPF adicionou suporte para armazenamento local de tarefas, que fornece ligação de dados a um manipulador BPF específico.
    • A contabilização do consumo de memória pelos programas BPF foi completamente redesenhada - um controlador cgroup foi proposto em vez do memlock rlimit para gerenciar o uso de memória em objetos BPF.
    • O mecanismo BTF (BPF Type Format), que fornece informações de verificação de tipo no pseudocódigo BPF, fornece suporte para módulos do kernel.
    • Adicionado suporte para chamadas de sistema shutdown(), renameat2() e unlinkat() à interface de E/S assíncrona io_uring. Ao chamar io_uring_enter(), a capacidade de especificar um tempo limite foi adicionada (você pode verificar o suporte para o argumento para especificar um tempo limite usando o sinalizador IORING_FEAT_EXT_ARG).
    • A arquitetura ia64 usada nos processadores Intel Itanium foi movida para a categoria órfã, o que significa que os testes foram encerrados. A Hewlett Packard Enterprise parou de aceitar pedidos de novos equipamentos Itanium, e a Intel fez o mesmo no ano passado.
    • O suporte para sistemas baseados na arquitetura MicroBlaze que não incluem uma unidade de gerenciamento de memória (MMU) foi descontinuado. Há muito tempo que tais sistemas não eram vistos na vida cotidiana.
    • Para a arquitetura MIPS, foi adicionado suporte para testes de cobertura de código usando o utilitário gcov.
    • Adicionado suporte ao barramento auxiliar virtual para interface com dispositivos multifuncionais que combinam funcionalidades que requerem diferentes drivers (por exemplo, placas de rede com suporte Ethernet e RDMA). O barramento pode ser usado para atribuir um driver primário e secundário a um dispositivo, em situações onde o uso do subsistema MFD (Dispositivos Multifuncionais) é problemático.
    • Para a arquitetura RISC-V, foi adicionado suporte para o sistema de alocação de memória CMA (Contiguous Memory Allocator), que é otimizado para alocar grandes áreas de memória contíguas usando técnicas de movimentação de páginas de memória. Para RISC-V, também são implementadas ferramentas para limitar o acesso a /dev/mem e levar em consideração o tempo de processamento de interrupção.
    • Para sistemas ARM de 32 bits, foi adicionado suporte para a ferramenta de depuração KASan (Kernel address sanitizer), que ajuda a identificar erros ao trabalhar com memória. Para ARM de 64 bits, a implementação KASan foi convertida para usar tags MTE (MemTag).
    • Adicionada chamada de sistema epoll_pwait2() para permitir tempos limite com precisão de nanossegundos (a chamada epoll_wait manipula milissegundos).
    • O sistema de compilação agora exibe um erro ao tentar construir módulos de kernel carregáveis ​​nos quais a licença do código não está definida usando a macro MODULE_LICENSE(). De agora em diante, usar a macro EXPORT_SYMBOL() para funções estáticas também causará um erro de construção.
    • Adicionado suporte para mapeamento de objetos GEM da memória utilizada para E/S, o que possibilitou agilizar o trabalho com o framebuffer em algumas arquiteturas.
    • Kconfig abandonou o suporte para Qt4 (enquanto mantém o suporte para Qt5, GTK e Ncurses).
  • Virtualização e Segurança
    • O suporte para um modo de resposta rápida foi adicionado à chamada de sistema seccomp(), que permite determinar rapidamente se uma determinada chamada de sistema é permitida ou proibida com base no bitmap de ação constante anexado ao processo, que não requer execução um manipulador BPF.
    • Componentes de kernel integrados para criação e gerenciamento de enclaves baseados na tecnologia Intel SGX (Software Guard eXtensions), que permite que aplicativos executem código em áreas criptografadas isoladas da memória, às quais o resto do sistema tem acesso limitado.
    • Como parte de uma iniciativa para limitar o acesso do espaço do usuário ao MSR (registro específico do modelo), gravação no registro MSR_IA32_ENERGY_PERF_BIAS, que permite alterar o modo de eficiência energética do processador (“normal”, “desempenho”, “economia de energia”) , é proíbido.
    • A capacidade de desabilitar a migração de tarefas de alta prioridade entre CPUs foi movida da ramificação kernel-rt para sistemas em tempo real.
    • Para sistemas ARM64, foi adicionada a capacidade de usar tags MTE (MemTag, Memory Tagging Extension) para endereços de memória do manipulador de sinal. O uso do MTE é habilitado especificando a opção SA_EXPOSE_TAGBITS no sigaction() e permite verificar o uso correto de ponteiros para bloquear a exploração de vulnerabilidades causadas por acesso a blocos de memória já liberados, buffer overflows, acessos antes da inicialização e uso fora do contexto atual.
    • Adicionado o parâmetro "DM_VERITY_VERIFY_ROOTHASH_SIG_SECONDARY_KEYRING", que permite ao subsistema dm-verity verificar assinaturas hash de certificados colocados no chaveiro secundário. Na prática, a configuração permite verificar não apenas os certificados embutidos no kernel, mas também os certificados carregados durante a operação, o que possibilita atualizar os certificados sem atualizar o kernel inteiro.
    • O Linux em modo de usuário adicionou suporte para o modo suspenso para inativo, que permite congelar o ambiente e usar o sinal SIGUSR1 para sair do modo de suspensão.
    • O mecanismo virtio-mem, que permite conectar e desconectar memória a quente para máquinas virtuais, adicionou suporte para Big Block Mode (BBM), que possibilita transferir ou levar memória em blocos maiores que o tamanho da memória do kernel bloco, que é necessário para otimizar VFIO no QEMU.
    • O suporte para a cifra CHACHA20-POLY1305 foi adicionado à implementação do kernel do TLS.
  • subsistema de rede
    • Para 802.1Q (VLAN), foi implementado um mecanismo de gerenciamento de falhas de conexão (CFM, Connectivity Fault Management), que permite identificar, verificar e isolar falhas em redes com pontes virtuais (Virtual Bridged Networks). Por exemplo, o CFM pode ser usado para isolar problemas em redes que abrangem várias organizações independentes, cujos funcionários só têm acesso aos seus próprios equipamentos.
    • Adicionado suporte para encapsular pacotes do protocolo SCTP em pacotes UDP (RFC 6951), que permite usar SCTP em redes com tradutores de endereços mais antigos que não suportam diretamente SCTP, bem como implementar SCTP em sistemas que não fornecem acesso direto ao IP camada.
    • A implementação da tecnologia WiMAX foi movida para teste e está prevista para ser removida no futuro se não houver usuários que necessitem de WiMAX. O WiMAX não é mais usado em redes públicas e no kernel o único driver com o qual o WiMAX pode ser usado é o driver Intel 2400m desatualizado. O suporte WiMAX foi descontinuado no configurador de rede NetworkManager em 2015. Atualmente, o WiMax é quase totalmente substituído por tecnologias como LTE, HSPA+ e Wi-Fi 802.11n.
    • Trabalho foi feito para otimizar o desempenho do processamento do tráfego TCP de entrada no modo zerocopy, ou seja, sem cópia adicional para novos buffers. Para tráfego de tamanho médio, cobrindo dezenas ou centenas de quilobytes de dados, usar zerocopy em vez de recvmsg() é visivelmente mais eficaz. Por exemplo, as mudanças implementadas permitiram aumentar em 32-60% a eficiência do processamento do tráfego estilo RPC com mensagens de 70 KB ao usar zerocopy.
    • Adicionadas novas chamadas ioctl() para criar pontes de rede abrangendo vários links PPP. A capacidade proposta permite que os quadros se movam de um canal para outro, por exemplo, de uma sessão PPPoE para uma sessão PPPoL2TP.
    • Integração no núcleo do MPTCP (MultiPath TCP), uma extensão do protocolo TCP para organizar o funcionamento de uma conexão TCP com a entrega de pacotes simultaneamente ao longo de diversas rotas através de diferentes interfaces de rede associadas a diferentes endereços IP. A nova versão introduz suporte para a opção ADD_ADDR para anunciar endereços IP disponíveis que podem ser conectados ao adicionar novos fluxos a uma conexão MPTCP existente.
    • Adicionada a capacidade de configurar ações quando o orçamento de sondagem de conexão for excedido (busy-polling). O modo SO_BUSY_POLL disponível anteriormente significava mudar para softirq quando o orçamento se esgotasse. Para aplicações que precisam continuar utilizando polling, é proposta uma nova opção SO_PREFER_BUSY_POLL.
    • O IPv6 implementa suporte para os modos SRv6 End.DT4 e End.DT6, usados ​​para criar VPNs IPv4 L3 multiusuário e dispositivos VRF (Roteamento e encaminhamento virtual).
    • O Netfilter unificou a implementação de expressões de conjunto, o que tornou possível especificar múltiplas expressões para cada elemento das listas de conjuntos.
    • APIs foram adicionadas à pilha sem fio 802.11 para configurar limites de potência SAR, bem como parâmetros AE PWE e HE MCS. O driver Intel iwlwifi adicionou suporte para a faixa de 6 GHz (Ultra High Band). O driver Qualcomm Ath11k adicionou suporte para a tecnologia FILS (Fast Initial Link Setup, padronizada como IEEE 802.11ai), que permite eliminar atrasos de roaming durante a migração de um ponto de acesso para outro.
  • Оборудование
    • O driver amdgpu fornece suporte para APU AMD "Green Sardine" (Ryzen 5000) e GPU "Dimgrey Cavefish" (Navi 2), bem como suporte inicial para APU AMD Van Gogh com núcleo Zen 2 e GPU RDNA 2 (Navi 2). Adicionado suporte para novos identificadores Renoir APU (baseados em CPU Zen 2 e GPU Vega).
    • O driver i915 para placas de vídeo Intel suporta a tecnologia IS (escala inteira) com a implementação de um filtro para aumentar a escala levando em consideração o estado dos pixels vizinhos (interpolação do vizinho mais próximo) para determinar a cor dos pixels ausentes. O suporte para placas Intel DG1 discretas foi expandido. Foi implementado suporte para a tecnologia “Big Joiner”, que está presente desde os chips Ice Lake / Gen11 e permite o uso de um transcodificador para processar dois fluxos, por exemplo, para saída para uma tela de 8K através de um DisplayPort. Adicionado um modo para alternar de forma assíncrona entre dois buffers na memória de vídeo (inversão assíncrona).
    • O driver nouveau adicionou suporte inicial para GPUs NVIDIA baseadas na microarquitetura Ampere (GA100, GeForce RTX 30xx), até agora limitada a ferramentas para controlar modos de vídeo.
    • Adicionado suporte para o protocolo 3WIRE usado em painéis LCD. Adicionado suporte para painéis novatek nt36672a, TDO tl070wsh30, Innolux N125HCE-GN1 e ABT Y030XX067A 3.0. Separadamente, podemos destacar o suporte ao painel dos smartphones OnePlus 6 e 6T, que possibilitou organizar o carregamento de um kernel não modificado nos dispositivos.
    • Adicionado suporte para o primeiro controlador host USB4 discreto da Intel, Maple Ridge.
    • Adicionado suporte para Allwinner H6 I2S, Analog Devices ADAU1372, Intel Alderlake-S, GMediatek MT8192, NXP i.MX HDMI e XCVR, codecs de áudio Realtek RT715 e Qualcomm SM8250.
    • Adicionado suporte para placas, dispositivos e plataformas ARM: Galaxy Note 10.1, Microsoft Lumia 950 XL, NanoPi R1, FriendlyArm ZeroPi, Elimo Initium SBC, Broadcom BCM4908, Mediatek MT8192/MT6779/MT8167, MStar Infinity2M, Nuvoton NPCM730, Marvell Armada 382, ​​​​Mikrotik baseado em Marvell Prestera 98DX3236, servidores com Nuvoton NPCM750 BMC, Kontron i.MX8M Mini, Espressobin Ultra, Chromebook “Trogdor”, Kobol Helios64, Engicam PX30.Core.
    • Suporte integrado para o console de jogos Ouya baseado em NVIDIA Tegra 3.

Ao mesmo tempo, a Fundação Latino-Americana de Software Livre formou uma versão do kernel 5.11 totalmente gratuito - Linux-libre 5.11-gnu, livre de elementos de firmware e drivers contendo componentes ou seções de código não livres, cujo escopo é limitado pelo fabricante. A nova versão limpa drivers para qat_4xxx (cripto), lt9611uxcm (dsi/hdmi bridge), ccs/smia++ (sensor), ath11k_pci, transceptor de áudio nxp e controlador mhi pci. Código de limpeza de blob atualizado em drivers e subsistemas amdgpu, btqca, btrtl, btusb, i915 csr. Novos blobs desativados em m3 rproc, idt82p33 ptp clock e qualcomm arm64.

Fonte: opennet.ru

Adicionar um comentário