Lançamento do kernel Linux 6.6

Após dois meses de desenvolvimento, Linus Torvalds apresentou o lançamento do núcleo Linux 6.6. Entre as mudanças mais notáveis estão: um novo escalonador de tarefas EEVDF; um mecanismo de pilha sombria para proteção contra exploits; suporte a fs-verity no OverlayFS; implementação de cotas e xattr no tmpfs; preparação do fsck online no XFS; o rastreamento de exportação de símbolos 'GPL-only' foi aprimorado; suporte a sockets de rede no io_uring; randomização de memória no kmalloc(); ReiserFS foi declarado obsoleto; e primitivas para o driver Vulkan NVK foram adicionadas ao Nouveau.

A nova versão inclui 15.291 correções de 2.058 desenvolvedores, com um tamanho de patch de 39 MB (as alterações afetaram 14.844 arquivos, 553.359 linhas de código adicionadas e 284.012 linhas removidas). Na versão anterior, houve 14.674 correções de 2.016 desenvolvedores, com um patch de 78 MB. Cerca de 44% de todas as alterações apresentadas no 6.6 estão relacionadas a drivers de dispositivos, aproximadamente 17% dizem respeito à atualização de código específico para arquiteturas de hardware, 11% estão relacionadas a pilha de rede, 4% a sistemas de arquivos e 3% a subsistemas internos do núcleo.

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

  • Memória e serviços do sistema
    • Foi implementado um novo escalonador de tarefas EEVDF (Earliest Eligible Virtual Deadline First), que substitui o escalonador CFS (Completely Fair Scheduler), que foi fornecido a partir do núcleo 2.6.23. O novo escalonador considera na escolha do próximo processo para transferência de execução aqueles processos que não receberam recursos de CPU suficientes ou que receberam tempo de CPU desproporcionalmente alto. No primeiro caso, a transferência de controle para o processo é forçada, enquanto no segundo, é adiada. O antigo escalonador CFS usava heurísticas e ajustes finos para identificar processos que precisavam de atenção separada, enquanto o novo escalonador os monitora de forma mais explícita e não requer ajustes finos. Supõe-se que o EEVDF permitirá reduzir as latências na execução de tarefas com as quais o CFS enfrentou problemas de escalonamento.
    • Foram feitas alterações no tratamento de símbolos internos da categoria "GPL-only", visando dificultar o uso de módulos proprietários GPL-compatíveis para contornar restrições de acesso a subsistemas do núcleo que permitem acesso apenas a código sob licença GPL. Na função symbol_get(), é proibida a busca de símbolos marcados como GPL-only para módulos proprietários, e vice-versa, módulos GPL não poderão encontrar símbolos exportados por módulos proprietários.
    • Adicionadas configurações adicionais para filas de trabalho (unbound workqueue) para aumentar a eficiência do reuso do cache de processador em sistemas grandes com vários caches de terceiro nível (L3). O núcleo também inclui a utilidade tools/workqueue/wq_dump.py para verificar a configuração atual das filas de trabalho.
    • A subsistema io_uring recebeu suporte inicial para operações e comandos específicos de sockets de rede. Adicionado o sysctl io_uring_disabled para desativar o io_uring em todo o sistema. O io_uring também acelerou significativamente a entrada/saída direta (Direct I/O) em modo assíncrono. O aumento da largura de banda e a queda nas latências ao executar operações de entrada/saída após as alterações atingem 37%.
    • Um compilador JIT foi implementado para BPF na arquitetura PA-RISC.
    • Na configuração /sys/devices/system/cpu/smt/control, adicionada a suporte a parâmetros numéricos que definem o número de threads disponíveis para cada núcleo de CPU (anteriormente, apenas os valores "on" e "off" eram suportados para habilitar ou desabilitar o suporte à multithreading simétrica). Este novo recurso pode ser aplicado em alguns processadores PowerPC que suportam o modo de hot-plug do SMT, permitindo a habilitação seletiva do SMT em núcleos específicos durante a operação.
    • Continua a transferência de mudanças da ramificação Rust-for-Linux relacionadas ao uso da linguagem Rust como segunda linguagem para o desenvolvimento de drivers e módulos do núcleo (o suporte a Rust não é ativado por padrão e não torna Rust uma dependência obrigatória de construção do núcleo). Foi feita a transição para o uso das versões Rust 1.71.1 e bindgen 0.65.1. Implementado o traço ‘Zeroable’. Adicionados os macros de procedimento ‘paste!’ e ‘#[derive(Zeroable)]’. Garantida a compatibilidade com ‘#[pin_data]’. Adicionadas funções de inicialização ‘{,pin_}init_array_from_fn()’ e o método ‘{,pin_}chain’. Expandidas as funcionalidades do módulo ‘types’. No framework de testes unitários kunit, adicionada a capacidade de executar testes da documentação do Rust.
    • Adicionada a subsistema ‘eventfs’, que permite reduzir significativamente o consumo de memória no sistema de rastreamento, eliminando a necessidade de armazenar estruturas adicionais usadas para representar pontos de rastreamento no sistema de arquivos. Anteriormente, tais estruturas eram criadas para todos os pontos de rastreamento, independentemente de sua utilização. Com o eventfs, essas estruturas podem ser criadas dinamicamente, apenas quando necessário.
    • Ampliadas as funcionalidades da utilidade perf.
    • Informações para diagnosticar a eficiência do mecanismo de fusão de páginas de memória idênticas (KSM, Kernel Samepage Merging) foram adicionadas ao arquivo /proc/pid/smaps.
    • Removida a API Frontswap, que permitia alocar uma partição de troca na memória que não pode ser endereçada diretamente e que não fornece informações operacionais sobre a disponibilidade de espaço livre. Essa API era utilizada apenas no zswap, portanto, decidiu-se utilizar essa funcionalidade diretamente no zswap, eliminando camadas desnecessárias.
    • Para a arquitetura RISC-V, foi adicionado suporte para acesso a contadores de desempenho a partir do espaço do usuário e a possibilidade de armazenar um dump do núcleo após uma falha em uma área fora dos 4GB.
    • Adicionado suporte inicial para as instruções ARM SME (Scalable Matrix Extension).
    • Implementada a possibilidade de utilizar ferramentas de depuração KDB, KGDB, kcov, KFENCE e KASAN em sistemas com arquitetura LoongArch.
    • Adicionado suporte para arquivos de teste do núcleo no sistema de integração contínua GitLab, que é utilizado no desenvolvimento de drivers gráficos.
  • Subsistema de disco, entrada/saída e sistemas de arquivos
    • O sistema de arquivos OverlayFS agora suporta o armazenamento de hashes fs-verity no atributo estendido (xattr) overlay.verity, que pode ser usado para verificar a integridade e autenticidade dos arquivos nas camadas inferiores do OverlayFS utilizando hashes criptográficos e chaves. Assim, o OverlayFS agora inclui todas as alterações necessárias para o projeto Composefs funcionar como uma camada sobre o sistema de arquivos OverlayFS e EROFS.
    • No sistema de arquivos XFS, foi feita a preparação para implementar a capacidade de aplicar a ferramenta fsck para verificar e corrigir problemas encontrados em modo online, sem desmontar o sistema de arquivos. Além disso, foi implementada a possibilidade de usar grandes folhetos (folios) no cache de páginas e algumas otimizações relacionadas foram adicionadas, permitindo um aumento significativo no desempenho para certos tipos de carga.
    • No sistema de arquivos tmpfs, foi adicionada a capacidade de suporte a atributos estendidos personalizados (user xattrs), entrada/saída direta e limites associados a usuários e grupos. Os deslocamentos para diretórios foram estabilizados, o que resolveu problemas com a exportação do tmpfs através do NFS.
    • Na API de gerenciamento de montagem, para aumentar a segurança, foi adicionado o sinalizador FSCONFIG_CMD_CREATE_EXCL, que proíbe o compartilhamento do superbloco em vários pontos de montagem (proíbe a anexação de uma partição a vários pontos de montagem). No utilitário mount, foi proposta a opção "—exclusive" para ativar esse sinalizador.
    • No subsistema VFS, foi adicionada a capacidade de alterar dinamicamente os parâmetros de tempo de acesso e modificação (atime, mtime). Anteriormente, os dados de tempo eram refletidos com algum atraso, o que dificultava o monitoramento da atualidade dos dados no cache em sistemas como o NFS (devido ao atraso na determinação de mudanças no arquivo, o sistema podia erroneamente considerar que os dados no cache estavam atualizados). A nova funcionalidade está disponível para Btrfs, Ext4, tmpfs e XFS.
    • No Btrfs, o mecanismo embutido de verificação de integridade, que era ativado na fase de construção através do parâmetro BTRFS_FS_CHECK_INTEGRITY, foi declarado obsoleto. Esse mecanismo não está mais sendo mantido, não é mais testado e cria uma carga adicional no CPU e na memória. Além disso, no Btrfs, uma otimização de desempenho do novo código de verificação do sistema de arquivos (scrub) foi realizada.
    • No sistema de arquivos Ext4, verificações periódicas para atualização do superbloco foram adicionadas e operações de alocação de memória foram aceleradas durante a gravação no final do arquivo.
    • O subsistema FUSE agora suporta o atributo btime (‘tempo de criação’), que define o tempo de criação do inode.
    • É proibida a alteração das permissões de acesso para links simbólicos.
    • Adicionada a chamada de sistema fchmodat2(), que difere da chamada de sistema fchmodat() por um argumento adicional para especificação de flags. No momento, apenas AT_SYMLINK_NOFOLLOW e AT_EMPTY_PATH são suportados, permitindo a implementação de restrições sobre desreferenciamento de links simbólicos na função fchmodat() da libc sem contornos e possibilitando o uso do descritor de arquivo ao indicar um caminho vazio.
    • No sistema de arquivos EROFS (Extendable Read-Only File System), destinado a partições acessíveis em modo somente leitura, foi adicionada a suporte ao algoritmo de compressão Deflate. Para acelerar a busca de atributos estendidos, foi utilizada uma estrutura probabilística chamada bloom filter.
    • Adicionada a configuração CONFIG_BUFFER_HEAD, que permite compilar o núcleo sem usar a estrutura buffer_head. Ao compilar sem buffer_head, pode-se usar dispositivos de bloco e alguns sistemas de arquivos, como xfs, btrfs, cramfs, erofs e squashfs.
    • No driver de dispositivos de bloco ublk, que permite mover lógica específica para o processo no espaço do usuário, foi adicionada a suporte a dispositivos de armazenamento zonados (separação em zonas de grupos de blocos ou setores, onde é permitido apenas o acréscimo sequencial de dados, atualizando todo o grupo de blocos de uma vez).
    • A implementação do sistema de arquivos ReiserFS foi reclassificada de suportada para obsoleta. A interrupção do suporte ao ReiserFS está programada para 2025. As razões para a reclassificação do ReiserFS incluem a estagnação na manutenção deste sistema de arquivos, a problemática não resolvida do ano 2038, a falta de opções para garantir a resistência a falhas e a intenção de reduzir o trabalho necessário para manutenção de alterações comuns em sistemas de arquivos relacionadas ao novo API para montagem, iomap e folios.
    • No servidor NFS, foi implementado um mecanismo de delegação para operações de gravação no NFSv4, aumentando a eficiência do cache de gravação de arquivos para reduzir o tráfego. Suporte para a operação READ_PLUS, definida no NFS 4.2, foi incluído.
    • Foi adicionada compatibilidade com fscrypt no sistema de arquivos Ceph.
  • Virtualização e segurança
    • Foi implementado o mecanismo Shadow Stack, que bloqueia a execução de muitos exploits, utilizando recursos de hardware dos processadores Intel para proteger contra a reescrita do endereço de retorno da função em caso de estouro de buffer na pilha. A defesa funciona da seguinte maneira: após o controle ser transferido para a função, o endereço de retorno é salvo pelo processador não apenas na pilha normal, mas também em uma pilha "sombria" separada, que não pode ser alterada diretamente. Antes da saída da função, o endereço de retorno é extraído da pilha sombria e verificado com o endereço de retorno da pilha principal. Uma discrepância nos endereços gera uma exceção, bloqueando situações em que um exploit conseguiu reescrever o endereço na pilha principal. A pilha sombria de hardware é suportada apenas em compilações de 64 bits, enquanto em compilações de 32 bits é utilizada uma emulação de software.
    • Foi adicionada suporte para compilações do compilador Clang com o modo de proteção CFI (Control Flow Integrity) ativado, bloqueando violações da ordem normal de execução (fluxo de controle) devido a exploits que alteram os ponteiros de função armazenados na memória.
    • Para a arquitetura RISC-V, a randomização da colocação do núcleo na memória durante o carregamento foi habilitada.
    • Foi adicionado ao sistema de chamadas seccomp() o sinal SECCOMP_USER_NOTIF_FD_SYNC_WAKE_UP, permitindo processar eventos de processos monitorados em modo síncrono para uma operação mais eficiente do planejador de tarefas.
    • Na função kmalloc(), a randomização dos caches slab foi implementada, dificultando a exploração das vulnerabilidades no núcleo.
    • Removida a menção à Agência de Segurança Nacional dos EUA das opções relacionadas à ativação do sistema de controle forçado de acesso SELinux. Como o projeto está em desenvolvimento há 20 anos sob a tutela da comunidade e é mantido por mantenedores independentes, decidiu-se usar o nome "SELinux" em vez de "NSA SELinux" nos comentários e na documentação no Kconfig (por exemplo, a explicação do parâmetro de compilação SECURITY_SELINUX foi alterada de "Suporte ao NSA SELinux" para "Suporte ao SELinux").
    • No sistema de chamadas userfaultfd(), foi adicionada a operação UFFDIO_POISON, permitindo marcar páginas de memória como "envenenadas", o que pode ser usado para transferir páginas de memória corrompidas durante a migração máquinas virtuais de um sistema para outro.
    • A nova interface simbólica foi adicionada ao subsistema VFIO (/dev/vfio/devices/vfioX) para gerenciar dispositivos VFIO, permitindo que o usuário abra diretamente o arquivo do dispositivo, sem recorrer à interface de grupo obsoleta /dev/vfio/$groupID.
    • Em servidor O suporte para tipos obsoletos de criptografia Kerberos, que usam os algoritmos DES e 3DES, foi descontinuado no NFS.
    • Suporte para sistemas convidados protegidos pela tecnologia AMD SEV-SNP (Secure Nested Paging) e Intel TDX (Trusted Domain Extensions) foi adicionado ao executar em um ambiente de hipervisor Hyper-V.
    • Ao compilar o kernel no modo "W=1", o compilador padrão agora inclui os avisos "-Wformat-overflow", "-Wformat-truncation", "-Wstringop-overflow" e "-Wrestrict". Para todas as compilações, o aviso "-Wenum-conversion" está ativado.
  • Subsistema de Rede
    • A implementação da família de endereços AF_XDP (eXpress Data Path) foi ampliada para trabalhar com pacotes armazenados em vários buffers (por exemplo, um buffer pode conter o cabeçalho do pacote e outro, os dados, ou em uma cadeia de vários buffers, podem ser armazenados grandes pacotes jumbo Ethernet). Programas que utilizam sockets AF_XDP agora podem receber e enviar pacotes diretamente de vários buffers.
    • O subsistema BPF passou a incluir suporte para a desfragmentação de pacotes IPv4 e IPv6, bem como a filtragem de pacotes fragmentados.
    • Um novo manipulador update_socket_protocol foi adicionado ao BPF, permitindo que programas BPF alterem o protocolo solicitado para novos sockets. Por exemplo, um programa BPF pode substituir de forma transparente o protocolo TCP por MPTCP (multipath TCP) para otimizar o tráfego de aplicativos. O BPF também agora suporta a gestão de roteamento de pacotes através de diferentes fluxos em MPTCP.
    • A marca de desenvolvimento experimental foi removida do módulo ksmbd, que oferece uma implementação de servidor de arquivos baseada no protocolo SMB3 em nível de kernel. O suporte para a fusão de operações de leitura (consultas "read compound") foi adicionado.
  • Hardware
    • Mudanças necessárias para o funcionamento eficaz do driver NVK, que implementa a API gráfica Vulkan para placas gráficas NVIDIA, foram feitas no subsistema DRM (Direct Rendering Manager). Originalmente, o driver DRM Nouveau foi projetado para implementar OpenGL, portanto, faltam primitivas necessárias para o funcionamento eficaz dos drivers Vulkan, como suporte a objetos sincronizados e gerenciamento de espaço de endereço virtual.
    • No driver AMDGPU implementou suporte para SDMA 6.1.0, HDP 6.1, SMUIO 14.0, PSP 14.0, IH 6.1 e GFX 9.4.3. O código de carregamento do firmware PSP (Platform Security Processor) foi reestruturado. O suporte à tecnologia de sincronização adaptativa FreeSync foi ampliado (suporte adicionado para Freesync Panel Replay V2).
    • No driver i915, a implementação do suporte para os chips Intel Meteor Lake foi continuada. O suporte à tecnologia de proteção contra cópias HDCP (High-bandwidth Digital Content Protection) foi aprimorado. O código para interação com o display foi reestruturado.
    • As opções para desativar o carregamento do microcódigo durante a fase de construção — MICROCODE_INTEL e MICROCODE_AMD — foram removidas do Kconfig. O núcleo agora sempre é construído com código de carregamento de microcódigo para sistemas x86, mas o carregamento real do microcódigo pode ser desativado especificando o parâmetro do núcleo 'dis_ucode_ldr'.
    • Foi adicionada a capacidade de gerenciar dispositivos de áudio conectados através do subsistema IIO (Industrial I/O) ao subsistema de áudio.
    • O suporte para interfaces de áudio Intel LunarLake, Intel ArrowLake e AMD ACP5x, codecs Cirrus Logic CS42L43, Realtek RT1017 e TI TAS2781, bem como amplificadores Cirrus Logic CS35L56 e winic aw88261 foram adicionados. Suporte ASoC AMD Van Gogh também foi implementado.
    • Foi adicionado um driver USB MIDI 2.0 Gadget, simulando a interface USB MIDI 2.0, vinculado ao dispositivo ALSA UMP rawmidi.
    • Foi adicionado suporte para controladores Ethernet Broadcom ASP 2.0 e Marvell 88Q2XXX.
    • O suporte para painéis Visionox R66451, TDO TL050HDV35, KD070FHFID015, Inanbo T28CP45TN89 e EDT ET028013DMA, controladores de display Loongson e controladores de tela sensível ao toque Azoteq IQS7222D/IQS7210A/7211A foi adicionado.
    • O suporte para ARM SoC Qualcomm SM4450 (Snapdragon 4 Gen 2), TI AM62P5, Intel Agilex5, Qualcomm ipq5018 e AN400 (Amlogic T7) foi implementado.
    • Foi adicionado suporte para placas ARM da Samsung Galaxy Tab 3 8.0, FriendlyElec NanoPC T6, Amlogic A311D2, Khadas Vim4, Xiaomi SM7125, Facebook Yosemite 4, Orange Pi Zero 3 e Radxa ROCK 4SE.

Simultaneamente, a Fundação Latino-Americana de Software Livre formou uma versão totalmente livre do núcleo 6.6 — Linux-libre 6.6-gnu, limpa de elementos de firmware e drivers que contêm componentes ou trechos de código não livres, cuja aplicação é limitada pelo fabricante. A versão 6.6 atualizou o código de limpeza de blobs em vários drivers e subsistemas, por exemplo, nos drivers TI gigabit RU ethernet, MediaTek 792x wifi, Cirrus Logic cs42l43 mfd, cs35l56 HD-audio e aw88261 SoC. A limpeza dos nomes dos blobs nos arquivos dts para a arquitetura Aarch64 foi realizada. Blobs em novos drivers ivpu, em drivers bluetooth, no driver para telas sensíveis ao toque e no codificador/decodificador Qualcomm Venus V4L2 foram removidos.

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