Lançamento do núcleo Linux 5.18

Após dois meses de desenvolvimento, Linus Torvalds lançou o kernel Linux 5.18. Entre as mudanças mais notáveis estão: uma grande limpeza de funcionalidades obsoletas, a declaração de obsolescência do sistema de arquivos Reiserfs, a implementação de eventos de rastreamento de processos de usuário, a adição de suporte ao mecanismo de bloqueio de execução de exploits Intel IBT, a inclusão de um modo de detecção de estouro de buffer ao usar a função memcpy(), a adição de um mecanismo de rastreamento de chamadas de função fprobe, a melhoria no desempenho do escalonador de tarefas em CPUs AMD Zen, inclusão de um driver para gerenciar funcionalidades da CPU Intel (SDS), e integração de partes de patches para reestruturação de arquivos de cabeçalho, além da aprovação do uso do padrão C11.

Na nova versão, foram aceitas 16.206 correções de 2.127 desenvolvedores (na versão anterior, foram 14.203 correções de 1.995 desenvolvedores). O tamanho do patch é de 108 MB (as mudanças afetaram 14.235 arquivos, com a adição de 1.340.982 linhas de código e a remoção de 593.836 linhas). Cerca de 44% de todas as alterações apresentadas no 5.18 estão relacionadas a drivers de dispositivos, aproximadamente 16% de mudanças estão relacionadas à atualização de código específico de arquiteturas de hardware, 11% estão ligadas à pilha de rede, 3% às sistemas de arquivos e 3% às subsistemas internos do kernel.

