Após dois meses de desenvolvimento, Linus Torvalds apresentou o lançamento do núcleo Linux 6.10. Entre as mudanças mais notáveis estão: o driver ntsync com primitivas de sincronização do Windows NT, componentes DRM Panic para implementar um análogo da 'tela azul da morte', término do suporte a antigas CPUs Alpha, a capacidade de verificação de integridade no sistema de arquivos baseado em FUSE, restrição de acesso a ioctl através do mecanismo Landlock, uma subsistema para o perfil de operações de alocação de memória, chamada de sistema mseal(), possibilidade de troca de dados criptografados com dispositivos TPM, suporte a filas de trabalho de alta prioridade no dm-crypt, e o driver panthor para a décima geração de GPUs Mali.
A nova versão inclui 14.564 correções de 1.989 desenvolvedores, o tamanho do patch é de 41 MB (as mudanças afetaram 12.509 arquivos, 547.663 linhas de código foram adicionadas e 312.464 linhas foram removidas). Na versão anterior, havia 15.680 correções de 2.106 desenvolvedores, com um patch de 54 MB. Cerca de 41% de todas as mudanças apresentadas no 6.10 estão relacionadas a drivers de dispositivos, aproximadamente 15% dizem respeito à atualização de código específico de arquiteturas de hardware, 13% estão ligadas à pilha de rede, 5% às sistemas de arquivos e 4% às subsistemas internos do núcleo.
Principais novidades no núcleo 6.10:
- Subsistema de disco, entrada/saída e sistemas de arquivos
- Uma nova operação fcntl F_DUPFD_QUERY foi adicionada, com a qual um processo pode determinar que dois descritores de arquivo diferentes se referem ao mesmo arquivo. Ao contrário de possibilidades semelhantes, oferecidas pela chamada de sistema kcmp(), o F_DUPFD_QUERY não leva à divulgação de informações desnecessárias e funciona em sistemas com kcmp desativado.
- Na subsistema FUSE, utilizada para a implementação de sistemas de arquivos no espaço do usuário, foi implementada a possibilidade de aplicar o mecanismo fs-verity para verificação da integridade e autenticidade de arquivos.
- No módulo dm-crypt, utilizado para criptografar dispositivos de bloco, foi adicionada a opção 'high_priority', que permite ativar filas de trabalho de alta prioridade para melhorar o desempenho em máquinas poderosas. servidoresPor padrão, o modo está desativado, pois pode levar a um aumento de latências em PCs normais ao realizar tarefas não relacionadas à criptografia, como o processamento de áudio.
- Um protocolo baseado em netlink para gerenciar servidores NFS foi adicionado ao kernel. Uma ferramenta chamada nfsdctl foi desenvolvida para o espaço do usuário com base nesse protocolo. O suporte para montagem do NFS v2 está desativado por padrão (o suporte para NFS v2 no utilitário mount.nfs foi descontinuado em 2021).
- Na sistema de arquivos XFS, o trabalho sobre a implementação da ferramenta fsck para verificar e corrigir problemas detectados em modo online, sem desmontar o sistema de arquivos, foi continuado. Adicionado o ioctl XFS_IOC_EXCHANGE_RANGE para troca de intervalos de bytes entre dois arquivos de forma atômica.
- No Btrfs, foi implementado suporte para redução (shrinker) de mapas de extents não alocados, o que pode ser útil para reduzir o consumo de memória em condições de escassez de memória no sistema. O código para compressão de dados e a função put_file_data() foram adaptados para usar páginas de memória (page folios). O mecanismo de bloqueio de extents durante operações de gravação reversa foi reestruturado.
- No sistema de arquivos Ext4, foi adicionado suporte ao ioctl FS_IOC_GETFSSYSFSPATH para determinar a localização do sistema de arquivos montado na hierarquia /sys/fs.
- Os sistemas de arquivos OPENPROMFS, ISOFS, QNX6, NILFS2, MINIX e FREEVXFS foram atualizados para usar a nova API de montagem de partições.
- No sistema de arquivos EROFS (Extendable Read-Only File System), destinado ao uso em partições acessíveis apenas em modo de leitura, foi adicionado suporte para o algoritmo de compressão Zstandard.
- No Bcachefs, foi feita a preparação para executar fsck sem desmontar a partição (verificação online). Foram feitas alterações e correções para aumentar a confiabilidade. Foi implementada a capacidade de atualização e reversão do formato do sistema de arquivos em modo 'nochanges', que desabilita gravações e armazena metadados apenas na memória.
- No sistema de arquivos OverlayFS, foi adicionado suporte para criação de arquivos temporários usando a opção O_TMPFILE.
- O suporte ao mecanismo de limitação de largura de banda para dispositivos de bloco 'CONFIG_BLK_DEV_THROTTLING_LOW' foi descontinuado, mantendo-se em estado experimental desde 2017, sem aplicação prática e dificultando a manutenção do subsistema de dispositivos de bloco.
- Memória e serviços do sistema
- Adicionado, mas desativado durante a construção, o driver ntsync, que implementa o dispositivo simbólico /dev/ntsync e um conjunto de primitivos de sincronização usados no núcleo do Windows NT. A implementação desses primitivos a nível de núcleo permite aumentar significativamente o desempenho dos jogos do Windows executados através do Wine. O aumento de desempenho é alcançado eliminando a sobrecarga associada ao uso de RPC no espaço do usuário. A criação de um driver separado para o núcleo do Linux é explicada pela dificuldade de implementar corretamente a API de sincronização NT sobre os primitivos existentes no núcleo.
- Adicionada uma subsistema para profilação de operações de alocação de memória no núcleo do Linux, permitindo identificar vazamentos de memória no núcleo e facilitando a realização de otimizações no consumo de memória. A subsistema garante baixa sobrecarga, permitindo seu uso não apenas em versões de depuração do núcleo, mas também em sistemas de produção.
- Adicionada a implementação inicial do manipulador de erros no núcleo — DRM Panic, que utiliza a subsistema DRM (Direct Rendering Manager) para exibir um relatório colorido visual no estilo da "tela azul da morte". Na próxima versão, está planejado adicionar a capacidade de exibir um logotipo e um código QR na tela em caso de uma situação de erro.
- Continua a transferência de mudanças da ramificação Rust-for-Linux, relacionada 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 está ativado por padrão, e não leva à inclusão do Rust como uma dependência obrigatória de construção do núcleo). Foi realizada a transição para o uso da versão Rust 1.78, permitindo mudar para a biblioteca padrão alloc, em vez de uma ramificação própria. Foram adicionadas abstrações para trabalhar com o tempo no núcleo (uma camada sobre a estrutura ktime_t). Suporte foi adicionado para usar componentes do núcleo na linguagem Rust em sistemas com arquitetura RISC-V.
- Nos programas BPF foi implementada a possibilidade de uso de filas de espera (wait queue) no núcleo. Foram adicionadas as funções bpf_preempt_disable e bpf_preempt_enable, permitindo a criação de seções de código não interrompíveis pelo planejador de tarefas. Foi disponibilizado acesso a funções criptográficas do núcleo (crypto) para programas BPF. O suporte à JIT-compilação de programas BPF em sistemas com processadores de 32 bits ARCv2 foi implementado.
- Para sistemas ARM de 32 bits, foi implementado o suporte para a construção do núcleo com o compilador Clang com o modo de proteção CFI (Control Flow Integrity) ativado, bloqueando violações da ordem normal de execução (control flow) resultantes da aplicação de exploits que alteram ponteiros de função armazenados na memória.
- Foi adicionada a capacidade de reflexão direta através de mmap() de buffers de anel de rastreamento para transferir seu conteúdo para o espaço do usuário sem cópia adicional.
- Foi adicionado a chamada de sistema 'mseal', permitindo que processos bloqueiem alterações em partes específicas de seu espaço de endereço. Na prática, essa nova chamada de sistema está planejada para ser usada no navegador Chrome para reforçar o isolamento de sandbox.
- Para a subarquitetura x32, que fornece um ABI híbrido x86_64, permitindo o uso de um modelo de endereçamento de memória de 32 bits em sistemas de 64 bits (o processador opera em modo de 64 bits, mas utiliza ponteiros e operações aritméticas de 32 bits), foi adicionado o suporte para o mecanismo Shadow Stack, que permite bloquear a execução de muitos exploits, utilizando os recursos de hardware dos processadores Intel para proteger contra a sobrescrita do endereço de retorno de uma função em caso de estouro de buffer na pilha.
- Em sistemas com arquitetura ARM64, na chamada de sistema userfaultfd(), que permite criar manipuladores de condições de falha de página (page faults) não alocadas na memória no espaço do usuário, foram implementadas funcionalidades relacionadas à proteção contra gravação em áreas de memória e elementos da tabela de páginas de memória.
- O código de suporte para os processadores Alpha 21164 (EV5) e séries anteriores, lançados a partir de 1995, foi removido. O suporte a esses processadores tornou-se complicado devido à ausência de acesso à memória em nível de byte. Alpha foi a primeira arquitetura onde o kernel do Linux foi portado, inicialmente disponível apenas para sistemas x86.
- Virtualização e segurança
- Adicionado suporte para troca de dados criptografados com dispositivos TPM (Trusted Platform Module) e verificação de integridade de transações.
- No módulo LSM Landlock, que permite restringir a interação de um conjunto de processos com o ambiente externo, foi adicionada a possibilidade de aplicar regras para limitar o acesso a chamadas ioctl().
- Uma opção init_mlocked_on_free foi proposta na fase de inicialização, garantindo a limpeza do conteúdo da memória protegida contra swap usando a chamada mlock(), se essa memória for liberada sem desbloqueio pela chamada munlock(). O uso dessa opção evita que chaves criptográficas permaneçam na memória em caso de falha do aplicativo que as utiliza.
- Na subsistema crypto, o desempenho das operações de criptografia de disco usando o algoritmo AES-XTS foi acelerado em sistemas x86_64 com processadores Intel e AMD que suportam as extensões VAES, AVX2, VPCLMULQDQ, AVX10 ou AVX512.
- A capacidade de coletar estatísticas sobre o uso da criptossubstituição do kernel (CONFIG_CRYPTO_STATS) foi removida. Esse recurso não era utilizado na prática e resultava em uma redução significativa de desempenho, além de gerar uma carga adicional apreciável para os mantenedores.
- Subsistema de Rede
- A performance das operações de envio de dados em modo zero-copy usando a subsistema io_uring foi significativamente aumentada. Adicionada a capacidade de agrupar ('bundle') vários buffers para operações de envio e recepção de dados.
- O código de coleta de lixo utilizado ao enviar descritores de arquivos através de soquetes Unix com mensagens SCM_RIGHTS foi reescrito. Essa modificação resolve o problema de acumulação de contadores de referências ciclícos.
- Adicionada a capacidade de definir filtros para o protocolo PFCP (Packet Forwarding Control Protocol), utilizado em redes 4G e 5G.
- Foi adicionada a suporte para a opção de soquetes de rede SO_PEEK_OFF, que, assim como a opção equivalente para soquetes Unix, permite determinar o deslocamento dos dados na fila, utilizado pela chamada de sistema recv ao especificar a flag MSG_PEEK (marca os dados como não lidos e eles serão fornecidos novamente na próxima chamada de recv).
- Foi acrescentado ao subsistema io_uring o suporte para a operação IORING_CQE_F_SOCK_NONEMPTY, que permite identificar a presença de conexões em espera em um soquete de rede.
- Foi proposta a implementação da tecnologia PoE (Power over Ethernet), baseada em código anteriormente disponível para suporte a PoDL (Power over Data Line) e compatível com controladores PoE Microchip PD692x0 e TI TPS23881.
- Para os protocolos TCP, DCCP e MPTC, foi adicionado o suporte ao mecanismo rstreason, que permite determinar a razão para o envio de pacotes RST (por exemplo, NO_SOCKET).
- Hardware
- Foi incluído o driver panthor para a décima geração de GPUs Mali (G310, G510, G710), que utiliza a tecnologia CSF (Command Stream Frontend), transferindo algumas funções do driver para o lado do firmware a fim de reduzir a carga na CPU e oferecendo um novo modelo de organização para a execução de tarefas na GPU. Mudanças para o suporte ao novo driver também foram implementadas no Mesa e incluídas no driver Gallium panfrost para GPUs Mali.
- Foram adicionados identificadores PCI de novas placas gráficas discretas Intel Arc (DG2/Alchemist) ao driver i915.
- Continuou o trabalho no driver drm (Direct Rendering Manager) Xe para GPUs baseadas na arquitetura Intel Xe, que é utilizada em placas gráficas Intel da família Arc e em gráficos integrados, a partir dos processadores Tiger Lake. Foi adicionado suporte para CPU Arrow Lake H. O suporte para processadores Lunar Lake foi avançado. O suporte inicial para o mecanismo SR-IOV (Single Root I/O Virtualization) foi adicionado.
- Foi adicionado suporte para SMU 14.0 (System Management Unit) no driver AMDGPU. Foi possibilitada a utilização das novas GPUs AMD em sistemas com arquitetura RISC-V.
- Foi adicionado um driver para o acelerador de operações criptográficas Tegra Security Engine, que pode ser usado para acelerar AES e vários algoritmos de hashing.
- Foi adicionado suporte para painéis de tela LG SW43408, Innolux G121XCE-L01 LVDS, RK3326 GameForce Chi, Crystal Clear CMT430B19N00, POWERTIP PH128800T006-ZHC01, Startek KD050HDFIA020-C020A, Pixel 3a, Khadas TS050 V2, Raydium RM69380, BOE NT116WHM-N44, CMN N116BCA-EA1 e AUO B120XAN01.0.
- Adicionada a compatibilidade com o subsistema de som dos laptops Lenovo Thinkbook 13x Gen 4, Lenovo Thinkbook 16P Gen 5, Lenovo Thinkbook 13X e ASUS Zenbook 2024 HN7306W. Adicionada a compatibilidade com placas de som externas Vocaster One e Vocaster Two. Adicionado driver para amplificadores NAU8325 da Nuvoton Technology.
- No driver HID-Steam, foi adicionada a suporte para IMU (Unidade de Medição Inercial) do controle Steam Deck, permitindo o uso de um nó evdev separado para acessar os dados do giroscópio e acelerômetro.
- Mudanças foram introduzidas para suporte ao SoC ARM Snapdragon X Elite, que utiliza um CPU Qualcomm Oryon de 12 núcleos e GPU Qualcomm Adreno. O chip é direcionado para uso em laptops e PCs, superando em muitos testes de desempenho os chips Apple M3 e Intel Core Ultra 155H.
- Adicionada a compatibilidade com plataformas ARM, SoC e dispositivos: PocketBook 614 Plus, Sony Xperia Z3, Xperia 1 V, Samsung Galaxy S5 China, Motorola Moto G, RK3326 GameForce Chi, Anbernic RG35XX (Plus/H/2024), Airoha EN7581, Radxa ROCK 3C, ArmSom Sige7, Tanix TX1, Toradex Colibri iMX8DX, Renesas RZ/V2H, Forlinx OK3588-C, Protonic MECSBC, Emcraft Systems NavQ+, NXP S32G3, Wolfvision pf5, Amlogic A4/A5, ASUS RT-AC3200, ASUS RT-AC5300, ASrock E3C256D4I, IBM system1 BMC, Meta Harma BMC(AST2600), ASRock X570D4U BMC, Au-Zone Maivin AI Vision Starter Kit.
- Adicionada a compatibilidade com placas Milk-V Mars, que utilizam SoC Starfive JH7110 baseado na arquitetura RISC-V.
Simultaneamente, a Fundação de Software Livre da América Latina formou uma versão totalmente livre do kernel 6.10 — Linux-libre 6.10-gnu, limpa de elementos de firmware e drivers que contêm componentes não livres ou trechos de código cuja aplicação é restrita pelo fabricante. Na versão 6.10, o código de limpeza de blobs foi atualizado nos drivers Intel i915, rtl8xxxu, qla2xxx e QCAI sahara. Realizada a limpeza de nomes de blobs nos arquivos dts (devicetree) para a arquitetura Aarch64. Novos arquivos adicionados nos drivers Adreno, Intel IPU3 e PRUEth foram limpos de blobs. A limpeza dos novos drivers Panthor, Intel IPU6, PRUEth SR1, rtw8703b, tps23881, air_en8811h, Intel ISH HID e pcm6240 foi completada. A limpeza do driver USB Prism2.5/3 USB foi interrompida, pois foi removido do kernel.
Fonte: opennet.ru
