Após dois meses de desenvolvimento, Linus Torvalds apresentou o lançamento do kernel Linux 5.13. Entre as mudanças mais notáveis estão: o sistema de arquivos EROFS, suporte inicial para chips Apple M1, o controlador cgroup 'misc', descontinuação do suporte ao /dev/kmem, suporte para novas GPUs Intel e AMD, a capacidade de chamada direta de funções do kernel a partir de programas BPF, a randomização da pilha do kernel para cada chamada de sistema, a possibilidade de compilação no Clang com proteção CFI (Control Flow Integrity), o módulo LSM Landlock para restrições adicionais de processos, um dispositivo de áudio virtual baseado em virtio e o modo multi-shot no io_uring.
Na nova versão, foram aceitas 17189 correções de 2150 desenvolvedores (o maior número da história), o tamanho do patch é de 60 MB (as mudanças afetaram 12996 arquivos, com 794705 linhas de código adicionadas e 399590 linhas removidas). Cerca de 47% de todas as mudanças apresentadas no 5.13 estão relacionadas a drivers de dispositivos, aproximadamente 14% estão ligadas a atualizações de código específicas de arquiteturas de hardware, 13% estão relacionadas à pilha de rede, 5% a sistemas de arquivos e 4% a subsistemas internos do kernel.
Principais novidades:
- Subsistema de disco, entrada/saída e sistemas de arquivos
- Adicionado suporte para o sistema de arquivos EROFS (Enhanced Read-Only File System), proposto pela Huawei para uso em partições disponíveis apenas em modo de leitura. O novo sistema de arquivos suporta armazenamento de dados de forma compactada e, em comparação com o Ext4, demonstra desempenho semelhante em operações de leitura sequencial, mas supera o Ext4 em várias vezes em acessos aleatórios a dados. Por exemplo, com um nível de compressão de 4 e testando em servidor um disco rígido, o sistema de arquivos EROFS superou o Ext4 em operações de leitura aleatória em mais de seis vezes, e ao usar um smartphone Android com Flash, quase três vezes. Assim como em outros sistemas de arquivos somente leitura, a estrutura do EROFS é significativamente simplificada ao descartar certas áreas de metadados na implementação, como o bitmap de blocos livres.
- Para o sistema de arquivos SMB3, uma opção de montagem 'rasize' foi implementada, que permite definir o tamanho da janela de leitura antecipada (readahead) para aumentar o desempenho de alguns tipos de carga.
- No sistema de arquivos ext4, a reescrita de elementos de diretório ao excluir arquivos foi garantida. No ext4, também é permitido o uso simultâneo do modo sem distinção entre maiúsculas e minúsculas e da criptografia.
- No sistema de arquivos exFAT, foi adicionado suporte ao comando ioctl FITRIM (discard), para informar ao dispositivo sobre os blocos não utilizados no sistema de arquivos.
- No sistema de arquivos XFS, foi adicionada a possibilidade de realocar espaço do último grupo de distribuição no sistema de arquivos, tornando-se o primeiro passo na implementação da função de redução do tamanho das partições existentes no sistema de arquivos XFS.
- Foi adicionado um novo chamador de sistema quotactl_path, que difere do quotactl ao permitir o gerenciamento de quotas não através de um arquivo de dispositivo especial, mas especificando o caminho para o ponto de montagem do sistema de arquivos.
- No mecanismo fanotify, as funcionalidades disponíveis para usuários não privilegiados foram ampliadas. Por exemplo, assim como no inotify, sem os direitos SYS_CAP_ADMIN agora é possível monitorar eventos OPEN, ACCESS, MODIFY e CLOSE para arquivos e diretórios.
- Memória e serviços do sistema
- Foi adicionado um novo controlador cgroup - "Misc" (CONFIG_CGROUP_MISC), destinado a limitar e monitorar recursos escalares, que podem ser geridos com um simples contador e limitados, definindo valores máximos permitidos. Como exemplo de uso desse novo controlador cgroup, menciona-se a gestão de identificadores de espaço de endereço, aplicados no mecanismo AMD SEV (Secure Encrypted Virtualization).
- Na interface de entrada/saída assíncrona io_uring, para solicitações POLL, foi implementado o modo "multi-shot", onde o POLL não é removido após a geração de um evento, permanecendo ativo e podendo gerar vários eventos.
- Do ramo realtime do kernel, foi transferido o código que garante o tratamento de interrupções geradas por software nas threads do kernel, permitindo que sejam suprimidas por processos de maior prioridade.
- Foi adicionada uma biblioteca interna netfs, na qual foram movidas funções típicas usadas em sistemas de arquivos de rede.
- Para a arquitetura PowerPC, foi implementado suporte a namespaces de tempo (time namespaces), permitindo que um contêiner utilize seu próprio tempo.
- Para a arquitetura RISC-V, foi implementado suporte para kexec, crash dump, kprobe e execução do kernel no local (execute-in-place, execução a partir da mídia original, sem cópia para a RAM).
- Em programas de rastreamento BPF, surgiu a possibilidade de usar armazenamento de dados local para a tarefa (task-local storage), proporcionando maior desempenho ao vincular dados a um manipulador BPF específico.
- Foi implementado um novo mecanismo para a chamada direta de funções do núcleo a partir de programas BPF, que já está sendo utilizado na implementação de algoritmos de sobrecarga TCP. Para garantir a segurança, as funções chamadas devem ser explicitamente definidas em uma lista branca.
- Foi adicionada uma opção func-no-repeats ao sistema de rastreamento de funções ftrace, permitindo refletir chamadas de função consecutivas repetidas como um contador.
- Na chamada de sistema userfaultfd(), projetada para lidar com page faults (acesso a páginas de memória não alocadas) no espaço do usuário, foi adicionada a capacidade de gerenciar faults parciais, onde a página de memória está presente, mas não há entrada na tabela de páginas de memória.
- Foi descontinuado o suporte ao arquivo especial /dev/kmem, que permite o acesso a todo o espaço de endereçamento do núcleo. Este arquivo foi considerado obsoleto e cria problemas de segurança.
- Para chips Intel, foi implementado um novo driver para gestão de resfriamento, que permite reduzir a frequência do processador em caso de risco de superaquecimento. Ao contrário do mecanismo existente de ativação TCC (Thermal Control Circuit), o novo driver manipula valores relativos, ou seja, pode reduzir a frequência na fase inicial de um aumento significativo de temperatura, sem esperar pela superação de um valor crítico de limite.
- Virtualização e segurança
- Inclui um módulo LSM de isolamento de aplicações Landlock, que limita a interação com o ambiente externo de um grupo de processos e foi desenvolvido com base em mecanismos de isolamento como XNU Sandbox, FreeBSD Capsicum e OpenBSD Pledge/Unveil. A lógica de concessão de acesso é determinada por meio de um programa BPF, mas, ao contrário do seccomp-bpf, o Landlock não filtra chamadas de sistema e seus argumentos, mas permite restringir o uso de objetos do núcleo, como hierarquias de arquivos. Com o Landlock, qualquer processo, incluindo não privilegiados, pode se isolar de forma segura e evitar que a isolamento seja contornado em caso de descoberta de vulnerabilidades ou alterações maliciosas no aplicativo. O Landlock permite que um processo crie ambientes isolados protegidos, implementados como uma camada adicional sobre os mecanismos existentes de controle de acesso.
- Foi adicionada a capacidade de randomização dos deslocamentos na pilha do núcleo durante o processamento de chamadas de sistema, a fim de dificultar os ataques à pilha. A essência da proteção proposta é a escolha de um deslocamento aleatório da pilha a cada chamada de sistema, o que complica a determinação da disposição da pilha na memória, mesmo em caso de obtenção de informações sobre os endereços, já que na próxima chamada de sistema o endereço base da pilha mudará. Para ativar a randomização, foram sugeridos o parâmetro de linha de comando do núcleo "randomize_kstack_offset=on/off" e a configuração CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT. Os custos adicionais são estimados em aproximadamente 1% de perda de desempenho.
- Foi adicionada a suporte à construção do núcleo com a ativação do mecanismo de proteção CFI (Control Flow Integrity) no compilador Clang, que adiciona uma verificação antes de cada chamada de função indireta para identificar algumas formas de comportamento indefinido que podem potencialmente levar a uma violação da ordem normal de execução (fluxo de controle) como resultado da aplicação de exploits que alteram os ponteiros para funções armazenados na memória. Para ativar o CFI, foi sugerido o parâmetro CONFIG_CFI_CLANG.
- No serviço de armazenamento de chaves de criptografia (key ring) fornecido pelo núcleo, o mecanismo de Chaves Confiáveis (Trusted Keys) agora abrange não apenas as chaves de módulos TPM, mas também de ambientes TEE (Trusted Execution Environment). Para gerenciar a fonte de chaves confiáveis, foi proposto o parâmetro de inicialização "trusted.source". Além disso, foi adicionada a capacidade de processar chaves confiáveis no formato ASN.1.
- Foi adicionado um parâmetro para o carregamento antecipado da lista de certificados revogados durante a inicialização do núcleo. O problema (CVE-2020-26541) com a ignorância na lista negra do UEFI Secure Boot de certificados fornecidos no formato EFI_CERT_X509_GUID, que permitia o carregamento do sistema com um certificado revogado, foi resolvido.
- O subsistema de criptografia do núcleo agora suporta a verificação de assinaturas digitais ECDSA baseadas em curvas elípticas.
- Foi implementada a possibilidade de verificação de políticas SELinux por meio do subsistema IMA (Integrity Measurement Architecture), que assegura a manutenção de um banco de hashes para verificar a integridade dos dados.
- Subsistema de Rede
- O suporte à tecnologia WiMAX foi removido, uma vez que já não é utilizado em redes públicas, e a única driver com a qual se pode utilizar o WiMAX no kernel é o driver desatualizado Intel 2400m. No configurador de rede NetworkManager, o suporte ao WiMAX foi encerrado em 2015. Atualmente, o WiMax foi praticamente substituído por tecnologias como LTE, HSPA+ e Wi-Fi 802.11n.
- Adicionado driver para o adaptador de rede MANA (Microsoft Azure Network Adapter).
- No driver ath11k, foi adicionado suporte para módulos sem fio Qualcomm QCN9074 com suporte a 802.11ax.
- No driver iwlwifi, foi implementada a possibilidade de escaneamento passivo de canais na faixa de 6GHz. Para a Ucrânia, foi adicionada a opção de ativar/desativar o IEEE 802.11ax com base em configurações na BIOS.
- Foi realizada otimização do subsistema XDP (eXpress Data Path), permitindo manipular pacotes de rede antes de serem processados pela pilha de rede do kernel Linux. Os testes realizados mostram um aumento na performance do XDP de 4-8%. Para dispositivos virtio, o ganho de performance no processamento de AF_XDP pode chegar a 33%.
- No ICMP, foi implementado suporte para mensagens PROBE avançadas, definidas no RFC 8335.
- A integração ao núcleo MPTCP (MultiPath TCP), uma extensão do protocolo TCP para permitir a operação de conexões TCP com entrega de pacotes simultaneamente por vários caminhos através de diferentes interfaces de rede, foi continuada. endereços IP. Na nova versão, foi adicionado suporte a sockopt para definir opções padrão de TCP. Implementada a possibilidade de redefinir subfluxos individuais (subflow).
- No netfilter, foi adicionado suporte para gerenciamento de recursos usando uma hierarquia unificada de cgroups v2.
- No ethtool, foi implementada uma interface para leitura de estatísticas IEEE MIB com suporte a mlx5 e bnxt. Os drivers de rede agora têm permissão para extrair dados arbitrários do SFP EEPROM, manipulando não por um par deslocamento+tamanho, mas por páginas de memória.
- Hardware
- Implementado suporte inicial para o chip ARM da Apple M1, abrangendo o controlador de interrupções, temporizador, UART, SMP, funções para organização de entrada/saída e MMIO. A engenharia reversa da GPU ainda não foi concluída, para a saída é fornecido suporte a framebuffer e console via porta serial.
- Continuada a limpeza do kernel de drivers antigos, removidos os drivers 'gasket' (Google ASIC), 'sysace', 'umem' e vários drivers antigos para portas seriais.
- Após 13 anos na ramificação staging, o driver 'comedi' para suporte a dispositivos de coleta de dados foi estabilizado e transferido para o conjunto principal.
- Adicionado o driver GUD (Generic USB Display) com a implementação de um driver básico para monitores e adaptadores de TV conectados via interface USB. O driver fornece propriedades DRM (Direct Rendering Manager) para rotação de imagem, controle de brilho, acesso ao EDID, configuração de modos de vídeo e conexão de TV, que podem ser usados como base para a criação de drivers para dispositivos específicos.
- Adicionado o driver de áudio 'virtio' com a implementação de um dispositivo de áudio virtual que pode ser usado em sistemas convidados para saída e gravação de som sem redirecionar o acesso à placa de som e sem emulação.
- O driver amdgpu adicionou suporte inicial para GPU Aldebaran (gfx90a). O suporte inicial para a tecnologia de sincronia adaptativa FreeSync para HDMI foi incluído (anteriormente disponível apenas para DisplayPort), que permite ajustar a taxa de atualização da informação na tela. O suporte ao ASSR (Alternate Scrambler Seed Reset) foi incluído. Adicionado ioctl para solicitar capacidades relacionadas à codificação e decodificação de vídeo. Adicionado o modo CONFIG_DRM_AMD_SECURE_DISPLAY para detectar alterações em displays que exibem informações críticas. Adicionado suporte ao mecanismo de economia de energia ASPM.
- O driver i915 para placas de vídeo Intel inclui suporte para chips Intel Alderlake-S. Suporte para eDP MSO (Embedded DisplayPort Multi-SST Operation) foi adicionado.
- Adicionado suporte ao controle de jogos Luna (Amazon), bem como a telas sensíveis ao toque Hycon HY46XX, ILITEK Lego Series e MStar MSG2638.
Simultaneamente, a Fundação Latino-Americana do Software Livre formou uma versão totalmente livre do kernel 5.11 — Linux-libre 5.11-gnu, limpa de elementos de firmware e drivers que contêm componentes não livres ou trechos de código cuja área de aplicação é limitada pelo fabricante. Na nova versão, foi feita uma limpeza do driver comedi. A limpeza dos drivers cyclades, isicom tty e i2400m wimax foi interrompida, sendo que estes foram removidos do kernel. O código de limpeza de blobs nos drivers e subsistemas amdgpu, i915 csr, r8152 usb, mhi bus, x86 touchscreen e qualcomm arm64 foi atualizado.
Fonte: opennet.ru
