Lançamento do kernel Linux 5.11

Após dois meses de desenvolvimento, Linus Torvalds apresentou o lançamento do núcleo Linux 5.11. Entre as mudanças mais notáveis estão: suporte a enclaves Intel SGX, um novo mecanismo de interceptação de chamadas de sistema, um barramento auxiliar virtual, proibição de compilação de módulos sem MODULE_LICENSE(), modo de filtragem rápida de chamadas de sistema no seccomp, descontinuação do suporte à arquitetura ia64, transferência da tecnologia WiMAX para o ramo 'staging' e a possibilidade de encapsulamento de SCTP em UDP.

A nova versão inclui 15.480 correções de 1.991 desenvolvedores, o tamanho do patch é de 72 MB (as alterações afetaram 12.090 arquivos, 868.025 linhas de código foram adicionadas e 261.456 linhas foram removidas). Aproximadamente 46% de todas as mudanças apresentadas no 5.11 estão relacionadas a drivers de dispositivos, cerca de 16% dizem respeito à atualização de código específico de arquitetura de hardware, 13% está relacionado à pilha de rede, 3% às sistemas de arquivos e 4% aos subsistemas internos do núcleo.

Principais novidades:

  • Subsistema de disco, entrada/saída e sistemas de arquivos
    • No Btrfs, foram adicionadas várias opções de montagem para uso na recuperação de dados de sistemas de arquivos danificados: 'rescue=ignorebadroots' para montar apesar dos danos em algumas árvores-raiz (extent, uuid, relocação de dados, dispositivo, csum, espaço livre), 'rescue=ignoredatacsums' para desativar a verificação de somas de verificação para dados e 'rescue=all' para ativar simultaneamente os modos 'ignorebadroots', 'ignoredatacsums' e 'nologreplay'. O suporte à opção de montagem 'inode_cache', que havia sido considerada obsoleta, foi descontinuado. O código foi preparado para implementar suporte a blocos com metadados e dados menores que uma página (PAGE_SIZE), assim como suporte ao modo de alocação zonificada. As solicitações NBUffered (Direct IO) foram transferidas para a infraestrutura iomap. O desempenho de várias operações foi otimizado, em alguns casos o aumento pode atingir dezenas de porcento.
    • No XFS, foi implementada a flag 'needsrepair', que sinaliza a necessidade de recuperação. Ao definir essa flag, o sistema de arquivos não pode ser montado até que a flag seja redefinida pela ferramenta xfs_repair.
    • No Ext4, apenas correções de bugs e otimizações foram propostas, além de uma limpeza de código.
    • O reexportação de sistemas de arquivos montados sobre NFS foi permitido (ou seja, uma partição montada via NFS agora pode ser reexportada via NFS e usada como um cache intermediário).
    • Na chamada de sistema close_range(), que permite que um processo feche um intervalo inteiro de descritores de arquivos abertos de uma só vez, foi adicionada a opção CLOSE_RANGE_CLOEXEC para fechar descritores no modo close-on-exec.
    • Na estrutura de arquivos F2FS, foram adicionadas novas chamadas ioctl(), permitindo que o espaço do usuário gerencie quais arquivos são salvos de forma compactada. A opção de montagem «compress_mode=» foi adicionada para escolher o local do manipulador de compressão, seja no lado do núcleo ou no espaço do usuário.
    • Foi possibilitada a montagem do Overlayfs por processos não privilegiados, utilizando um espaço separado de identificadores de usuários (user namespace). Para verificar a conformidade com o modelo de segurança, foi realizada uma auditoria completa do código. O Overlayfs também ganhou a capacidade de ser executado utilizando cópias de imagens de sistema de arquivos, através da opção de desativar a verificação de UUID.
    • O sistema de arquivos Ceph agora suporta o protocolo msgr2.1, permitindo a aplicação do algoritmo AES-GCM para transmissão de dados de forma criptografada.
    • No módulo dm-multipath, foi implementada a possibilidade de considerar a afinidade de IO em relação à CPU na escolha da rota para solicitações de entrada/saída.
  • Memória e serviços do sistema
    • Foi adicionado um novo mecanismo de interceptação de chamadas de sistema, baseado em prctl(), que permite gerar exceções a partir do espaço do usuário ao acessar uma chamada de sistema específica e emular sua execução. Essa funcionalidade é requisitada no Wine e Proton para emulação de chamadas de sistema do Windows, o que é necessário para garantir compatibilidade com jogos e programas que executam diretamente chamadas de sistema, evitando o uso não autorizado.
    • Na chamada de sistema userfaultfd(), destinada ao tratamento de page faults (acesso a páginas de memória não alocadas) no espaço do usuário, agora é possível desativar o tratamento de exceções que ocorrem no nível do núcleo, dificultando a exploração de algumas vulnerabilidades.
    • Na subsistema BPF, foi adicionada a suporte a armazenamento de dados local à tarefa (task-local storage), que proporciona a vinculação de dados a um manipulador BPF específico.
    • O gerenciamento do consumo de memória pelos programas BPF foi completamente reformulado — em vez do memlock rlimit, um controlador cgroup foi proposto para gerenciar o uso de memória em objetos BPF.
    • No mecanismo BTF (BPF Type Format), que fornece informações para verificação de tipos no pseudocódigo BPF, foi implementado suporte para módulos do kernel.
    • O interface de entrada/saída assíncrona io_uring agora suporta chamadas de sistema shutdown(), renameat2() e unlinkat(). Ao chamar io_uring_enter(), foi adicionada a opção de especificar um tempo limite (é possível verificar o suporte ao argumento para especificar o tempo limite usando a flag IORING_FEAT_EXT_ARG).
    • A arquitetura ia64, utilizada em processadores Intel Itanium, foi classificada como 'orfã', o que implica a interrupção dos testes. A Hewlett Packard Enterprise interrompeu a aceitação de pedidos para novo hardware Itanium, enquanto a Intel já havia feito isso no ano passado.
    • O suporte a sistemas baseados na arquitetura MicroBlaze, sem um bloco de gerenciamento de memória (MMU), foi encerrado. Esses sistemas há muito não são encontrados no cotidiano.
    • Para a arquitetura MIPS, foi adicionado suporte para teste de cobertura de código (coverage testing) através da ferramenta gcov.
    • Foi adicionado suporte para o barramento virtual auxiliar para interagir com dispositivos multifuncionais que combinam funcionalidades que exigem drivers diferentes (por exemplo, placas de rede com suporte a Ethernet e RDMA). O barramento pode ser usado para atribuir drivers primário e secundário ao dispositivo, em situações onde o uso do subsistema MFD (Multi-Function Devices) é problemático.
    • Para a arquitetura RISC-V, foi adicionado suporte ao sistema de alocação de memória CMA (Contiguous Memory Allocator), que é otimizado para alocar grandes áreas contínuas de memória utilizando a técnica de movimentação de páginas de memória. Para RISC-V, também foram implementados recursos de restrição de acesso ao /dev/mem e contabilização do tempo de processamento de interrupções.
    • Para sistemas ARM de 32 bits, foi adicionado suporte à ferramenta de depuração KASan (Kernel Address Sanitizer), que garante a detecção de erros ao trabalhar com memória. Para ARM de 64 bits, a implementação do KASan foi adaptada para utilizar tags MTE (MemTag).
    • Foi adicionado o syscall epoll_pwait2(), que permite o uso de tempos limite com precisão em nanossegundos (a chamada epoll_wait manipula em milissegundos).
    • No sistema de compilação, é gerada uma mensagem de erro ao tentar compilar módulos do kernel carregados nos quais a licença do código não está definida usando o macro MODULE_LICENSE(). Além disso, o uso do macro EXPORT_SYMBOL() para funções estáticas também causará erro durante a compilação.
    • Suporte foi adicionado para mapeamento de objetos GEM da memória utilizada para entrada/saída, acelerando o trabalho com o framebuffer em algumas arquiteturas.
    • O suporte ao Qt4 foi descontinuado no Kconfig (o suporte ao Qt5, GTK e Ncurses foi mantido).
  • Virtualização e segurança
    • O sistema de chamadas seccomp() agora inclui suporte para um modo de resposta rápida, que permite determinar de forma muito rápida se uma chamada de sistema é permitida ou proibida com base em uma tabela de permissões (bitmap de ação constante) anexada ao processo, sem requerer a execução de um manipulador BPF.
    • Foram integrados componentes do kernel para criação e gerenciamento de enclaves baseados na tecnologia Intel SGX (Software Guard eXtensions), permitindo que aplicativos executem código em áreas de memória criptografadas e isoladas, com acesso da restante do sistema limitado.
    • Como parte da iniciativa para restringir o acesso do espaço do usuário aos registradores MSR (model-specific register), a gravação no registrador MSR_IA32_ENERGY_PERF_BIAS foi proibida, impedindo a alteração do modo de eficiência energética do processador (‘normal’, ‘performance’, ‘powersave’).
    • Da ramificação kernel-rt para sistemas de tempo real, foi transferida a capacidade de desativar a migração de tarefas de alta prioridade entre CPUs.
    • Para sistemas ARM64, foi adicionada a capacidade de aplicar tags MTE (MemTag, Memory Tagging Extension) para endereços de memória dos manipuladores de sinais. O uso do MTE é ativado especificando a opção SA_EXPOSE_TAGBITS em sigaction() e permite organizar a verificação da correção do uso de ponteiros para bloquear a exploração de vulnerabilidades causadas pelo acesso a blocos de memória já liberados, estouros de buffer, acessos antes da inicialização e uso fora do contexto atual.
    • Foi adicionado o parâmetro 'DM_VERITY_VERIFY_ROOTHASH_SIG_SECONDARY_KEYRING', permitindo que o subsistema dm-verity verifique as assinaturas de hash dos certificados armazenados no keyring secundário. Na prática, essa configuração permite a verificação não apenas dos certificados embutidos no kernel, mas também dos certificados carregados durante a operação, possibilitando a atualização dos certificados sem a necessidade de atualizar todo o kernel.
    • O User-mode Linux ganhou suporte ao modo suspend-to-idle, permitindo congelar o ambiente e utilizar o sinal SIGUSR1 para sair do modo de espera.
    • No mecanismo virtio-mem, que permite a conexão e desconexão de memória em tempo real para máquinas virtuais, foi adicionado suporte ao modo de bloco grande (BBM, Big Block Mode), possibilitando a transferência ou retirada de memória em blocos que superam o tamanho do bloco de memória do núcleo, necessário para otimização do VFIO no QEMU.
    • Na implementação de TLS em nível de núcleo, foi adicionado suporte ao cipher CHACHA20-POLY1305.
  • Subsistema de Rede
    • Para 802.1Q (VLAN), foi implementado o mecanismo de gerenciamento de falhas de conectividade (CFM, Connectivity Fault Management), permitindo a detecção, verificação e isolamento de falhas em redes com pontes virtuais (Virtual Bridged Networks). Por exemplo, o CFM pode ser usado para localizar problemas em redes que abrangem várias organizações independentes, cujos funcionários têm acesso apenas ao seu próprio equipamento.
    • Adicionado suporte para encapsulamento de pacotes do protocolo SCTP em pacotes UDP (RFC 6951), permitindo o uso de SCTP em redes com tradutores de endereços antigos que não suportam SCTP diretamente, além de implementar SCTP em sistemas que não fornecem acesso direto ao nível IP.
    • A implementação da tecnologia WiMAX foi movida para staging e está agendada para remoção no futuro, a menos que haja usuários que necessitem do WiMAX. O WiMAX já não é utilizado em redes públicas e, no núcleo, o único driver que pode ser usado com WiMAX é o driver obsoleto Intel 2400m. No configurador de rede NetworkManager, o suporte ao WiMAX foi interrompido em 2015. Atualmente, o WiMAX foi praticamente totalmente substituído por tecnologias como LTE, HSPA+ e Wi-Fi 802.11n.
    • Trabalhos foram realizados para otimizar o desempenho no processamento de tráfego TCP de entrada no modo zerocopy, ou seja, sem cópias adicionais em novos buffers. Para tráfego de tamanho médio, abrangendo dezenas ou várias centenas de kilobytes de dados, a aplicação do zerocopy em vez de recvmsg() é significativamente mais eficiente. Por exemplo, as mudanças implementadas aumentaram a eficiência do processamento de tráfego estilo RPC com mensagens de 32 KB utilizando zerocopy em 60-70%.
    • Adicionados novos chamados ioctl() para criar pontes de rede que abrangem vários canais PPP. A funcionalidade proposta permite que os quadros se movam de um canal para outro, como de PPPoE para uma sessão PPPoL2TP.
    • Continuada a 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 entrega de pacotes simultaneamente por vários caminhos através de diferentes interfaces de rede, ligadas a diferentes endereços IP. A nova versão implementou o suporte à opção ADD_ADDR para anunciar os endereços IP que podem ser conectados ao adicionar novos fluxos a uma conexão existente do MPTCP.
    • Adicionada a possibilidade de configurar ações em caso de ultrapassagem do orçamento de polling de conexões (busy-polling). O modo SO_BUSY_POLL anteriormente disponível implicava a troca para softirq ao esgotar o orçamento. Para aplicativos que precisam continuar usando polling, foi proposta uma nova opção SO_PREFER_BUSY_POLL.
    • No IPv6, foi implementado o suporte aos modos SRv6 End.DT4 e End.DT6, utilizados para criar IPv4 L3 multipontos VPN e dispositivos VRF (Virtual Routing and Forwarding).
    • No Netfilter, foi unificada a implementação de expressões set, permitindo especificar várias expressões para cada elemento das listas set.
    • No stack sem fio 802.11, foram adicionadas APIs para configurar restrições de potência SAR, bem como parâmetros AE PWE e HE MCS. No driver Intel iwlwifi, foi adicionado suporte para a faixa de 6GHz (Ultra High Band). No driver Qualcomm Ath11k, foi adicionado suporte para a tecnologia de configuração rápida de conexão FILS (Fast Initial Link Setup, padronizada como IEEE 802.11ai), que elimina atrasos durante o roaming enquanto se migra de um ponto de acesso para outro.
  • Hardware
    • No driver amdgpu, foi implementado suporte para APU AMD "Green Sardine" (Ryzen 5000) e GPU "Dimgrey Cavefish" (Navi 2), além de suporte inicial para APU AMD Van Gogh com núcleo Zen 2 e GPU RDNA 2 (Navi 2). Foi adicionado suporte para novos identificadores APU Renoir (baseados na CPU Zen 2 e GPU Vega).
    • No driver i915 para placas gráficas Intel implementou suporte para a tecnologia IS (Integer scaling) com a implementação de um filtro para aumentar a escala considerando o estado dos pixels vizinhos (interpolação Nearest-neighbor) para determinar a cor dos pixels ausentes. Foi ampliado o suporte para placas discretas Intel DG1. Implementou-se o suporte para a tecnologia "Big Joiner", presente desde os chips Ice Lake / Gen11, que permite usar um transcoder para processar dois fluxos, por exemplo, para saída em um monitor 8K através de um DisplayPort. Foi adicionado o modo de troca assíncrona entre dois buffers na memória de vídeo (async flip).
    • No driver nouveau, foi adicionado suporte inicial para GPUs NVIDIA com base na microarquitetura "Ampere" (GA100, GeForce RTX 30xx), atualmente limitado a recursos para gerenciamento de modos de vídeo.
    • Foi adicionado suporte para o protocolo 3WIRE, utilizado em painéis LCD. Foi adicionado suporte para os painéis novatek nt36672a, TDO tl070wsh30, Innolux N125HCE-GN1 e ABT Y030XX067A 3.0. Também vale a pena destacar o suporte para os painéis dos smartphones OnePlus 6 e 6T, que permitiram a inicialização em dispositivos com o kernel não modificado.
    • Foi adicionado suporte para o primeiro controlador de host USB4 discreto Intel Maple Ridge.
    • Foi adicionado suporte para os codecs de áudio Allwinner H6 I2S, Analog Devices ADAU1372, Intel Alderlake-S, GMediatek MT8192, NXP i.MX HDMI e XCVR, Realtek RT715 e Qualcomm SM8250.
    • Foi adicionado suporte para plataformas, dispositivos e sistemas 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 embutido para o console de jogos Ouya com base no NVIDIA Tegra 3.

Simultaneamente, a Fundação Latino-Americana de Software Livre formou uma versão totalmente livre do kernel 5.11 — Linux-libre 5.11-gnu, limpo de elementos de firmwares e drivers que contêm componentes não livres ou trechos de código, cuja área de aplicação é limitada pelo fabricante. Na nova versão, a limpeza dos drivers para qat_4xxx (crypto), lt9611uxcm (dsi/hdmi bridge), ccs/smia++ (sensor), ath11k_pci, transceiver de áudio nxp e controlador pci mhi foi realizada. O código para limpeza de blobs em drivers e subsistemas amdgpu, btqca, btrtl, btusb, i915 csr foi atualizado. Novos blobs em m3 rproc, idt82p33 ptp clock e qualcomm arm64 foram desativados.

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