Lançamento do núcleo Linux 6.2

Após dois meses de desenvolvimento, Linus Torvalds apresentou o lançamento do núcleo Linux 6.2. Entre as mudanças mais notáveis estão: a aceitação de código sob a licença Copyleft-Next, melhorias na implementação de RAID5/6 no Btrfs, continuidade da integração do suporte à linguagem Rust, redução das despesas relacionadas à proteção contra ataques Retbleed, adição da capacidade de controle do consumo de memória durante a gravação reversa, inclusão de um mecanismo de balanceamento PLB (Protective Load Balancing) para TCP, um mecanismo híbrido de proteção para o fluxo de execução de comandos (FineIBT), a adição de capacidade de definição de objetos e estruturas de dados no BPF, inclusão da utilidade rv (Runtime Verification), e a redução do consumo de energia na implementação de bloqueios RCU.

A nova versão inclui 16843 correções de 2178 desenvolvedores, com um tamanho de patch de 62 MB (as mudanças afetaram 14108 arquivos, adicionaram 730195 linhas de código e removeram 409485 linhas). Cerca de 42% das alterações apresentadas na versão 6.2 estão relacionadas aos drivers de dispositivos, aproximadamente 16% estão ligadas à atualização de código específico para arquiteturas de hardware, 12% referem-se à pilha de rede, 4% às unidades de disco e 3% a subsistemas internos do núcleo.

