Após dois meses de desenvolvimento, Linus Torvalds lançamento do núcleo . Entre as mudanças mais notáveis estão: o modo de operação do Ext4 sem distinção entre letras maiúsculas e minúsculas, chamadas de sistema separadas para montagem de FS, drivers para GPU Mali 4xx/6xx/7xx, a capacidade de processar alterações nos valores do sysctl em programas BPF, o módulo device-mapper dm-dust, proteção contra ataques MDS, suporte ao Sound Open Firmware para DSP, otimização do desempenho BFQ e a implementação do subsistema PSI (Pressure Stall Information) para uso no Android.
Na nova versão, foram incorporadas 15.100 correções de 1.882 desenvolvedores.
O tamanho do patch é de 62 MB (as mudanças afetaram 30.889 arquivos, com 625.094 linhas de código adicionadas e 531.864 linhas removidas). Cerca de 45% de todas as alterações apresentadas no 5.2
estão relacionadas a drivers de dispositivos, aproximadamente 21% das mudanças dizem
respeito à atualização de código específico para arquiteturas de hardware, 12%
relacionado à pilha de rede, 3% — sistemas de arquivos e 3% com internos
dos subsistemas do núcleo. 12,4% de todas as mudanças foram preparadas pela Intel, 6,3% pela Red Hat, 5,4% pelo Google, 4,0% pela AMD, 3,1% pela SUSE, 3% pela IBM, 2,7% pela Huawei, 2,7% pela Linaro, 2,2% pela ARM, 1,6% pela Oracle.
:
- Subsistema de disco, entrada/saída e sistemas de arquivos
- Para o Ext4, foi adicionada a capacidade de operar sem distinção entre letras maiúsculas e minúsculas em nomes de arquivos, que é ativada apenas em associação a diretórios vazios específicos usando o novo atributo “+F” (EXT4_CASEFOLD_FL). Ao aplicar este atributo a um diretório, todas as operações com arquivos e subdiretórios dentro dele serão realizadas sem distinção entre letras maiúsculas e minúsculas, incluindo que o caso será ignorado durante operações de pesquisa e abertura de arquivos (por exemplo, arquivos Test.txt, test.txt e test.TXT em tais diretórios serão considerados idênticos). Por padrão, o FS continua a ser sensível a maiúsculas e minúsculas, exceto nos diretórios com o atributo “chattr +F”;
- As funções de manipulação de caracteres UTF-8 em nomes de arquivos foram unificadas, sendo aplicadas ao realizar operações de comparação e normalização de strings;
- No XFS, foi adicionada infraestrutura para monitorar o estado do sistema de arquivos e um novo ioctl para solicitar o status de operação. Foi implementada uma possibilidade experimental para verificação em tempo real (online scrub) dos contadores do superbloco.
- Foi adicionado um novo módulo device-mapper ““, que permite simular a ocorrência de bad blocks no meio ou erros ao ler do disco. O módulo facilita a depuração e teste de aplicativos e diferentes sistemas de armazenamento em condições de possíveis falhas.
- significativa otimização do desempenho do agendador de entrada/saída BFQ. As otimizações implementadas foram feitas sob alta carga de I/O reduzir em até 80% o tempo de operações como o lançamento de aplicativos;
- Uma série de chamadas de sistema foi adicionada para montagem de sistemas de arquivos: , , , , e . Essas chamadas de sistema permitem o tratamento separado das diferentes etapas de montagem (processar o superbloco, obter informações sobre o sistema de arquivos, montar, anexar ao ponto de montagem), que antes eram executadas através da chamada de sistema genérica mount(). Chamadas separadas possibilitam a execução de cenários de montagem mais complexos e a realização separada de operações como reconfiguração do superbloco, habilitação de opções, alteração do ponto de montagem e movimentação para outro espaço de nomes. Além disso, o tratamento separado permite identificar com precisão as causas dos códigos de erro e definir várias fontes para sistemas de arquivos em camadas, como overlayfs;
- Uma nova operação IORING_OP_SYNC_FILE_RANGE foi adicionada na interface de entrada/saída assíncrona io_uring, realizando ações equivalentes à chamada de sistema , além da implementação de registro de eventfd com io_uring e recebimento de notificações sobre a conclusão de operações;
- Para o sistema de arquivos CIFS, foi adicionado o ioctl FIEMAP, que fornece uma mapeação eficiente de extensões, além do suporte para os modos SEEK_DATA e SEEK_HOLE;
- Na subsistema FUSE API para gerenciamento de cache de dados;
- No Btrfs, foi otimizada a implementação dos qgroups e melhorada a velocidade de execução do fsync para arquivos com múltiplos links duros. O código de verificação de integridade dos dados foi aprimorado, agora considerando a possível corrupção de informações na memória antes de descartar dados no disco;
- No CEPH, foi adicionada a suporte para exportação de snapshots via NFS;
- A implementação da montagem NFSv4 no modo "soft" foi aprimorada (ao ocorrer um erro de acesso ao servidor no modo "soft", a chamada retorna imediatamente um código de erro, enquanto no modo "hard" o controle não é devolvido até a retomada da disponibilidade do sistema de arquivos ou um timeout). A nova versão fornece um tratamento mais preciso do timeout, acelera a recuperação após falhas e adiciona uma nova opção de montagem "softerr", permitindo alterar o código de erro (ETIMEDOUT), retornado quando ocorre um timeout;
- Na API nfsdcld, destinado ao monitoramento do estado dos clientes NFS, foi implementada a capacidade de rastrear corretamente o estado do cliente pelo servidor NFS durante a reinicialização. Assim, o daemon nfsdcld agora pode atuar como manipulador do nfsdcltrack;
- Para AFS emulação de bloqueios de intervalos de bytes em arquivos ();
- Virtualização e segurança
- Foi realizada uma revisão do núcleo para eliminar locais que permitam a execução de código a partir de áreas de memória graváveis refletidas, o que ajuda a bloquear possíveis brechas que possam ser exploradas em um ataque;
- Adicionado um novo parâmetro de linha de comando do núcleo "mitigations=", oferecendo uma maneira simplificada de controlar a ativação de determinadas técnicas de mitigação de vulnerabilidades relacionadas à execução especulativa de instruções na CPU. Passar "mitigations=off" desativa todos os métodos disponíveis, enquanto o modo padrão "mitigations=auto" ativa a proteção, mas não afeta o uso do Hyper Threading. O modo "mitigations=auto,nosmt" desativa adicionalmente o Hyper Threading, se exigido pelo método de proteção.
- suporte à assinatura digital eletrônica segundo GOST R 34.10-2012 (RFC 7091, ISO/IEC 14888-3), por Vitaly Chikunov da "Bazalt SPO". O suporte a AES128-CCM foi adicionado à implementação embutida do TLS. No módulo crypto_simd, foi adicionada a compatibilidade com os algoritmos AEAD;
- No Kconfig existe uma seção separada "kernel hardening" com opções para aumentar a proteção do núcleo. Atualmente, a nova seção contém apenas configurações para ativar plugins do GCC que fortalecem as verificações;
- O código do núcleo está quase livre de expressões contínuas case no switch (sem return ou break após cada bloco case). Restam 32 de 2311 instâncias desse tipo de uso do switch para serem corrigidas, após o que o modo "-Wimplicit-fallthrough" poderá ser aplicado durante a compilação do núcleo;
- Para a arquitetura PowerPC, foi implementado suporte a mecanismos de hardware que limitam caminhos indesejados de acesso do núcleo a dados no espaço do usuário;
- Foi adicionado código para bloqueio da classe MDS (Microarchitectural Data Sampling) em processadores Intel. A vulnerabilidade do sistema pode ser verificada através da variável SysFS "\/sys\/devices\/system\/cpu\/vulnerabilities\/mds". dois modos de proteção: completo, que requer microcódigo atualizado, e um modo de contorno, que não garante completamente a limpeza dos buffers do CPU ao transferir o controle para o espaço do usuário ou sistema convidado. Para gerenciar os modos de proteção, foi adicionado ao núcleo o parâmetro "mds=", que pode assumir os valores "full", "full,nosmt" (+ desativando Hyper-Threads) e "off";
- Em sistemas x86-64, para IRQ, mecanismos de depuração e manipuladores de exceções, foi adicionada a proteção "stack guard-page", que consiste na inserção de uma página de memória na borda da pilha, cujo acesso gera uma exceção (page-fault);
- Adicionada a configuração sysctl vm.unprivileged_userfaultfd, que controla a possibilidade de processos não privilegiados usarem a chamada de sistema userfaultfd();
- Subsistema de Rede
- suporte a gateways IPv6 para rotas IPv4. Por exemplo, agora é possível especificar regras de roteamento como "ip ro add 172.16.1.0/24 via inet6 2001:db8::1 dev eth0";
- Para ICMPv6, foram implementadas chamadas ioctl icmp_echo_ignore_anycast e icmp_echo_ignore_multicast para ignorar ICMP ECHO para anycast e
endereços multicast. possibilidade de limitar a intensidade do processamento de pacotes ICMPv6; - Para o protocolo de malha B.A.T.M.A.N. ("Better Approach To Mobile Adhoc Networking"), que permite criar redes descentralizadas onde cada nó está conectado através de nós vizinhos, suporte à tradução de multicast para unicast, bem como a possibilidade de controle através de sysfs;
- No ethtool, um novo parâmetro Fast Link Down, que permite reduzir o tempo de recebimento de informações sobre eventos de desconexão de link para 1000BaseT (em condições normais, a latência pode chegar a 750ms);
- Foi adicionada vinculação de túneis Foo-Over-UDP a um endereço específico, interface de rede ou socket (anteriormente, a vinculação era feita apenas por uma máscara geral);
- No stack wireless, a possibilidade de implementar manipuladores
OWE (Opportunistic Wireless Encryption) no espaço do usuário; - No Netfilter, foi adicionada suporte ao conjunto de endereços inet nas cadeias nat (por exemplo, agora é possível usar uma única regra de tradução para processar ipv4 e ipv6, sem separação de regras para ipv4 e ipv6);
- No netlink, estrito para verificação rigorosa de todas as mensagens e atributos, onde não é permitida a superação do tamanho esperado dos atributos e é proibida a adição de dados adicionais no final das mensagens;
- Memória e serviços do sistema
- A flag CLONE_PIDFD has been added to the system call clone(), which, when specified, returns a file descriptor 'pidfd' to the parent process, associated with the created child process. This file descriptor, for example, can be used to send signals without the risk of encountering a race condition (immediately after sending a signal, the target PID may be released due to process termination and occupied by another process);
- For the second version of cgroups, functionality has been added to the freezer controller, which allows halting operations in the cgroup and temporarily freeing up some resources (CPU, input/output, and potentially even memory) for other tasks. Management is done through the control files cgroup.freeze and cgroup.events in the cgroup tree. Writing 1 to cgroup.freeze freezes processes in the current cgroup and all child groups. Since freezing takes some time, an additional file cgroup.events has been provided to inquire about the completion of the operation;
- Export of memory attributes attached to each node in sysfs, allowing user space to determine the nature of the memory bank processing in systems with heterogeneous memory;
- The PSI (Pressure Stall Information) subsystem has been improved, allowing for the analysis of waiting time for various resources (CPU, memory, input/output) for specific tasks or sets of processes in the cgroup. Using PSI, user-space handlers can more accurately assess system load levels and the nature of slowdowns compared to Load Average. The new version provides support for configuring sensitivity thresholds and the ability to use the poll() call to receive notifications about the triggering of set threshold values over a specified period. This capability allows for early detection of memory shortages in Android, identifying the source of issues, and terminating unimportant applications before noticeable problems arise for users. During stress testing, memory consumption monitoring tools based on PSI demonstrated ten times fewer false positives compared to vmpressure statistics;
- Foi realizada uma otimização do código para verificar programas BPF, que para programas grandes agora executa a verificação até 20 vezes mais rápido. A otimização permitiu aumentar o limite de tamanho de programas BPF de 4096 para um milhão de instruções;
- Para programas BPF a capacidade de acesso a dados globais, o que permite definir variáveis e constantes globais nos programas;
- Adicionado , permitindo controlar a partir de programas BPF as alterações nos parâmetros sysctl;
- Para a arquitetura MIPS32, um compilador JIT foi implementado para a máquina virtual eBPF;
- Para a arquitetura PowerPC de 32 bits, foi adicionada a suporte à ferramenta de depuração KASan (Kernel Address Sanitizer), que permite identificar erros relacionados à memória;
- Em sistemas x86-64, foi removida a limitação de alocação de dumps de estado em caso de falha do kernel (crash-dump) em áreas de memória acima de 896MB;
- Para a arquitetura s390, foi implementado suporte para a randomização do espaço de endereçamento do kernel (KASLR) e a possibilidade de verificação de assinaturas digitais ao carregar o kernel através do kexec_file_load();
- Para a arquitetura PA-RISC, foi adicionada suporte ao depurador do kernel (KGDB), pontos de interrupção e kprobes;
- Hardware
- Inclui o driver para GPU Mali 400/450, usada em muitos chips antigos baseados na arquitetura ARM. Para GPUs Mali mais novas, foi adicionado o driver Panfrost, que suporta chips baseados nas microarquiteturas Midgard (Mali-T6xx, Mali-T7xx, Mali-T8xx) e Bifrost (Mali G3x, G5x, G7x);
- Adicionada suporte a dispositivos de áudio que utilizam firmware aberto (). Embora existam drivers abertos, o código dos firmwares para chips de áudio ainda permaneceu fechado e foi fornecido em formato binário. O projeto Sound Open Firmware foi desenvolvido pela Intel para criar firmwares abertos para chips DSP relacionados ao processamento de áudio (mais tarde, o Google também se juntou ao desenvolvimento). Atualmente, o projeto já preparou firmwares abertos para chips de áudio das plataformas Intel Baytrail, CherryTrail, Broadwell, ApolloLake, GeminiLake, CannonLake e IceLake;
- No driver DRM da Intel (i915), foi adicionada suporte a chips
Elkhartlake (Gen11). Adicionados identificadores PCI para chips Comet Lake (Gen9). A compatibilidade com chips Icelake foi estabilizada, para os quais também foram adicionados identificadores PCI adicionais.
modo de alternância assíncrona entre dois buffers na memória de vídeo (async flip) ao realizar operações de gravação via mmio, o que aumentou significativamente o desempenho de alguns aplicativos 3D (por exemplo, o desempenho no teste 3DMark Ice Storm aumentou em 300-400%). Suporte adicionado para a tecnologia (Proteção de Conteúdo Digital de Alta Largura de Banda) para criptografar o sinal de vídeo transmitido via HDMI; - No driver amdgpu para GPU Vega20 suporte a RAS (Confiabilidade, Disponibilidade, Mantenabilidade) e suporte experimental para o subsistema SMU 11, que substituiu a tecnologia Powerplay. Para GPU Vega12 suporte ao modo BACO (Bus Ativo, Chip Desligado). Suporte inicial adicionado para XGMI, um barramento de alta velocidade (PCIe 4.0) para conectar GPUs. No driver amdkfd foram adicionados identificadores ausentes para placas baseadas em GPU Polaris10;
- No driver Nouveau, suporte adicionado para placas com chipset NVIDIA Turing 117 (TU117, usado na GeForce GTX 1650). Em
kconfig configuração para desativar funções obsoletas que já não são utilizadas em versões atuais do libdrm; - Na API DRM e no driver amdgpu, suporte adicionado para objetos de sincronização "timeline", permitindo evitar bloqueios clássicos.
- Do ramo de staging, o driver vboxvideo para GPU virtual VirtualBox foi transferido para o conjunto principal;
- Adicionado driver aspeed para chip GFX SoC ASPEED;
- Suporte adicionado a ARM SoC e placas Intel Agilex (SoCFPGA), NXP i.MX8MM, Allwinner (RerVision H3-DVK (H3), Oceanic 5205 5inMFD, Beelink GS2 (H6), Orange Pi 3 (H6)), Rockchip (Orange Pi RK3399, Nanopi NEO4, Chromebook Veyron-Mighty), Amlogic: SEI Robotics SEI510,
ST Micro (stm32mp157a, stm32mp157c), NXP (
Eckelmann ci4x10 (i.MX6DL),i.MX8MM EVK (i.MX8MM),
ZII i.MX7 RPU2 (i.MX7),
ZII SPB4 (VF610),
Zii Ultra (i.MX8M),
TQ TQMa7S (i.MX7Solo),
TQ TQMa7D (i.MX7Dual),
Kobo Aura (i.MX50),
Menlosystems M53 (i.MX53)), NVIDIA Jetson Nano (Tegra T210).
Simultaneamente, o Fundo Latino-Americano de Software Livre
uma variante — , limpo de elementos de firmware e drivers que contêm componentes não livres ou trechos de código cuja aplicação é limitada pelo fabricante. A nova versão inclui o carregamento de arquivos
Sound Open Firmware. Carregamento de blobs nos drivers foi desativado
mt7615, rtw88, rtw8822b, rtw8822c, btmtksdio, iqs5xx, ishtp e ucsi_ccg. O código de limpeza de blobs em drivers e subsistemas ixp4xx, imx-sdma, amdgpu, nouveau e goya foi atualizado, assim como a documentação do microcódigo. A limpeza de blobs no driver r8822be foi interrompida devido à sua remoção.
Fonte: opennet.ru