Principais novidades no kernel 5.18:

  • Subsistema de disco, entrada/saída e sistemas de arquivos
    • No sistema de arquivos Btrfs, foi adicionada a capacidade de passar dados comprimidos durante a execução das operações send e receive. Anteriormente, ao usar send/receive, o lado que enviava descompactava os dados armazenados de forma comprimida, enquanto o lado receptor recompunha os dados antes da gravação. No kernel 5.18, aplicativos no espaço do usuário que usam chamadas send/receive agora têm a capacidade de transmitir dados comprimidos sem reempacotamento. A funcionalidade foi implementada graças às novas operações ioctl BTRFS_IOC_ENCODED_READ e BTRFS_IOC_ENCODED_WRITE, que permitem ler e gravar informações diretamente em extensões.

      Além disso, no Btrfs, o desempenho do fsync foi melhorado. Foi adicionada a capacidade de deduplicação e execução de reflink (clonagem de metadados de arquivo criando um link para dados já existentes sem a necessidade de cópia real) para todo o armazenamento, sem limitações a pontos de montagem.

    • No modo de entrada/saída direta (Direct I/O), é possível acessar arquivos criptografados ao usar a criptografia inline do fscrypt, na qual as operações de criptografia e a descriptografia são realizadas pelo controlador de armazenamento, e não pelo núcleo. Com a criptografia convencional baseada no núcleo, o acesso a arquivos criptografados por meio do Direct I/O continua a ser impossível, pois o acesso aos arquivos é feito evitando o mecanismo de buffer no núcleo.
    • O servidor NFS agora tem suporte padrão para o protocolo NFSv3, que não requer ativação separada e está disponível com a ativação geral do NFS. O NFSv3 é considerado a versão principal e sempre suportada do NFS, enquanto o suporte ao NFSv2 pode ser descontinuado no futuro. A eficiência da leitura do conteúdo dos diretórios foi significativamente aumentada.
    • O sistema de arquivos ReiserFS foi classificado como obsoleto e está programado para remoção em 2025. A classificação do ReiserFS como obsoleto permitirá reduzir o esforço de manutenção de alterações comuns entre sistemas de arquivos relacionadas ao suporte de uma nova API para montagem, iomap e blobs.
    • Para o sistema de arquivos F2FS, foi implementada a possibilidade de mapeamento de identificadores de usuários em sistemas de arquivos montados, utilizado para associar arquivos de um determinado usuário em uma partição montada de outro usuário no sistema atual.
    • O código para contagem de estatísticas nos manipuladores do Device-mapper foi reestruturado, o que aumentou significativamente a precisão da contabilização em manipuladores como o dm-crypt.
    • Para dispositivos NVMe, foi implementado suporte para somas de verificação de 64 bits para a verificação de integridade.
    • Para o sistema de arquivos exfat, foi introduzida uma nova opção de montagem "keep_last_dots", que proíbe a remoção de pontos no final do nome do arquivo (no Windows, pontos no final do nome são removidos por padrão).
    • No EXT4, o desempenho do modo fast_commit foi aprimorado e a escalabilidade aumentada. A opção de montagem "mb_optimize_scan", que melhora o desempenho em condições de alta fragmentação do sistema de arquivos, foi adaptada para trabalhar com arquivos que contêm extensões.
    • O suporte para streams de gravação (write stream) foi interrompido no subsistema que gerencia dispositivos de bloco. Esse recurso foi proposto para SSDs, mas não se espalhou e atualmente não existem dispositivos que suportem este modo, sendo improvável que eles apareçam no futuro.
  • Memória e serviços do sistema
    • Foi iniciada a integração de um conjunto de patches que permite reduzir significativamente o tempo de recompilação do núcleo, reestruturando a hierarquia dos arquivos de cabeçalho e diminuindo o número de dependências cruzadas. O núcleo 5.18 inclui patches que otimizam a estrutura dos arquivos de cabeçalho do escalonador de tarefas (kernel/sched). Comparado à versão anterior, o consumo de tempo do processador na compilação do código kernel/sched foi reduzido em 61%, enquanto o tempo real diminuiu em 3,9% (de 2,95 para 2,84 segundos).
    • O uso do padrão C11, publicado em 2011, foi permitido no código do núcleo. Anteriormente, o código adicionado ao núcleo deveria manter conformidade com a especificação ANSI C (C89), estabelecida em 1989. Nos scripts de construção do núcleo 5.18, a opção ‘—std=gnu89’ foi substituída por ‘—std=gnu11 -Wno-shift-negative-value’. A possibilidade de usar o padrão C17 foi considerada, mas isso exigiria elevar a versão mínima suportada do GCC; a inclusão do suporte ao C11 está dentro dos requisitos atuais para a versão do GCC (5.1).
    • A eficiência do escalonamento de tarefas em processadores AMD com microarquitetura Zen foi aumentada, onde cada nó com canais de memória locais possui múltiplos caches de último nível (LLC, Last Level Cache). Na nova versão, o desbalanceamento de LLC entre nós NUMA foi corrigido, resultando em um aumento significativo de desempenho sob certas cargas de trabalho.
    • Foram ampliados os recursos para rastreamento de aplicativos no espaço do usuário. Na nova versão do núcleo, foi adicionada a possibilidade de que processos de usuários criem eventos de rastreamento (User events) e gravar dados em um buffer de rastreamento, que podem ser visualizados através de utilitários típicos de rastreamento do núcleo, como ftrace e perf. Os eventos de rastreamento do espaço do usuário são isolados dos eventos de rastreamento do núcleo. O estado dos eventos pode ser visualizado através do arquivo /sys/kernel/debug/tracing/user_events_status, enquanto a inscrição de eventos e a gravação de dados são feitas através do arquivo /sys/kernel/debug/tracing/user_events_data.
    • Foi adicionado um mecanismo de rastreamento (probe) para chamadas de funções — fprobe. A API fprobe é baseada no ftrace, mas se limita apenas à possibilidade de anexar manipuladores de callback aos pontos de entrada e saída das funções. Diferente dos kprobes e kretprobes, o novo mecanismo permite o uso de um único manipulador para várias funções.
    • Foi encerrado o suporte para processadores ARM antigos (ARMv4 e ARMv5), que não possuem unidade de gerenciamento de memória (MMU). O suporte para sistemas ARMv7-M sem MMU foi mantido.
    • Foi encerrado o suporte para a arquitetura semelhante ao RISC NDS32, utilizada nos processadores da Andes Technologies. O código foi removido devido à falta de manutenção e à ausência de demanda pelo suporte ao NDS32 no núcleo do Linux (os usuários restantes utilizam versões especializadas do núcleo oferecidas pelos fabricantes de hardware).
    • Por padrão, a construção do núcleo com suporte ao formato de arquivos executáveis a.out para as arquiteturas alpha e m68k, onde esse formato ainda é utilizado, está desativada. Provavelmente, o suporte ao obsoleto formato a.out será completamente removido do núcleo em breve. Os planos para a remoção do formato a.out estão sendo discutidos desde 2019.
    • Para a arquitetura PA-RISC, foi implementado suporte mínimo para o mecanismo vDSO (objetos compartilhados dinâmicos virtuais), que fornece um conjunto limitado de chamadas de sistema acessíveis no espaço do usuário sem a necessidade de alternância de contexto. O suporte ao vDSO possibilitou a execução com pilha não executável.
    • Foi adicionada a suporte ao mecanismo Intel HFI (Hardware Feedback Interface), que permite que o hardware envie informações sobre a performance atual e eficiência energética de cada CPU para o núcleo.
    • Foi adicionado um driver para o mecanismo Intel SDSi (Silicon Definido por Software), que permite gerenciar a ativação de recursos adicionais no processador (como instruções especializadas e cache adicional). A ideia é que chips com funcionalidades expandidas bloqueadas possam ser fornecidos a um custo mais baixo, os quais podem ser ‘adicionados’ e ativados sem a necessidade de substituir o chip.
    • Foi adicionado o driver amd_hsmp para suporte à interface AMD HSMP (Host System Management Port), que fornece acesso a funções de gerenciamento de CPU por meio de um conjunto de registradores especiais, surgindo nos processadores de servidor AMD EPYC a partir da geração Fam19h. Por exemplo, através do HSMP, é possível obter dados sobre consumo de energia e temperatura, definir limites de frequência, ativar vários modos de aumento de desempenho e gerenciar parâmetros de operação da memória.
    • Na interface de entrada/saída assíncrona io_uring, foi implementada a opção IORING_SETUP_SUBMIT_ALL para registrar um conjunto de descritores de arquivo no buffer de anel, assim como a operação IORING_OP_MSG_RING, que permite enviar um sinal de um buffer de anel para outro buffer de anel.
    • No mecanismo DAMOS (Data Access Monitoring-based Operation Schemes), que permite liberar memória levando em conta a frequência de acesso à memória, foram expandidas as capacidades de controle das operações de memória a partir do espaço de usuário.
    • A terceira série de patches foi integrada com a implementação do conceito de folhetos de páginas de memória (page folios), que se assemelham às páginas de memória compostas (compound pages), mas diferem pela semântica aprimorada e uma organização de trabalho mais clara. O uso de folhetos permite acelerar a gestão de memória em alguns subsistemas do núcleo. Nos patches propostos, foi feita a transição para folhetos nas funções internas de gerenciamento de memória, incluindo variações da função get_user_pages(). Ofereceu-se suporte para a criação de folhetos grandes no código de leitura preditiva de dados.
    • No sistema de construção, passou a haver suporte para as variáveis de ambiente USERCFLAGS e USERLDFLAGS, por meio das quais é possível passar flags adicionais para o compilador e o vinculador.
    • No subsistema eBPF, no mecanismo BTF (BPF Type Format), que fornece informações para verificação de tipos no pseudocódigo BPF, foi implementada a possibilidade de adicionar anotações a variáveis que fazem referência a áreas de memória no espaço de usuário. As anotações ajudam o sistema de verificação do código BPF a identificar e verificar acessos à memória de maneira mais eficaz.
    • Foi proposto um novo manipulador de alocação de memória para armazenar programas BPF carregados, que permite um uso mais eficiente da memória em situações de carregamento de um grande número de programas BPF.
    • Na chamada do sistema madvise(), foi adicionada a flag MADV_DONTNEED_LOCKED, que complementa a já existente MADV_DONTNEED, permitindo que o núcleo receba informações antecipadas sobre a liberação de um bloco de memória, ou seja, que esse bloco não é mais necessário e pode ser utilizado pelo núcleo. Ao contrário da MADV_DONTNEED, o uso da flag MADV_DONTNEED_LOCKED é permitido para páginas de memória bloqueadas na RAM, que, quando chamadas com madvise, são desalocadas sem alteração de seu status de bloqueio e, em caso de acesso subsequente ao bloco, geram uma 'page fault' e retornam mantendo a ligação. Adicionalmente, foi feita uma modificação que permite o uso da flag MADV_DONTNEED com grandes páginas de memória no HugeTLB.
  • Virtualização e segurança
    • Para a arquitetura x86, foi adicionada a compatibilidade com o mecanismo de proteção de execução de comandos Intel IBT (Indirect Branch Tracking), que dificulta o uso de técnicas de exploração por meio de Programação Orientada a Retorno (ROP, Return-Oriented Programming), onde a exploração é formada como uma cadeia de chamadas de pedaços já existentes de instruções em memória, terminando com uma instrução de retorno de controle (geralmente, estas são as finalizações de funções). A essência do método de proteção implementado está em bloquear desvios indiretos para o corpo da função através da adição, no início da função, de uma instrução especial ENDBR, permitindo a execução via desvio indireto somente se o desvio apontar para esta instrução (um chamado indireto por meio de JMP e CALL deve sempre chegar à instrução ENDBR, localizada no início da função).
    • Foi ativada uma verificação mais rigorosa dos limites de buffers nas funções memcpy(), memmove() e memset(), realizada durante a fase de compilação ao habilitar o modo CONFIG_FORTIFY_SOURCE. A modificação adicionada consiste na verificação de saídas dos limites de elementos de estruturas, cujos tamanhos são conhecidos. Observa-se que essa possibilidade implementada ajudaria a bloquear todas as vulnerabilidades de estouro de buffer relacionadas ao memcpy() no núcleo, identificadas pelo menos nos últimos três anos.
    • Adicionada a segunda parte do código da implementação atualizada do gerador de números pseudoaleatórios RDRAND, responsável pelo funcionamento dos dispositivos /dev/random e /dev/urandom. A nova implementação se destaca pela unificação do funcionamento do /dev/random e /dev/urandom, com a adição de proteção contra a duplicação no fluxo de números aleatórios durante a inicialização. máquinas virtuais E pela transição para o uso da função hash BLAKE2s em vez de SHA1 para as operações de mistura de entropia. Essa alteração aumentou a segurança do gerador de números pseudoaleatórios, eliminando o algoritmo problemático SHA1 e evitando a sobregravação do vetor de inicialização do RNG. Como o algoritmo BLAKE2s supera o SHA1 em termos de desempenho, sua aplicação também teve um impacto positivo na performance.
    • Para a arquitetura ARM64, foi adicionada a suporte ao novo algoritmo de autenticação de ponteiros - 'QARMA3', que é mais rápido que o algoritmo QARMA, mantendo um nível adequado de proteção. A tecnologia permite o uso de instruções especializadas da ARM64 para verificar os endereços de retorno por meio de assinaturas digitais armazenadas nos bits superiores não utilizados do próprio ponteiro.
    • Para a arquitetura ARM64, foi implementado o suporte para a construção no GCC 12 que ativa o modo de proteção contra a sobregravação do endereço de retorno da função em caso de estouro de buffer na pilha. A essência da proteção é salvar o endereço de retorno em uma 'pilha sombra' separada após a transferência do controle para a função e extrair este endereço antes da saída da função.
    • Adicionado um novo armazenamento de chaves (keyring) - 'machine', que contém as chaves do proprietário do sistema (MOK, Machine Owner Keys), suportadas no carregador shim. As chaves mencionadas podem ser usadas para assinar digitalmente os componentes do núcleo carregados após a inicialização (por exemplo, módulos do núcleo).
    • Removido o suporte para chaves privadas assimétricas para TPM, que foram propostas em uma versão obsoleta do TPM, têm problemas de segurança conhecidos e não se popularizaram na prática.
    • Adicionada proteção de dados do tipo size_t contra estouros inteiros. O código utiliza os manipuladores size_mul(), size_add() e size_sub(), que permitem realizar multiplicação, adição e subtração de tamanhos do tipo size_t de forma segura.
    • Na montagem do núcleo, as flags «-Warray-bounds» e «-Wzero-length-bounds» foram incluídas, emitindo avisos quando o índice sai do limite do array e ao usar arrays de comprimento zero.
    • O dispositivo virtio-crypto agora suporta criptografia usando o algoritmo RSA.
  • Subsistema de Rede
    • Na implementação de pontes de rede, foi adicionado suporte para o modo de bloqueio de portas (locked mode), onde o usuário pode enviar tráfego através de uma porta apenas com o endereço MAC permitido. Também foi adicionada a possibilidade de usar várias estruturas para avaliar o estado do protocolo STP (Spanning Tree Protocol). Anteriormente, a associação para VLAN poderia ser apenas uma ligação direta ao STP (1:1), onde cada VLAN era gerenciada de forma independente. Na nova versão, foi adicionado o parâmetro mst_enable, que, quando ativado, controla o estado das VLANs através do módulo MST (Multiple Spanning Trees), permitindo que a associação das VLANs corresponda ao modelo M:N.
    • O trabalho de integração de ferramentas para rastreamento das causas de queda de pacotes (códigos reason) no stack de rede foi continuado. O código da causa é transmitido durante a liberação da memória associada ao pacote, permitindo considerar situações como a perda de pacotes devido a erros no preenchimento dos campos do cabeçalho, detecção de spoofing pelo filtro rp_filter, checksum incorreto, falta de memória, violação das regras IPSec XFRM, número de sequência TCP incorreto, entre outros.
    • Foi possibilitada a transmissão de pacotes de rede a partir de programas BPF, executados do espaço do usuário no modo BPF_PROG_RUN, onde os programas BPF são executados no núcleo, mas retornam o resultado ao espaço do usuário. Os pacotes são transmitidos utilizando o subsistema XDP (eXpress Data Path). Suporta um modo ao vivo de processamento de pacotes, onde o manipulador XDP pode redirecionar pacotes de rede em tempo real para o stack de rede ou para outros dispositivos. Também é possível criar geradores de tráfego externo por software ou injetar quadros de rede no stack de rede.
    • Para programas BPF, anexados a cgroups de rede, foram propostas funções auxiliares para definir explicitamente o valor retornado pelas chamadas de sistema, permitindo transmitir informações mais completas sobre as razões da falha nas chamadas de sistema.
    • No subsistema XDP (eXpress Data Path) foi adicionada a suporte a pacotes fragmentados armazenados em vários buffers, permitindo que o XDP processe Jumbo frames e aplique TSO/GRO (TCP Segmentation Offload/Generic Receive Offload) para XDP_REDIRECT.
    • O processo de remoção de namespaces de rede foi significativamente acelerado, o que era necessário em alguns grandes sistemas com alto volume de tráfego.
  • Hardware
    • No driver amdgpu, a tecnologia de sincronização adaptativa FreeSync está habilitada por padrão, permitindo ajustar a taxa de atualização da informação na tela, garantindo suavidade e ausência de interrupções durante jogos e visualização de vídeos. O suporte ao GPU Aldebaran foi declarado estável.
    • No driver i915, foi adicionada a suporte para chips Intel Alderlake N e placas gráficas discretas Intel DG2-G12 (Arc Alchemist).
    • No driver nouveau, foi garantido suporte a bitrates mais altos para interfaces DP/eDP e suporte a extensores de cabo lttprs (Link-Training Tunable PHY Repeaters).
    • No subsistema drm (Direct Rendering Manager), nos drivers armada, exynos, gma500, hyperv, imx, ingenic, mcde, mediatek, msm, omap, rcar-du, rockchip, sprd, sti, tegra, tilcdc, xen e vc4, foi adicionada a suporte ao parâmetro nomodeset, que desativa a troca de modos de vídeo no nível do kernel e o uso de recursos para aceleração de hardware de renderização, mantendo apenas a funcionalidade relacionada ao framebuffer do sistema.
    • Foi adicionada a suporte aos SoCs ARM Qualcomm Snapdragon 625/632 (usado em smartphones LG Nexus 5X e Fairphone FP3), Samsung Exynos 850, Samsung Exynos 7885 (usado no Samsung Galaxy A8), Airoha (Mediatek/EcoNet) EN7523, Mediatek mt6582 (tablet Prestigio PMT5008 3G), Microchip Lan966, Renesas RZ/G2LC, RZ/V2L, Tesla FSD, TI K3/AM62 e i.MXRTxxxx.
    • Foi adicionada a suporte para dispositivos ARM e placas Broadcom (Raspberry Pi Zero 2 W), Qualcomm (Google Herobrine R1 Chromebook, SHIFT6mq, Samsung Galaxy Book2), Rockchip (Pine64 PineNote, Bananapi-R2-Pro, STM32 Emtrion emSBS, Samsung Galaxy Tab S, tablet Prestigio PMT5008 3G), Allwinner (A20-Marsboard), Amlogic (Amediatek X96-AIR, CYX A95XF3-AIR, Haochuangy H96-Max, Amlogic AQ222 e OSMC Vero 4K+), Aspeed (Quanta S6Q, ASRock ROMED8HM3), Marvell MVEBU/Armada (Ctera C200 V1 e V2 NAS), Mstar (DongShanPiOne, Miyoo Mini), NXP i.MX (Protonic PRT8MM, emCON-MX8M Mini, Toradex Verdin, Gateworks GW7903).
    • Foi adicionada a suporte a sistemas de áudio e codecs AMD PDM, Atmel PDMC, Awinic AW8738, i.MX TLV320AIC31xx, Intel CS35L41, ESSX8336, Mediatek MT8181, nVidia Tegra234, Qualcomm SC7280, Renesas RZ/V2L, Texas Instruments TAS585M. Uma implementação inicial do driver de áudio para o chip DSP Intel AVS foi adicionada. O suporte aos drivers para Intel ADL e Tegra234 foi atualizado, além de melhorias na compatibilidade de áudio em dispositivos Dell, HP, Lenovo, ASUS, Samsung e Clevo.

    Simultaneamente, o Fundo de Software Livre da América Latina formou uma versão completamente livre do núcleo 5.18 — Linux-libre 5.18-gnu, limpa de elementos de firmware e drivers que contêm componentes ou trechos de código não livres, cuja área de aplicação é limitada pelo fabricante. Nesta nova versão, foram limpos drivers para painéis MIPI DBI, VPU Amphion, WiFi MediaTek MT7986 WMAC, Mediatek MT7921U (USB) e Realtek 8852a/8852c, chips de áudio Intel AVS e Texas Instruments TAS5805M. Também foram limpos arquivos DTS para diferentes SoCs Qualcomm com processadores baseados na arquitetura AArch64. O código de limpeza de blobs foi atualizado nos drivers e subsistemas de GPU AMD, MediaTek MT7915, Silicon Labs WF200+ WiFi, Ethernet Mellanox Spectrum, Realtek rtw8852c, Qualcomm Q6V5, Wolfson ADSP, MediaTek HCI UART.

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