Relatório de progresso do FreeBSD para o terceiro trimestre de 2019

publicado relatório sobre o desenvolvimento do projeto FreeBSD de julho a setembro de 2019. Entre as mudanças podemos notar:

  • Questões gerais e sistêmicas
    • A equipe Core aprovou geralmente a possibilidade de incluir código no sistema que é distribuído sob a licença BSD com um acordo de patente adicional (BSD+Patente), mas a decisão de incluir cada componente no sistema sob esta licença deve ser aprovada separadamente;
    • Aconteceu a primeira reunião do grupo de trabalho criado para realizar a migração dos códigos-fonte do sistema centralizado de controle de fontes Subversion para o sistema descentralizado Git. A discussão sobre a viabilidade da migração ainda está em andamento e decisões sobre muitas questões ainda precisam ser desenvolvidas (por exemplo, o que fazer com contrib/, se é necessário regenerar hashes no repositório git atual e qual a melhor forma de implementar testes de comete);
    • Do NetBSD portado Kit de ferramentas KCSAN (Kernel Concurrency Sanitizer), que permite detectar condições de corrida entre threads de kernel em execução em CPUs diferentes;
    • O trabalho está em andamento para usar o montador integrado (IAS) do Clang em vez do montador GNU binutils;
    • A infraestrutura de emulação do ambiente Linux (Linuxulator) está adaptada para funcionar na arquitetura ARM64. Implementada a chamada de sistema “renameat2”. O utilitário strace foi aprimorado para diagnosticar problemas em executáveis ​​do Linux em execução no Linuxulator. O problema com travamentos ao vincular arquivos executáveis ​​com glibc novo foi resolvido. As portas com componentes Linux para Linuxulator foram atualizadas para CentOS 7.7;
    • No âmbito do programa Google Summer of Code, os alunos concluíram com sucesso seis projetos: foi preparada uma implementação de um utilitário de ping unificado (IPv4/IPv6), foram desenvolvidas ferramentas para testar firewalls e identificar erros no kernel (Kernel sanitizer), o mac_ipacl módulo foi proposto, código foi escrito para compactação de memória virtual e trabalho foi feito para separar o processo de construção de porta da instalação local;
    • O projeto para testes fuzzing do kernel do FreeBSD usando o sistema continua a se desenvolver syzkaller. Durante o período do relatório, mais de dez erros foram identificados e eliminados usando o syzkaller. Para executar o syzkaller em máquinas virtuais baseadas em bhyve, um servidor separado é dedicado e usando
      syzbot estabeleceu testes de vários subsistemas do FreeBSD na infraestrutura do Google. Organizei a transferência de informações sobre todos os crashes para o serviço backtrace.io para simplificar seu agrupamento e análise;

    • Estão em andamento trabalhos para atualizar a implementação do zlib no nível do kernel.
      O código relacionado à compactação foi migrado do zlib 1.0.4, lançado há mais de 20 anos, para a base de código atual do zlib 1.2.11. Para unificar o acesso ao zlib, as funções compress, compress2 e uncompress foram adicionadas ao kernel. O código que garante o funcionamento do protocolo PPP do subsistema netgraph foi transferido para utilizar a implementação do sistema zlib, ao invés de sua própria edição desta biblioteca. Os subsistemas kern_ctf.c, opencryptodeflate, geom_uzip, subr_compressor também foram transferidos para o novo zlib.
      if_mxge, bxe atualizado e ng_deflate;

    • Uma nova interface do kernel está sendo desenvolvida sysctlinfo, que permite encontrar elementos no banco de dados de parâmetros sysctl, processados ​​​​na forma de MIB (Management Information Base) e transferir informações sobre objetos para o espaço do usuário.
  • segurança
    • Módulo Kernel desenvolvido mac_ipacl, baseado no TrustedBSD MAC Framework e implementando um sistema de controle de acesso para configurações de pilha de rede para ambientes de prisão. Por exemplo, usando mac_ipacl, um administrador de sistema host pode impedir que o usuário root em um ambiente jail altere ou defina endereços IP ou configurações de sub-rede para determinadas interfaces de rede. Proposta de sistema de controle de acesso obrigatório permite definir listas de endereços IP e sub-redes permitidas para Jail, proibir a instalação de determinados IPs e sub-redes na Jail ou limitar a alteração de parâmetros apenas para determinadas interfaces de rede;
    • A Intel doou uma porta de pilha de software para o projeto TPM 2.0 (Trusted Platform Module) para fazer interface com o chip de computação seguro, que geralmente é usado para carregamento verificado de firmware e bootloader do sistema operacional. Os componentes da pilha são apresentados na forma de portas security/tpm2-tss, security/tpm2-tools e security/tpm2-abrmd. A porta tpm2-tss inclui bibliotecas para usar a API TPM2, tpm2-tools fornece utilitários de linha de comando para executar operações TPM e tpm2-abrmd contém uma implementação de processo em segundo plano dos componentes TPM Access Broker e Resource Manager que multiplexa solicitações de diferentes usuários TPM para um único dispositivo. Além da inicialização verificada no FreeBSD, o TPM pode ser usado para aumentar a segurança do Strongswan IPsec, SSH e TLS executando operações criptográficas em um chip separado;
    • O kernel para a arquitetura amd64 é adaptado para inicializar usando a técnica de proteção W^X (write XOR execute), o que significa que as páginas de memória não podem ser acessadas simultaneamente para escrita e execução (o kernel agora pode ser carregado usando páginas de memória executáveis ​​para as quais a escrita é proíbido). O novo método de proteção do kernel está incluído no branch HEAD e será incluído nas versões 13.0 e 12.2 do FreeBSD;
    • Para chamadas de sistema mmap e mprotect implementado macro PROT_MAX(), que permite determinar o conjunto de flags de restrição de acesso permitidos para alterações posteriores (PROT_READ, PROT_WRITE, PROT_EXEC). Usando PROT_MAX(), um desenvolvedor pode proibir a transferência de uma região de memória para a categoria executável ou solicitar memória que não permite execução, mas pode posteriormente ser convertida em executável. Por exemplo, uma região da memória pode estar aberta para gravação apenas durante a vinculação dinâmica ou geração de código JIT, mas uma vez concluída a gravação, ela fica restrita apenas para leitura e execução e, no futuro, se comprometida, o invasor não será capaz de habilitar a escrita para esse bloco de memória. Além de PROT_MAX(), também é implementado sysctl vm.imply_prot_max, que quando ativado, determina o conjunto de flags válidos com base nos parâmetros iniciais da primeira chamada ao mmap;
    • Para aumentar a proteção contra a exploração de vulnerabilidades, além da técnica de randomização de espaço de endereço (ASLR), um mecanismo para randomizar os deslocamentos de ponteiros que abordam o quadro de pilha inicial e estruturas colocadas na pilha com informações sobre o ambiente, parâmetros de lançamento do programa e dados para imagens executáveis ​​em formato ELF é proposto;
    • Trabalho foi feito para remover a função unsafe get da libc (a partir do padrão C11, esta função foi excluída da especificação) e para corrigir as portas que ainda usam esta função. A mudança está planejada para ser oferecida no FreeBSD 13.0;
    • Foi lançado um projeto experimental para criar ferramentas para orquestrar ambientes de prisão com base no framework lata para criação e exportação de imagens, implementado de forma semelhante ao Docker, e um driver nômade, que fornece uma interface para iniciar aplicativos dinamicamente em um ambiente de prisão. O modelo proposto nos permite separar os processos de criação de ambientes jail e de implantação de aplicativos neles. Um dos objetivos do projeto é fornecer um meio de manipular jails como contêineres estilo Docker;
  • Sistemas de armazenamento e arquivos
    • Do NetBSD ao utilitário "makefs" mudou-se Suporte ao sistema de arquivos FAT (msdosfs). As alterações preparadas permitem criar imagens FS com FAT sem usar o driver md e sem autoridade root;
    • Foi concluída a reformulação do driver do subsistema FUSE (Sistema de arquivos no USErspace), permitindo a criação de implementações de sistemas de arquivos no espaço do usuário. O driver enviado originalmente continha muitos bugs e era baseado no FUSE 7.8, lançado há 11 anos. Como parte do projeto de modernização do driver, foi implementado suporte para o protocolo FUSE 7.23, foi adicionado código para verificação de direitos de acesso no lado do kernel (“-o default_permissions”), foram adicionadas chamadas para VOP_MKNOD, VOP_BMAP e VOP_ADVLOCK, o foi fornecida a capacidade de interromper operações FUSE, foi adicionado suporte para pipes sem nome e soquetes unix no fusefs, tornou-se possível usar kqueue para /dev/fuse, foi possível atualizar parâmetros de montagem via “mount -u”, adicionado suporte para exportar fusefs via NFS, implementou a contabilidade RLIMIT_FSIZE, adicionou os sinalizadores FOPEN_KEEP_CACHE e FUSE_ASYNC_READ, fez otimizações de desempenho significativas e melhorou a organização do cache. O novo driver está incluído nas ramificações head e stable/12 (incluídas no FreeBSD 12.1);
    • A implementação do NFSv4.2 (RFC-7862) para FreeBSD está quase concluída. O foco principal durante o período do relatório foi nos testes. Os testes foram concluídos para verificar a compatibilidade com a implementação do Linux, mas os testes do servidor pNFS com NFSv4.2 ainda estão em andamento. Em geral, o código já é considerado pronto para integração nas ramificações principais/atual do FreeBSD. A nova versão do NFS adiciona suporte às funções posix_fadvise, posix_fallocate, modos SEEKHOLE/SEEKDATA em lseek, operação de cópia local de partes de um arquivo no servidor (sem transferência para o cliente);
  • Suporte de hardware
    • Um projeto foi lançado para melhorar o desempenho do FreeBSD em laptops. O primeiro dispositivo a ser auditado para suporte de hardware no FreeBSD foi o laptop Lenovo X1 Carbon de sétima geração;
    • CheriBSD, um fork do FreeBSD para arquitetura de processador de pesquisa CHERI (Instruções RISC aprimoradas por hardware de capacidade), atualizadas para suportar o próximo processador ARM Morello, que suportará o sistema de controle de acesso à memória CHERI baseado no modelo de segurança do design Capsicum. Chip Morello estão planejando lançamento em 2021. Os desenvolvedores do CheriBSD também continuam monitorando o desenvolvimento do protótipo de referência CHERI baseado na arquitetura MIPS;
    • Suporte expandido para chips RockChip RK3399 usados ​​em placas RockPro64 e NanoPC-T4. A melhoria mais significativa foi o suporte ao eMMC e o desenvolvimento de um novo driver para o controlador eMMC utilizado na placa;
    • Continuam os trabalhos de implementação do suporte ao SoC ARM64 Broadcom BCM5871X com processadores ARMv8 Cortex-A57, destinados ao uso em roteadores, gateways e armazenamento de rede. Durante o período do relatório
      O suporte iProc PCIe foi expandido e a capacidade de usar operações criptográficas de hardware para acelerar o IPsec foi adicionada.
      A integração do código na filial HEAD é esperada para o quarto trimestre;

    • Houve avanços significativos no desenvolvimento de uma porta FreeBSD para a plataforma powerpc64. O foco está em fornecer desempenho de qualidade em sistemas com processadores IBM POWER8 e POWER9, mas opcionalmente suporta operação em Apple Power Macs mais antigos, x500 e Amiga A1222. A ramificação powerpc*/12 continua sendo fornecida com o gcc 4.2.1, e a ramificação powerpc*/13 será migrada para llvm90 em breve. Das 33306 portas, 30514 foram montadas com sucesso;
    • A portabilidade do FreeBSD continua para o SoC NXP LS64A de 1046 bits baseado no processador ARMv8 Cortex-A72 com um mecanismo integrado de aceleração de processamento de pacotes de rede, Ethernet de 10 Gb, PCIe 3.0, SATA 3.0 e USB 3.0. Durante o período do relatório, foi implementado suporte para interface de rede USB 3.0, SD/MMC, I2C, DPAA e GPIO. Existem planos para oferecer suporte a QSPI e otimizar o desempenho da interface de rede. A conclusão dos trabalhos e inclusão na sucursal HEAD está prevista para o 4º trimestre de 2019;
    • O driver ena foi atualizado para oferecer suporte à segunda geração de adaptadores de rede ENAv2 (Elastic Network Adapter) usados ​​na infraestrutura Elastic Compute Cloud (EC2) para organizar a comunicação entre nós EC2 em velocidades de até 25 Gb/s. O suporte NETMAP foi adicionado e testado ao driver ena, e o layout de memória foi adaptado para habilitar o modo LLQ em ambientes Amazon EC2 A1;
  • Aplicações e sistema portuário
    • Componentes de pilha gráfica atualizados e portas relacionadas ao xorg. As portas que usam USE_XORG e XORG_CAT foram movidas para a estrutura USES em vez de chamar bsd.xorg.mk via bsd.port.mk. Essas portas agora incluem o sinalizador "USES=xorg" em seus makefiles. A funcionalidade XORG_CAT foi separada do bsd.xorg.mk e agora está habilitada pelo sinalizador "USES=xorg-cat". Adicionadas ferramentas para gerar diretamente portas xorg a partir de um repositório git
      freedesktop.org, que, por exemplo, permite criar portas para versões ainda não lançadas. No futuro, planejamos preparar ferramentas para usar o sistema de montagem meson em vez de ferramentas automáticas para construir portas xorg.

      Trabalho foi feito para limpar portas xorg antigas vinculadas a componentes que não são mais suportados, por exemplo, a porta x11/libXp foi removida e as portas x11/Xxf86misc, x11-fonts/libXfontcache e graphics/libGLw foram descontinuadas ;

    • Trabalho foi feito para melhorar o suporte para Java 11 e versões mais recentes no FreeBSD, bem como para portar algumas mudanças para o branch Java 8. Após o suporte para novos recursos do Java 11 como Java Flight Recorder, HotSpot Serviceability Agent, HotSpot Debugger foi implementado para FreeBSD, DTrace, Javac Server, Java Sound e SCTP, o trabalho mudou para garantir que todos os testes de compatibilidade fossem aprovados. O número de reprovações ao passar nos testes foi reduzido de 50 para 2;
    • A área de trabalho KDE Plasma, KDE Frameworks, aplicativos KDE e Qt são mantidos atualizados e atualizados com as versões mais recentes;
    • Portas com desktop Xfce atualizadas para lançamento 4.14;
    • A árvore de ports do FreeBSD ultrapassou 38000 portas, o número de PRs não fechados é pouco mais de 2000, dos quais 400 PRs ainda não foram resolvidos. Durante o período do relatório, 7340 alterações foram feitas por 169 desenvolvedores. Dois novos participantes (Santhosh Raju e Dmitri Goutnik) receberam direitos de committer. Foi publicada uma nova versão do gerenciador de pacotes pkg 1.12, com suporte para sobreposições na árvore de ports e limpeza de bsd.sites.mk. Entre as atualizações de versão significativas nos ports estão: Lazarus 2.0.4, LLVM 9.0, Perl5.30, PostgreSQL 11, Ruby 2.6, Firefox 69.0.1, Firefox-esr 68.1.0, Chromium 76.0;
    • O desenvolvimento do projeto continua ClonOS, em desenvolvimento uma distribuição especializada para implantação de infraestrutura de servidor virtual. Em termos de tarefas que resolve, o ClonOS se assemelha a sistemas como Proxmox, Triton (Joyent), OpenStack, OpenNebula e Amazon AWS, cuja principal diferença é o uso do FreeBSD e a capacidade de gerenciar, implantar e gerenciar contêineres FreeBSD Jail e ambientes virtuais baseados em hipervisores Bhyve e Xen. Mudanças recentes incluem suporte
      cloud-init para Linux/BSD VM e cloudbase-init para Windows VM, iniciando a transição para o uso de imagens nativas, usando Jenkins CI para testar compilações e um novo repositório pkg para instalação
      ClonOS de pacotes.

Fonte: opennet.ru

Adicionar um comentário