As principais inovações no núcleo 6.2:

  • Memória e serviços do sistema
    • A inclusão no núcleo de código e alterações fornecidos sob a licença Copyleft-Next 0.3.1 foi autorizada. A licença Copyleft-Next foi criada por um dos autores da GPLv3 e é totalmente compatível com a licença GPLv2, conforme confirmado por advogados das empresas SUSE e Red Hat. Comparado à GPLv2, a licença Copyleft-Next é significativamente mais compacta e mais fácil de entender (removida a introdução e referências a compromissos desatualizados), define prazos e procedimentos para a correção de violações, e remove automaticamente os requisitos de copyleft para versões obsoletas, com mais de 15 anos.

      Copyleft-Next também contém uma cláusula sobre a concessão de direitos a tecnologias patenteadas, o que, ao contrário da GPLv2, torna essa licença compatível com a licença Apache 2.0. Para garantir total compatibilidade com a GPLv2, o texto da Copyleft-Next especifica que o trabalho derivado pode ser oferecido não apenas sob a licença original Copyleft-Next, mas também sob a licença GPL.

    • O pacote inclui a ferramenta "rv", que fornece uma interface para interação a partir do espaço do usuário com os manipuladores do subsistema RV (Runtime Verification), destinado a verificar a correção do funcionamento em sistemas de alta confiabilidade, garantindo a ausência de falhas. A verificação é realizada durante a execução, através da conexão de manipuladores a pontos de rastreamento que comparam o andamento real da execução com um modelo determinístico de referência pré-definido, que define o comportamento esperado do sistema.
    • O dispositivo zRAM, que permite armazenar a partição de troca na memória de forma comprimida (um dispositivo de bloco é criado na memória para realizar a troca com compressão), implementa a possibilidade de reempacotamento de páginas usando um algoritmo alternativo para alcançar um nível de compressão mais alto. A ideia principal é fornecer a escolha entre vários algoritmos (lzo, lzo-rle, lz4, lz4hc, zstd), cada um oferecendo seus próprios compromissos entre velocidade de compressão/descompressão e nível de compressão ou sendo otimizados para situações específicas (como compressão de grandes páginas de memória).
    • Adicionado o API "iommufd" para gerenciamento no espaço do usuário do sistema de gerenciamento de memória de entrada/saída — IOMMU (I/O Memory-Management Unit). A nova API permite gerenciar tabelas de páginas de memória de entrada/saída usando descritores de arquivos.
    • No BPF, foi adicionada a possibilidade de criar tipos, definir objetos personalizados, construir sua própria hierarquia de objetos e formar estruturas de dados personalizadas de forma flexível, como listas encadeadas. Para os programas BPF que entram em modo de suspensão (BPF_F_SLEEPABLE), foi adicionada o suporte a bloqueios bpf_rcu_read_{,un}lock(). Implementado suporte para armazenamento de objetos task_struct. Adicionado o tipo de mapa BPF_MAP_TYPE_CGRP_STORAGE, que oferece armazenamento local para cgroups.
    • Para o mecanismo de bloqueios RCU (Read-copy-update), foi implementado um mecanismo opcional de chamadas de retorno "preguiçosas", nas quais, através de um temporizador em modo batch, várias chamadas de retorno são processadas ao mesmo tempo. A aplicação da otimização proposta permite reduzir o consumo de energia em dispositivos Android e ChromeOS em 5-10% ao adiar solicitações RCU durante períodos de inatividade ou baixa carga no sistema.
    • Adicionado o sysctl split_lock_mitigate para gerenciar a resposta do sistema ao detectar bloqueios divididos ('split lock'), que ocorrem quando se acessa dados desalinhados na memória devido ao fato de que, ao executar uma instrução atômica, os dados cruzam duas linhas de cache da CPU. Esses bloqueios podem causar uma queda significativa no desempenho. Ao definir o valor de split_lock_mitigate para 0, apenas um aviso sobre o problema é exibido, e ao definir o valor para 1, além de exibir o aviso, o processo que causou o bloqueio também é desacelerado para preservar o desempenho do restante do sistema.
    • Uma nova implementação de bloqueios qspinlock foi proposta para a arquitetura PowerPC, demonstrando melhor desempenho e resolvendo alguns problemas de bloqueio que ocorrem em situações excepcionais.
    • O código de manipulação de interrupções MSI (Message-Signaled Interrupts) foi revisado, corrigindo problemas arquitetônicos acumulados e adicionando suporte para vincular manipuladores individuais a dispositivos diferentes.
    • Para sistemas baseados na arquitetura de conjunto de instruções LoongArch, utilizada nos processadores Loongson 3 5000 e que implementa uma nova ISA RISC semelhante ao MIPS e RISC-V, foi implementado suporte para ftrace, proteção de pilha, modos de suspensão e espera.
    • Foi disponibilizada a capacidade de atribuir nomes a áreas de memória anônima compartilhada (anteriormente, os nomes podiam ser atribuídos apenas à memória anônima privada, vinculada a um processo específico).
    • Adicionado um novo parâmetro de linha de comando do kernel chamado 'trace_trigger', destinado a ativar um gatilho de rastreamento usado para vincular comandos condicionais que são disparados durante a verificação de controle (por exemplo, trace_trigger='sched_switch.stacktrace if prev_state == 2').
    • Os requisitos de versão do pacote binutils foram aumentados. Agora, para compilar o kernel, é necessário pelo menos o binutils 2.25.
    • Ao chamar exec(), foi adicionada a capacidade de colocar o processo em um espaço de nomes de tempo (time namespace), onde o tempo difere do sistema.
    • Começou a transferência da ramificação Rust-for-Linux de funcionalidades adicionais relacionadas ao uso da linguagem Rust como segunda linguagem para o desenvolvimento de drivers e módulos do núcleo. O suporte a Rust está desativado por padrão e não leva à inclusão do Rust entre as dependências de construção obrigatórias do núcleo. A funcionalidade básica proposta na edição anterior foi ampliada com recursos para suportar código de baixo nível, como o tipo Vec e as macros pr_debug!(), pr_cont!() e pr_alert!(), além da macro procedural "#[vtable]", que simplifica o trabalho com tabelas de ponteiros para funções. A adição de wrappers Rust de alto nível sobre subsistemas do núcleo, que permitirão criar drivers completos em Rust, está prevista para edições futuras.
    • O tipo "char" usado no núcleo agora é declarado como sem sinal por padrão para todas as arquiteturas.
    • O mecanismo de alocação de memória slab SLOB (slab allocator), projetado para sistemas com pouca memória, foi declarado obsoleto. Em circunstâncias normais, recomenda-se usar SLUB ou SLAB em vez de SLOB. Para sistemas com baixa memória, recomenda-se usar SLUB em modo SLUB_TINY.
  • Subsistema de disco, entrada/saída e sistemas de arquivos
    • No Btrfs, foram feitas melhorias visando corrigir o problema do "write hole" na implementação de RAID 5/6 (uma tentativa de recuperação de RAID se uma falha ocorrer durante a gravação e não for possível entender qual bloco foi gravado corretamente em qual dos dispositivos RAID, o que pode levar à corrupção de blocos correspondentes a blocos não gravados). Além disso, para SSDs, a execução assíncrona da operação de "discard" agora é ativada automaticamente por padrão, permitindo maior desempenho devido à eficiente agrupamento das operações de "discard" na fila e ao processamento da fila por um manipulador em segundo plano. O desempenho das operações send e lseek foi melhorado, assim como o ioctl FIEMAP.
    • As funções de gerenciamento de gravação em atraso (writeback, salvamento em segundo plano de dados modificados) para dispositivos de bloco foram ampliadas. Em algumas situações, como ao usar dispositivos de bloco em rede ou unidades USB, a gravação em atraso pode resultar em alto consumo de memória. Para gerenciar o comportamento da gravação em atraso e manter o tamanho do cache de página dentro de certos limites em sysfs (\/sys\/class\/bdi\/), novos parâmetros strict_limit, min_bytes, max_bytes, min_ratio_fine e max_ratio_fine foram introduzidos.
    • No sistema de arquivos F2FS, foi implementada a operação ioctl de substituição atômica, que permite gravar dados em um arquivo como uma única operação atômica. O F2FS também recebeu um cache de blocos de extensões, que ajuda a determinar quais dados estão sendo usados ativamente ou aqueles que não foram acessados há muito tempo.
    • No sistema de arquivos ext4, apenas correções de erros foram implementadas.
    • No sistema de arquivos ntfs3, várias novas opções de montagem foram propostas: "nocase" para gerenciar a distinção entre maiúsculas e minúsculas nos nomes de arquivos e diretórios; "windows_name" para proibir a criação de nomes de arquivos que contêm caracteres inválidos para o sistema operacional Windows; "hide_dot_files" para gerenciar a atribuição de marcas de arquivos ocultos para arquivos que começam com um ponto.
    • No sistema de arquivos Squashfs, foi implementada a opção de montagem "threads=", que permite determinar o número de threads para paralelizar as operações de descompactação. O Squashfs também agora possui a capacidade de mapear identificadores de usuários em sistemas de arquivos montados, aplicados para associar arquivos de um usuário em uma partição estranha montada a outro usuário no sistema atual.
    • A implementação de listas de controle de acesso POSIX (POSIX ACL) foi revisada. Na nova implementação, foram eliminados problemas arquiteturais, simplificada a manutenção da base de código e foram utilizados tipos de dados mais seguros.
    • No subsistema fscrypt, utilizado para a criptografia transparente de arquivos e diretórios, foi adicionada a suporte ao algoritmo de criptografia SM4 (padrão chinês GB\/T 32907-2016).
    • Foi possibilitada a construção do kernel sem suporte ao NFSv2 (no futuro, a support ao NFSv2 está planejada para ser completamente descontinuada).
    • A organização da verificação de permissões de acesso ao dispositivo NVMe foi alterada. Agora, é possível ler e gravar no dispositivo NVMe se o processo de gravação tiver acesso a um arquivo especial do dispositivo (anteriormente, o processo precisava ter a autoridade CAP_SYS_ADMIN).
    • O driver de pacote para CD/DVD foi removido, tendo sido considerado obsoleto em 2016.
  • Virtualização e segurança
    • Um novo método de proteção contra a vulnerabilidade Retbleed em CPUs Intel e AMD foi implementado, utilizando o rastreamento da profundidade das chamadas, o que não reduz tanto a performance quanto a proteção anterior contra Retbleed. Para ativar o novo modo, foi sugerido o parâmetro de linha de comando do kernel 'retbleed=stuff'.
    • Foi adicionado um mecanismo híbrido de proteção do fluxo de execução de comandos FineIBT, que combina o uso de instruções de hardware Intel IBT (Rastreamento de Interrupções Indiretas) e proteção de software kCFI (Integridade de Fluxo de Controle do Kernel) para bloquear a interrupção da ordem normal de execução devido à aplicação de exploits que alteram ponteiros de função armazenados na memória. O FineIBT permite a execução por meio de uma transferência indireta apenas se passar pela instrução ENDBR, que é colocada no início da função. Além disso, similar ao mecanismo kCFI, uma verificação de hashes é realizada para garantir a imutabilidade dos ponteiros.
    • Foram adicionadas restrições para bloquear ataques que manipulam a geração de estados 'oops', após os quais as tarefas problemáticas são concluídas e o estado é restaurado sem interromper o funcionamento do sistema. Com um número muito grande de chamadas ao estado 'oops', ocorre um estouro do contador de referências (refcount), o que permite explorar vulnerabilidades geradas pela desreferência de ponteiros NULL. Para proteger contra tais ataques, foi adicionado ao kernel um limite para o número máximo de ocorrências de 'oops', após o qual o kernel irá iniciar uma transição para o estado 'panic' com reinicialização subsequente, o que impossibilitará atingir o número de iterações necessário para o estouro do refcount. Por padrão, o limite é definido em 10 mil 'oops', mas pode ser alterado através do parâmetro oops_limit.
    • Foi adicionado o parâmetro de configuração LEGACY_TIOCSTI e o sysctl legacy_tiocsti para desativar a capacidade de inserir dados no terminal via ioctl TIOCSTI, uma vez que essa funcionalidade pode ser utilizada para inserir caracteres arbitrárias no buffer de entrada do terminal e simular a entrada do usuário.
    • Proposto um novo tipo de estrutura interna encoded_page, onde os bits inferiores do ponteiro são usados para armazenar informações adicionais, aplicáveis para proteger contra desreferenciação acidental do ponteiro (quando for realmente necessário, é preciso limpar esses bits adicionais antes da desreferenciação).
    • Na plataforma ARM64, durante a fase de inicialização, foi disponibilizada a opção de ativação e desativação da implementação programática do mecanismo Shadow Stack, que é utilizado para proteger contra a sobrescrita 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 'sombria' separada e recuperá-lo antes da saída da função). O suporte, em uma única compilação do kernel, tanto para a implementação de hardware quanto para a programática do Shadow Stack permite usar um único kernel em diferentes sistemas ARM, independentemente do suporte a instruções de autenticação de ponteiros. A ativação da implementação programática é feita por meio da substituição, durante a inicialização, das instruções necessárias no código.
    • Adicionada a suporte ao mecanismo de notificação assíncrona de saída nos processadores Intel, permitindo detectar ataques de passo único no código executado em enclaves SGX.
    • Proposto um conjunto de operações que permite ao hipervisor suportar solicitações de sistemas convidados Intel TDX (Trusted Domain Extensions).
    • Removidas as configurações de compilação do kernel RANDOM_TRUST_BOOTLOADER e RANDOM_TRUST_CPU, as quais devem ser substituídas pelas opções correspondentes na linha de comando random.trust_bootloader e random.trust_cpu.
    • No mecanismo Landlock, que limita a interação de um grupo de processos com o ambiente externo, foi adicionada a suportação para o flag LANDLOCK_ACCESS_FS_TRUNCATE, permitindo controlar a execução de operações de truncamento de arquivos.
  • Subsistema de Rede
    • Para o IPv6, foi adicionado suporte ao PLB (Balanceamento de Carga Protetivo), um mecanismo de balanceamento de carga entre links de rede, com o objetivo de reduzir os pontos de sobrecarga nos switches de data centers. Através da alteração do Rótulo de Fluxo IPv6, o PLB altera aleatoriamente os caminhos dos pacotes para equilibrar a carga nas portas do switch. Para reduzir a desordem dos pacotes, essa operação é realizada, sempre que possível, após períodos de inatividade. A implementação do PLB nos data centers do Google permitiu reduzir o desbalanceamento de carga nas portas dos switches em média em 60%, diminuir a perda de pacotes em 33% e reduzir a latência em 20%.
    • Adicionado driver para dispositivos MediaTek com suporte a Wi-Fi 7 (802.11be).
    • Adicionado suporte a links de 800 gigabits.
    • Adicionada a capacidade de renomear interfaces de rede em tempo real, sem interrupção do funcionamento.
    • As mensagens gravadas no log sobre o ataque SYN flood agora incluem a menção ao endereço IP que recebeu o pacote.
    • Para o UDP, foi implementada a possibilidade de usar tabelas hash separadas para diferentes espaços de nomes de rede.
    • Para pontes de rede, foi adicionado suporte ao método de autenticação MAB (Bypass de Autenticação MAC).
    • Para o protocolo CAN (CAN_RAW), foi implementado suporte ao modo de soquete SO_MARK para anexar filtros de tráfego baseados em fwmark.
    • No ipset, foi implementado um novo parâmetro bitmask, permitindo definir uma máscara baseada em bits arbitrários no endereço IP (por exemplo, "ipset create set1 hash:ip bitmask 255.128.255.0").
    • No nf_tables, foi adicionado suporte para o processamento de cabeçalhos internos (inner) que estão dentro de pacotes encapsulados.
  • Hardware
    • Foi adicionada a subsistema "accel" com a implementação de um framework para aceleradores de computação, que podem ser fornecidos tanto na forma de ASICs separados quanto na forma de blocos IP dentro de SoCs e GPUs. Principalmente, tais aceleradores são focados em acelerar a solução de problemas de aprendizado de máquina.
    • No driver amdgpu, foi adicionado suporte aos componentes IP GC, PSP, SMU e NBIO. Para sistemas ARM64, foi implementado suporte ao DCN (Display Core Next). A implementação da saída de vídeo protegida foi transferida do uso do DCN10 para o DCN21 e agora pode ser usada ao conectar múltiplos monitores.
    • No driver i915 (Intel), foi estabilizado o suporte para placas gráficas discretas Intel Arc (DG2/Alchemist).
    • No driver Nouveau, foi implementado suporte para a GPU NVIDIA GA102 (RTX 30) baseada na arquitetura Ampere. Para placas nva3 (GT215), foi adicionada a capacidade de controlar o fundo iluminado.
    • Adicionada a suporte para adaptadores sem fio baseados em chips Realtek 8852BE, Realtek 8821CU, 8822BU, 8822CU, 8723DU (USB) e MediaTek MT7996, interfaces Bluetooth Broadcom BCM4377/4378/4387, além de controladores Ethernet Motorcomm yt8521, NVIDIA Tegra GE.
    • Adicionada a suporte para ASoC (ALSA System on Chip) para os chips de som integrados HP Stream 8, Advantech MICA-071, Dell SKU 0C11, Intel ALC5682I-VD, Xiaomi Redmi Book Pro 14 2022, i.MX93, Armada 38x, RK3588. Adicionada a suporte para a interface de som Focusrite Saffire Pro 40. Adicionado o codec de áudio Realtek RT1318.
    • Adicionada a suporte para smartphones e tablets Sony (Xperia 10 IV, 5 IV, X e X compact, OnePlus One, 3, 3T e Nord N100, Xiaomi Poco F1 e Mi6, Huawei Watch, Google Pixel 3a, Samsung Galaxy Tab 4 10.1.
    • Adicionada a suporte para ARM SoC e placas Apple T6000 (M1 Pro), T6001 (M1 Max), T6002 (M1 Ultra), Qualcomm MSM8996 Pro (Snapdragon 821), SM6115 (Snapdragon 662), SM4250 (Snapdragon 460), SM6375 (Snapdragon 695), SDM670 (Snapdragon 670), MSM8976 (Snapdragon 652), MSM8956 (Snapdragon 650), RK3326 Odroid-Go/rg351, Zyxel NSA310S, InnoComm i.MX8MM, Odroid Go Ultra.

Ao mesmo tempo, a Fundação de Software Livre da América Latina criou uma versão totalmente livre do núcleo 6.2 — Linux-libre 6.2-gnu, limpo de elementos de firmware e drivers que contêm componentes ou trechos de código não livres, cuja aplicação é limitada pelo fabricante. Na nova versão, realizada a limpeza de novos blobs no driver nouveau. A carga de blobs nos drivers mt7622, mt7996 wifi e bcm4377 bluetooth foi desativada. Realizada a limpeza dos nomes de blobs nos arquivos dts para a arquitetura Aarch64. Atualizado o código de limpeza de blobs em vários drivers e subsistemas. A limpeza do driver s5k4ecgx foi interrompida, pois foi removido do núcleo.

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